[Talend] サンプルデータを持ったテーブルを簡単に作成する

2016.08.05

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

前回の記事「[Redshift] ASCII は廃止されたリーダーノード専用関数です」にて、ベンチマークテストの際に使用するサンプルコードを持ったテーブルを Talend Open Studio を使って作成しました。今回は私が頭の中で考えたことに沿った作成手順をご紹介したいと思います。

サンプルテーブルの作成

こういうの Talend で作ると楽ちんなんだよなあ。

ということで Talend Open Studio を起動し、コンテキストメニューからジョブを作成します。

WS000000

ジョブ名は「CreateSampleTable」としました。ド直球です。

WS000001

とりあえず DB に接続できないとね。

リポジトリ内にある「DB接続」を選択し、コンテキストメニューから「DB接続の作成」を選択します。

WS000002

接続名称は「CMRedshift」としました。

WS000003

名前の通り今回のデータベースは Redshift なので、「DBタイプ」は「Redshift」を選択します。

必要事項を入力していき、「チェック」ボタンを押下します。

WS000004

接続が成功しました!

WS000005

さて、ジョブを構築していくかな。
まずはデータベース接続コンポーネントっと。

先ほど作成した CMRedshift を選択し、そのままジョブエリアへドラッグアンドドロップします。

WS000006

ダイアログが表示されますので「tRedshiftConnection」を選択します。

WS000007

ジョブエリアに置かれた CMRedshift (tRedshiftConnection) を選択し、「詳細設定」の「自動コミット」をチェックします。今回はロールバックなどは考慮しないので自動コミットとしましたが、コミットコンポーネント、ロールバックコンポーネントを用いてより詳細に制御することも可能です。

WS000008

あのコンポーネント、ASCII 文字 4 桁のランダムなデータ作れたっけかな?

そのコンポーネントは「tRowGenerator」といいます。様々な行データを指定の数だけ作り出すことができます。

WS000009

ジョブエリアへ設置しました。

WS000010

CMRedshift を選択、コンテキストメニューから「トリガー」「コンポーネントがOKの場合」を選択し tRowGenerator と接続します。CMRedshift が正常に評価されたら tRowGenerator の処理へ移ることを意図しています。

WS000011

tRowGenerator を選択し、コンポーネントの基本設定ビューから「ロウジェネレーターエディター」ボタンを押下します。

WS000012

エディターウィンドウが表示されました。

WS000013

「追加」ボタンを押下すると行が追加されます。

WS000014

ファンクションを選択すると「TalendString.getAsciiRandomString(int)」というものがありました。まさにコレって感じですね。

WS000015

標準では length が 6 となっているので 4 へ変更します。

WS000016

生成する行数は 1 千万件!

WS000017

プレビューを使ってどのような行データが作成されるか確認することができます。

WS000018

4 桁の ASCII 文字が生成されました!……が、なんか大文字と小文字が混じっててコードっぽくない……。(個人的な所感です。)

英字は大文字にしたいなあ。

そんな時はいろんなことが出来る「tMap」コンポーネントです。

WS000019

ジョブエリアへ配置したら tRowGenerator と繋ぎます。tRowGenerator で作り出された行データを受け取るので接続は「ロウ>メイン」となります。

WS000020

繋がりました。これで tMap コンポーネントは tRowGenerator が作り出した行データをガシガシ受け取って処理します。

WS000021

tMap コンポーネントをダブルクリックするとエディタが開きます。このエディタを使って「英小文字を英大文字」へ変換する処理を設定していきます。

WS000022

変換したものは出力しなければならないので、まずは出力テーブルを追加します。

WS000023

出力名は「out1」そのままで。

WS000024

次に出力テーブルにカラムを追加します。

WS000025

カラム名は「SAMPLE_CODE」、型は文字列です。

WS000026

今回は中央の「変数」を利用して大文字化します。追加ボタンを押下して変数を追加します。

WS000027

入力側の「newColumn」を変数へドラッグアンドドロップして紐付けたら、式のボタンを押下して式ビルダを表示します。

WS000028

入力された newColumn データを toUpperCase() メソッドで大文字化します。今回 tRowGenerator は null は作り出さないのでこれでよいでしょう。

WS000029

OK ボタンで式ビルダを閉じたら、変数「var1」を出力テーブルの「SAMPLE_CODE」へ紐付けます。

WS000030

これでこの tMap には「入力(newColumn)→大文字化→出力(SAMPLE_CODE)」という変換処理が定義されました。

後はデータベースへ出力するだけ。
テーブルは作成しなくていいのかって?

データベース上のテーブルへ、行データを出力するにはデータベース出力コンポーネントを使います。今回は Redshift なので「tRedshiftOutput」ですね。(MySQL なら tMysqlOutput)

WS000031

tMap のエディタ内で作成した出力テーブル「out1」を tRedshiftOutput へ繋げます。

WS000032

tRedshiftOutput の接続設定には CMRedshift を使います。「既存の接続を使用」にチェックを入れると接続情報を使い回しできます。

WS000033

テーブルは存在していませんが、とりあえず「sample_codes」テーブルとしました。

ここでデータベース出力コンポーネントの便利機能、「テーブルアクション」設定です。

なんと行データのカラム情報からテーブルを作成することができるのです。便利ですね。

今回は「ある時、削除し、テーブル作成」としています。なぜカタコト……。

繋いだ時点でカラム情報は同期されますが、念のため「Sync columns」を押下しておきましょう。

WS000034

今回件数が多いので、バルクインサートを使用します。

INSERT INTO cm_inage_toru.sample_codes VALUES ('HOGE');
INSERT INTO cm_inage_toru.sample_codes VALUES ('PIYO');
INSERT INTO cm_inage_toru.sample_codes VALUES ('FUGA');

-- ではなく

INSERT INTO cm_inage_toru.sample_codes VALUES ('HOGE'), ('PIYO'), ('FUGA');

詳細設定に「挿入毎の行数」という項目があるので、この数値を変更します。

WS000035

さあ、実行!

ジョブが完成しましたので実行してみましょう。

WS000036

処理が進み……

WS000037

こんな感じで正常終了すれば、4 桁の ASCII 文字列からなるデータが 1 千万件入った sample_codes テーブルがサクッと用意されます。(時間がかかるので画像では 10 万件になっています。)

まとめ

画像入りでつらつらと長くなってしまいましたが、実際に行っている作業は「コンポーネントを 4 つ配置する」「それぞれのコンポーネントを適切に設定する」だけです。
「データ入りのテーブル作成したいけど面倒だなあ。」という時には Talend オススメです。