SQL Server 2016 で Business Intelligence Development Studio がない

 

嫁と娘は文化祭巡りに行ってしまい、ボッチになってしまったので、今日は久しぶりに引きこもってSQL Server 2016 ETLツールを触ってみたいと思います。

昔、Integration Services のパッケージデザインやAnalysis Services の多次元データベース設計で Business Intelligence Development Studio を使っていました。

最新版の SQL Server 2016 Enterprise版をインストールしてみると Business Intelligence Development Studio がありません。

SSDT(SQL Server Data Tools)という無償のツールで同様のデザインができるという感じっぽいので、自宅PCでSQL Server 2016 をインストールし、開発環境周りの確認をしてみます。

 

SQL Server 2016 を展開するためのWindows Server を用意

我が家の中で最もハイスペックなマシン(Windows 10パソコン Core i7 3770 3.40Mhz メモリ32GB)のHype-V上にWindows Server 2012 R2 Standard 評価版 を構築します。Windows 10 を展開してもいいのですが、実働環境に近い形でWindows Server にしました。

01

 

SQL Server 2016 評価版をダウンロード

下記よりセットアッププログラム(SQLServer2016-SSEI-Eval.exe)をダウンロードします。

https://www.microsoft.com/ja-jp/evalcenter/evaluate-sql-server-2016

ダウンロードした SQLServer2016-SSEI-Eval.exe を実行すると、インストールを開始するか、メディア(ISOかCabのいずれか)をダウンロードするか選択できます。

Hyper-Vの仮想マシンのDVDドライブにマウントするのでISO版をダウンロードします。

02

03

 

 

SQL Server 2016 インストール前のサーバの機能確認

デフォルトですが.NET 3.5は有効化されていなく、.NET 4.6はインストールされていません。SQL Server 2016、およびSQL Server Data Tools、Management Studioすべてをインストールした後でも、.NET 3.5は有効化されていませんでしたので、SQL Server 2016からは.NET3.5は不要になったのでしょうか・・・

09

 

 

SQL Server 2016 をインストール

仮想マシンへインストールします。まずはSQL Sever本体をインストールします。

05

今回の目標ではデザイン・開発ツールを確認するだけなので、最も機能が豊富な180日間限定のEvaluationエディションを選択しました。

06

更新プログラムでデザイン・開発ツールが自動で入ってしまうと切り分けできないので外します。

07

クリティカルなセキュリティ更新だけは入れます。

08

2016 MSVCRT の SQL Server の必須コンポーネントの重要な更新プログラム
https://support.microsoft.com/ja-jp/kb/3164398

インストールするサービスはデータべースサービスエンジン、Analysis Services、Reporting Services、Integration Servicesを選択します。

1112

ドメイン環境でもないので、各サービスアカウントはデフォルトにしました。

13

照合順序もデフォルトのJapanese_CI_AS。

14

データベースエンジンとAnalysis Servicesの構成定義。

15161718

Business Intelligence Development Studio が見当たりません。

2021222324

SQL Server インストール完了。やはり Business Intelligence Development Studio のようなものは見当たりません。

25

 

 

Management Studioをインストール

インストールセンターからSQL Server Management Toolsをクリックするとダウロードページに飛ぶのでセットアップファイルを入手しインストールします。

27

SQL Server Management Studio (SSMS) のダウンロード
https://msdn.microsoft.com/ja-jp/library/mt238290.aspx

26

Management Studio 以外にもいろいろ追加されました。

28

 

SQL Server Data Tools (SSDT) をインストール

 

SQL Server Data Tools (SSDT) のダウンロード
https://msdn.microsoft.com/ja-JP/library/mt204009.aspx

30

SQL Server Data Tools 2015 と Visual Studio 2015 がインストールされました。

31

SQL Server Data Tools 2015 を起動してみます。

3233

Visual Studio ベースの開発ツールが起動しました。Business Intelligence Development Studio の後継が SQL Server Data Tools (SSDT)  ということでいいのでしょうか・・・まあ、どっちらも Visual Studio ベースですし。

34

Integration Services のプロジェクトも作成、編集できそうです。

35

Analysis Services のプロジェクトもOK。

36

Analysis Services のデータベース(Cube)も開けるようです。

38

Reporting Services プロジェクトも対応しています。

37

Business Intelligence Development Studio の後継が SQL Server Data Tools (SSDT)  で良さそうです。

 

調べ方がよくなかったのか、Business Intelligence Development Studio の後継が SQL Server Data Tools (SSDT)であるという確信を得られなかったので、自分の家で入れてみようと思ったわけです。

SQL Server Data Tools (以下、SSDT)が無償提供のようなので迷いました。

そこで、SSDTは昔使っていたBusiness Intelligence Development Studio と同じようなことができるのか?確認してみたいと思います。

今回はSSISのプロジェクトからDTSXを作ることで確認します。レポートや多次元データベースのAnalysis Serviceプロジェクトは次回(次回があれば)以降にします。

 

(追記)

この記事のタイトル「SQL Server 2016 で Business Intelligence Development Studio がない」でGoogle先生に問い合わせしたら、以下のようにアナウンスされていました。SSDTはBusiness Intelligence Development Studioの後継であり、SQL Server のインストールメディアには含まれないということです。

SQL Server Data Tools の入手と注意点 – Microsoft SQL Server Japan Support Team Blog
https://blogs.msdn.microsoft.com/jpsql/2015/12/03/sql-server-data-tools/

SQL Server Reporting Services のレポートや、Integration Services パッケージ、Analysis Services のデータベース等を作成するにあたって、Business Intelligence Development Studio(SQL Server 2008 R2 までのツール) や SQL Server Data Tools(SQL Server 2012 以降のツール)を使用します。

SQL Server 2012 までは、SQL Server のインストーラーから、Business Intelligence Development Studio や SQL Server Data Tools をインストールすることができました。

SQL Server 2014 より、SQL Server Data Tools は SQL Server のインストーラーに含まれず、個別にダウンロードする必要があります。

ここでは、SQL Server Data Tools の入手先や注意点についてご案内します

 

Integration Services を使ってみる

(ここでやること)

TMDbAPIで取得した映画情報をテキストファイルに保存したタブ区切りテキスト「TMDb.txt」をSSISを使ってクレンジングし、インポートします。

 

インポート先のDBとテーブルを作成

DB「MOVIE」を作成

40

TMDbMOVIEというテーブルを作ります。

USE [MOVIE]
GO

/****** Object:  Table [dbo].[TMDbMovie]    Script Date: 2016/09/10 15:19:56 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

SET ANSI_PADDING ON
GO

CREATE TABLE [dbo].[TMDbMovie](
	[TMDbID] [int] NOT NULL,
	[title] [nvarchar](200) NULL,
	[original_title] [nvarchar](200) NULL,
	[budget] [bigint] NULL,
	[revenue] [bigint] NULL,
	[homepage] [nvarchar](256) NULL,
	[IMDbID] [nvarchar](15) NULL,
	[overview] [nvarchar](max) NULL,
	[popularity] [numeric](5, 2) NULL,
	[release_date] [date] NULL,
	[runtime] [smallint] NULL,
	[tagline] [nvarchar](200) NULL,
	[vote_average] [numeric](6, 2) NULL,
	[vote_count] [int] NULL,
)
GO

テーブル「TMDbMOVIE」を作りました。

43image

このTMDbMOVIEにタブ区切りテキストをIntegration Services(以降、SSIS)のDTSXパッケージでインポートします。

テキストファイルは以下のような感じです。1行目はタイトル行です。ちなみに1行目はスター・ウォーズです。

42

インポートされるとこんな感じになるはずです。ただし、以下の図ではbudget(予算)とrevenue(興業収入)はドルのままです。

41

 

SSDTでテキストデータをインポートする

SSDTで新規SSISパッケージを作成します。

44

上記のように「ソリューションのディレクトリを作成」にチェックすると、下図のようなフォルダ構成になり、ソリューションファイル(.sln)やプロジェクトファイル(.dtproj)が作成されます。

4546

SSISのプロジェクト編集画面です。

47

処理フローは下記のとおりです。

  1. テーブル TMDbMOVIE をTRUNCATE(テーブル初期化)
  2. テキストファイル TMDb.txt の予算と興業収入を日本円(1ドル102円として)に変換
  3. 2をテーブル TMDbMOVIE にインポートする。

各ステップごとにデバッグします。

 

1 テーブル TMDbMOVIE をTRUNCATE(テーブル初期化)

 

テーブル TMDbMOVIE へ接続するための接続マネージャの作成

まず、 TMDbMOVIE をTRUNCATE するために、TMDbMOVIE への接続を作成します。

484950

OLE DB接続ができました。

image

TRUNCATE処理を記述

ツールボックスから SQL実行タスクを選んで、制御フローへドラッグアンドドロップします。SQL実行タスクの内容が未定義で実行できる状況にないので、Xがついています。

image

SQL実行タスクをダブルクリックして、Connecion(接続マネージャ)を選び、TRUNCATE文を直接記述します。

image

SQL実行タスクの内容(実行すべき内容)を記述したのでXが消えました。上にある「▶開始」を押してデバックします。デバックといっても実際に処理されます。

image

正常に処理(TRUNCATE)されました。デバックを中断します。

image

 

2 テキストファイル TMDb.txt の予算と興業収入を日本円(1ドル102円として)に変換

 

フラットファイル(テキストファイル TMDb.txt のこと)に接続するための情報作成

 

image

テキストファイルを指定します。テキストファイルの属性(区切り文字など)を指定します。

image

列を確認します。ここでは列の区切りを確認します。列属性(文字とか数値とか)はこの後です。

image

各列の属性を指定します。

image

imageimage

各列の定義が終了したらプレビューし、OKします。

image

フラットファイル(テキストファイル TMDb.txt のこと)に接続するための情報が作成されました。

image

 

インポート処理の作成

ツールボックスから「データフロータスク」を制御フローへドラッグアンドドロップします。

image

TRUNCATEするSQL実行タスクから伸びる矢印をデータフロータスクへ接続します。接続したらデータフロータスクをダブルクリックします。

image

制御フロータブからデータフロータブへ移動するので、ツールボックスからフラットファイルソースを探します。

image

フラットファイルソースをデータフローへドラッグアンドドロップします。

image

フラットファイルソースをダブルクリックして内容を定義します。

image

不要な列があればここで切り捨てます。今回はすべて取り込みます。OKを押します。

imageimage

ドルの予算額や興業収入額を円に変換するために、派生列をドラッグアンドドロップします。

image

image

派生列をダブルクリックし、派生列を定義(ドル円変換)します。

image

1ドルを102円として円に変換し、新しい列として作成します。置換もできますが、ここでは新しい列を作成し円を入れます。

imageimage

デバックしてみます。エラーとなりました。

image

データクレンジングではよくあることですね。エラー原因を探ります。

出力にエラーメッセージが表示されています。

エラー: 0xC02020A1 (データ フロー タスク, フラット ファイル ソース [2]: データ変換に失敗しました。列 "TMDbID" のデータ変換から、状態値 2 と状態を示すテキスト "データが失われる可能性があるため、値を変換できませんでした。" が返されました。

列 "TMDbID" がおかしいということです。エラーデータをログファイルへ出力(リダイレクト)するようにします。ログファイルはテキストファイルとするので、フラットファイル接続とフラットファイルを配置します。図のようにエラーの矢印(赤)をエラー出力用のフラットファイルソースに接続します。

image

列 "TMDbID"に対し、エラーと切り捨てが発生したらその行をリダイレクトするように定義しました。

image

それでもまたエラーとなりました。

エラー: 0xC02020A1 (データ フロー タスク, フラット ファイル ソース [2]: データ変換に失敗しました。列 "revenue" のデータ変換から、状態値 2 と状態を示すテキスト "データが失われる可能性があるため、値を変換できませんでした。" が返されました。

列 "revenue"もおかしいということなので、エラー発生時はリダイレクトします。

image

なお、より見やすく処理内容を確認する場合は「実行結果タブ」に移ります。

image

まだエラーが発生しています。

フラット ファイル ソース [2]] エラー: データ変換に失敗しました。列 "release_date" のデータ変換から、状態値 2 と状態を示すテキスト "データが失われる可能性があるため、値を変換できませんでした。" が返されました。

image

面倒なので、すべての列に対し、リダイレクトするようにします。

image

今度はエラー無く処理されました。エラーは2行、正常終了は997行です。

image

エラーとなった2行はTMDb_error.logに出力されました。

image

TMDb_error.logの中身です。列がずれています。どこかに改行コードが入っていて、列がずれたのでしょう。

image

 

3 2をテーブル TMDbMOVIE にインポートする。

次にテーブル TMDbMOVIE へインポートします。

インポートにはOLE DB変換先を利用します。ツールボックスからOLE DB変換先をドラッグアンドドロップします。

image

派生列から矢印をつなぎます。

image

OLE DBをダブルクリックします。

image

派生列で変換したテキストデータの列とテーブルTMDbMOVIEの列が自動で対応されます。

image

興業収入派生列で新規に作成した列、日本円の予算額、興業収入額は取り残されています。

image

列名で自動対応しているので、ドルの列は対応を外します。

image

代わりに円の列を対応付けます。OKを押します。

image

テキストデータのtagline(キャッチフレーズ)2000文字に対し、インポート先のtaglineが200バイトなので切り捨てが起きると警告されています。

image

フラットファイルの列 tagline の文字数を200文字に変更します。

image

派生列の上流にあるフラットファイルソースの属性を変更したので、同期がとれていないと警告がでます。もう一度フラットファイルソースをダブルクリックして属性を開き、OKを押して閉じると、下流側の派生列やOLE DB変換先の属性が自動で変換されます。

image

同期がとれ、警告も消えました。

image

 

インポート処理の実行

997件インポートできました。

image

インポート前

image

インポート後

image

テキストファイルがインポートされました。

フラットファイルのクレンジングからインポートまで簡易的に確認しました。SSDTは、SSISパッケージ作成において Business Intelligence Development Studio と呼ばれていた頃のものよりも使いやすく、コンポーネントも増えているような気がします。

ということで結論ですが、SQL Server 2016 をインストールしただけでは、SSIS、SSAS、SSRS用の開発ツールはインストールされないし、インストールメディアにも収録されていないので、別途マイクロソフトのサイトから入手し、インストールする必要があるようです。

デバッグまで終わっているので、DTEXECコマンド等で実行してみます。

 

 

DTSXパッケージの実行

これまではVisual Studio上でデバッグ実行していました。いくつかの方法でDTSXパッケージを実行してみようと思います。3つの方法があるようです。

 

1 DTSXファイルのパスをSSISサービスに登録する

Management Studio から Integration Services に接続します。

imageimage

パッケージが格納される(どこかは知らない)のでそれを実行します。

image

64bitモードで実行されたかはわかりません。

image

 

2 DTEXECコマンドで実行

32bit版で実行されてしまいました。

DTEXEC /F D:\SSIS\SSIS_MOVIE\SSIS_MOVIE\obj\Development\Package.dtsx > c:\users\administrator\desktop\dtexec.log

image

64bit版のDTEXECを指定しないと32bitで動作してしまいます。とりあえず無理やり64bitのDTEXECを指定しましたが、適切な方法があると思います。

"C:\Program Files\Microsoft SQL Server\130\DTS\Binn\"DTEXEC /F D:\SSIS\SSIS_MOVIE\SSIS_MOVIE\obj\Development\Package.dtsx > c:\users\administrator\desktop\dtexec.log

image

 

3 SSISカタログに配置

結局この手順はうまくいきませんでした。最後のパッケージをSSISDBに配置するところで失敗します。

一応やったことのメモとして残しておきます。

開発サーバで作成したパッケージを本番サーバのSQL ServerのSSISDBに登録するようなケースではこの手順でしょうか・・・

 

SSIDDBを作成

配置先となるSSISDBを作成します。手順は下記を参考のとおりです。

SSIS カタログの作成
https://msdn.microsoft.com/ja-jp/library/gg471509.aspx

 

Management Studioからデータベースエンジンに接続します。

image

パスワードは単純じゃダメみたいです。

image

 

配置オブジェクトを作成

プロジェクトをビルドして配置オブジェクトを作成します。

image

image

image

更新をクリックします。パスワードは不要です。

imageimage

配置先のサーバ名を入れます。参照をクリックします。

image

先ほど作成したSSIDDBが表示されます。まずフォルダを作ります。

image

image

新しいプロジェクトをクリックします。

imageimageimage

image

コマンド ライン: /Silent /ModelType:Package /SourcePath:"D:\SSIS\SSIS_MOVIE\SSIS_MOVIE\obj\Development" /Packages:"Package.dtsx;" /DestinationServer:"vSVBI" /DestinationPath:"/SSISDB/MOVIE/MOVIE"

 

配置をクリックすると以下のように失敗。ミスをしたか根本的に何かが足りないようです。

image

プロジェクトをパッケージ配置モデルにしたり、いろいろやってダメなのでひとまず諦めます。

image

コメント

このブログの人気の投稿

ダブルクォーテーションで括られたCSVカ​ンマ区切りテキストファイルを SQL Server で Bulk Insert する方法

PowerShellでTSV/CSVの列を絞り込んで抽出し、(先頭/行末)からN行出力する

IKEAの鏡を壁に取り付ける