clock2016.05.05 19:24
SERVICE
home

TOSでギガ単位の適切なテストデータを作成する|Talend Open Studio によるビッグデータ分析(第11回)

AUTHOR :   ギックス

手間がかかるテストデータもTOSを使えばノープログラミングで作成できる

データ分析業務は、分析対象データが無いと始めることにはできません。しかし、提案段階でクライアントに分析結果イメージを提示する場合、または、分析対象データを受領してから分析結果報告まで非常に期間が短い場合、分析対象データの代わりとなるテストデータを使用する必要があります。単純なテストデータなら無料ツールやWebサイトなどで作成することができますが、大量データや複雑な条件のテストデータには対応できません。

しかし、無料のTalend Open Studio(以下、TOS)は、これらの大量、かつ複雑なテストデータ作成を行う事ができます。そして、単純なテストデータなら2つのコンポーネントだけ非常に簡単に作成できます。今回はTOSを使ったテストデータの作成ポイントをご紹介します。

今回作成するTalendジョブ

今回、TOSで作成するTalendジョブは、3つのコンポーネントを使った会員マスタを作成するジョブです。(ジョブの新規作成方法はこちらを参照) 各コンポーネントの役割は、tRowGeneratorでテスト行を生成し、tMapでデータ項目の値を整形し、tFileOutputDelimitedでファイル出力します。tRowGenerator1

そして、このジョブの処理結果として、下記のデータ項目が出力されます。

  • 会員番号(member_no)
  • 氏名(name)
  • 住所(addr)
  • 電話番号(telno)
  • 性別(sex)
  • 誕生日(birthday)

今回は、この3つのコンポーネントの中からtRowGeneratorとtMapの設定ポイントについて説明します。(tFileOutputDelimitedコンポーネントについてはこちらを参照)

tRowGeneratorコンポーネント

tRowGeneratorコンポーネントでは、スキーマとしてデータ項目の定義(カラム名とタイプの登録)とデータ項目に登録するデータをファンクションをセットで定義します。tRowGenerator2

ファンクションには、TOSのファンクション、作成したファンクション、登録値のリストなどを登録できます。今回は、その中から下記のTOSのファンクションを使用しました。

  • Numeric.sequence:連番を取得する
    ファンクションのリストから選択できないため、ファンクションで「…」を選択後、ファンクションパラメーターの値としてファンクションを直接入力します。第一引数は連番名、第二引数は開始値、第三引数は増加値です。
  • TalendDataGenerator.getFirstName:英語のファーストネームを取得
  • TalendDataGenerator.getLastName:英語のラストネームを取得
  • TalendDataGenerator.getUsState:アメリカの州を取得
  • TalendDataGenerator.getUsCity:アメリカの市を取得
  • TalendDataGenerator.getUsStreet:アメリカの通りを取得
  • Numeric.random:整数を取得
    ファンクションパラメーターで最小値と最大値を指定できます。
  • TalendDate.getRandomDate:日付を取得
    ファンクションパラメーターで最小値と最大値を指定できます。

性別はリストから登録できるように設定します。性別の「man」と「woman」のように特定の文字列の中からランダムに文字を登録したい場合は、ファンクションで「…」を選択後、ファンクションパラメーターの値としてカンマ区切りでリスト登録します。

最後に「RowGeneratorのロウ数」で出力する行数を指定すれば、コンポーネントの設定完了です。出力できる行数の上限は分かりませんが、1億行以上の行数は出力できる事を確認しています。

tMapコンポーネント

tMapコンポーネントでは、tRowGeneratorコンポーネントで生成されたテストデータに対して、値の整形を行います。tRowGeneratorコンポーネントでも整形は行えますが、処理が複雑にならないように、また、細かい整形が行えるようにtMapコンポーネントで行う事をお勧めします。tRowGenerator3

今回、tMapコンポーネントでは、下記の事を行っています。

  • 複数のデータ項目を文字列結合して、氏名と住所のデータ項目を作成
  • 数値型のデータ項目の式に「String.format(“%010d”,  [値])」を入力することで、前”0”詰めして10桁の文字列に変換
  • Data型のデータ項目のパターンに”yyyyMMdd”を入力することで、ファイル出力時の文字列パターンを指定

工夫すれば日本語対応も可能

通常の使い方では、tRowGeneratorコンポーネントから生成される情報は、英語の氏名、アメリカの住所で日本のテストデータとしては不適切です。この問題を解決する法として、氏名や住所をTOSのファンクションを使わずに、「”鈴木”, “佐藤”, “山田”…」「”北海道”, “青森県”, “秋田県”…」のようにリスト登録することで日本語対応が行えます。

また、郵便局のホームページから住所の郵便番号リストを入手し、tMapコンポーネントでデータ結合することで、tRowGeneratorコンポーネントから生成された郵便番号データ項目から紐付けた住所情報をテストデータとして出力することができます。tRowGenerator4

この様にTOSは、様々なコンポーネントを使用することで大量、かつ複雑なテストデータをノープログラミングで作成することができます。また、多少のJavaの知識があれば、ファンクションも作成できるため、実際のデータに近いテストデータを作成することも可能です。

【連載、Talend Open Studio によるビッグデータ分析】
  1. ”Talend”と”RapidMiner Studio”、2つのETLツールを比較してみた
  2. Talendのインストールと初期設定(Windows 8.1編) ~Javaのバージョンに気を付けろ~
  3. Talendで簡単なジョブの作成
  4. フォルダ中のファイルを変換して1つにまとめる
  5. フィルタリングと文字列置換とプログラムによる変換方法
  6. DB間のデータコピーを2つのコンポーネントだけで行う
  7. Amazon Redshiftへのデータインポートを2つのコンポーネントだけで行う
  8. Talendがバッチ処理の開発方法を変える ~スマートな開発を行おう~
  9. Talendの無償版(TOS)と有償版(Enterprise)の違い
  10. TOSを使ってMicrosoft Azure SQL Data Warehouseを操作する
  11. TOSでギガ単位の適切なテストデータを作成する (本稿)
  12. Web API からの取得結果をデータベースに登録する処理をノンプログラミングで実現する
SERVICE