Microsoft SQL ServerにCSVのデータをTalendを使って追加する方法についてまとめました。

SQL Serverの管理はSQL Server Management Studioを利用しています。

SQL Server Mangement Studioの使い方はこちらが参考になりました。
【初級編③】Management Studio を使った SQL Server の基本的な操作方法(1/2) | SQLServer2008虎の巻

Talendの基本的な使い方については、以前の記事 オープンソースETLツールTalendでExcelのデータをデータベースにロードしてみた も参考にしてみてください。

では、さっそく

インポートするCSVを設定

読み込むCSVはEメールと名前のみのシンプルなものです。

E-Mail,Name
suzuki@example.com,鈴木一郎
satoh@example.com,佐藤太郎

CSVのファイルの読み込みは[メタデータ] > [区切り記号付きフィアル] > [区切り記号付きファイルの作成]を選択します。
Talend-csv-1
[Name]を入力して[次へ]
Talend-csv-2
[ファイル]に入力CSVファイルを指定します。
Talend-csv-3
Mac上でTalendを動かしているので、UTF8のCSVファイルを入力として扱っています。Shift_JISだと文字化けします。
クライアントのJavaのデフォルトエンコーディングしだいだと思われるので、Windows上ならJavaのデフォルトエンコーディングがShift_JISなので、Shift_JISのCSVファイルで問題ないはず。未確認ですが。
しかし、[次へ]をクリックして、次のダイアログの[ファイル設定]の[エンコーディング]はWindows-31JやSfhit_JSが無いのでやっぱりCSVでShift_JISはNGかも。
ここでは、見出し付きのCSVなので[スキップする行]の[Header]にチェックをいれて”1″をセットします。
[プレビュー]で[列名として先頭業を指定]にチェックを入れて[プレビューのリフレッシュ]をクリックするとプレビューで先頭行が列名として設定されたことを確認できます。
Talend-csv-4
このダイアログは、内容を確認して[終了]します。
Talend-csv-6

出力先としてSQL Serverを設定

SQL Serverのデータベース”sqldb”に定義した”Users”テーブルにCSVから読み込んだ行を追加します。

[メタデータ] > [DB接続] > [DB接続の作成]を選択します。
SQLServer-users-table

Talend-SQLServer-1

Nameを入力して[次へ]
Talend-SQLServer-2

接続情報を入力して[チェック]をクリックし接続に成功したら[終了]します。
Talend-SQLServer-3

追加された[Users]から[スキーマ情報の取得]を選択します。
Talend-SQLServer-4

ここはそのまま[次へ]
Talend-SQLServer-5

“dbo”を開き”Users”を選択して、[次へ]
Talend-SQLServer-6

内容をか確認して[終了]します。
Talend-SQLServer-7

補足: RDSのSQL Serverで日本語を使えるようにする

今回ためした出力先のSQL ServerはAWS RDSのSQL Serverを利用しています。
RDSのSQL Serverはデフォルトでは英語設定になっているので日本語が扱えるように設定する必要があります。
照合順を日本語に設定します。

SQL Server Management Studioでデータベースのメニューから[プロパティ]を選択します。
SQLServer-properties
[オプション]を選択して[照合順序]で”Japanese_XJIS_100_BIN”を選択します。
SQLServer-set-japanese
参考: RDSにSQL Serverのセットアップ
補足の補足: 他のプロセスが対象のデータベース、ここでは”sqldb”を利用していると5030エラーが発生します。その際はプロセスをKillしてあげると設定を反映することが出来ます。参考: 照合順序の変更について

マッピングの作成

[メタデータ] > [DB接続] > [Users 0.1] > [テーブル] > [Users]をドロップして、コンポーネントダイアログでは[tMSSqlOutput]を選択します。
Talend-mapping-1

[メタデータ] > [区切り記号付きファイル] > [UserList 0.1] > [metadata]をドロップして、コンポーネントダイアログから[tFileInputDelimited]を選択します。
Talend-mapping-2

[パレット]から[tMap]をドロップします。
Talend-mapping-3

[CSV]から[tMap]、[tMap]から[SQLServer]へと入出力をつなげます。
Talend-mapping-4
[tMap]から[SQLServer]への出力をつなげた後に、スキーマの取得しますか?と聞かれるので[はい]を選択します。

[tMap]をクリックしてマッピングを以下のように定義します。
Talend-mapping-5

ジョブを実行
ジョブが作成できたので、実行してみます。
Talend-run-job

CSVから正しくデータをインポートされたかManagement Studioで確認。
SQLServer-select