【Talend】テストデータ作成

# 概要

Talendで、テストデータを作成するジョブを作ります。
レコードを作成するコンポーネントとして用意されている
tRowGenerator を使用し、SQLiteのテーブルにテストデータを登録します。

# 環境準備
## SQLiteのインストール

SQLiteのページからWindows用のバイナリをダウンロードしてください。
[SQLite Download Page](https://www.sqlite.org/download.html)
sqlite-tools-win32-x86-3270200.zip
※サンプルテーブルの作成を行いたいので、コマンドライン付きをダウンロードします。

任意のフォルダ `C:\talend\sqlite` に展開します。

## テーブル作成
データベース（sample.db）とテストデータ作成用のテーブル（TESTDATA）を作成します。

```
> cd C:\talend\sqlite
> sqlite3 sample.db
> sqlite> CREATE TABLE TESTDATA(
   ...>  ID        INT
   ...> ,ACCOUNT   TEXT
   ...> ,BDATA     TEXT
   ...> ,STATUS    INT
   ...> ,RES       TEXT);
```
※SQLiteは、カラムの桁数を持たないことに気付いたのですが、
　今回はこのままいくことにします。

# tRowGenerator でのテストデータ作成

## Talendジョブ作成

### DB接続のメタデータ

テストデータテーブルのカラム情報については、
1カラムずつ登録することもできますが、
メタデータから一度に登録する方法で手間を省きます。

TalendOpendStudioを起動し、上記作成したSQLiteのテーブルに接続します。

![testdata_01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/165430/4dbd2b9c-d610-0a4e-bb08-0833ff347e38.jpeg)
`メタデータ -> DB接続定義 -> 接続定義` 

![testdata_02.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/165430/5629508e-9be9-5f0a-40d9-c4d71a7184a2.jpeg)
名前に任意の接続名（sqlite3）を設定します。

![testdata_03.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/165430/40e11e9e-9253-de02-bdda-3ec8fc3678e3.jpeg)
データベース接続情報を設定して、テスト接続ボタンを押下します。
``` DBタイプ：SQLite
ファイル：C:/talend/sqlite/sample.db
```
![testdata_04.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/165430/7b805797-d4d7-b620-a2e9-a46d53055b2d.jpeg)
接続成功することを確認して、Finishボタンを押下します。
任意の接続名（sqlite3）が作成されました。

![testdata_05.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/165430/f64608b1-b0e8-9621-1483-c38b3e40244e.jpeg)
任意の接続名（sqlite3）を選択、右クリックして、スキーマの取得を行います。

![testdata_06.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/165430/bf93dc3a-6b22-d476-73fa-569c6a564653.jpeg)

![testdata_08.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/165430/c917d28d-17f2-93d9-e97d-693bf8e83c38.jpeg)

![testdata_09.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/165430/2e133258-f2ed-d3c8-8002-264d98d2d737.jpeg)
メタデータに追加されました。

### コンポーネントからメタデータの使用

ジョブを作成し、「tSQLiteconnection」コンポーネントを追加します。
![testdata_10.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/165430/033b0863-5594-0584-783a-a6aa006f4668.jpeg)
プロパティタイプに、リポジトリを選択し作成したメタデータからSQLiteを選択します。
![testdata_12.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/165430/49bbcb8f-f89f-6482-8629-847c77cce1a4.jpeg)

### tRowGeneratorの設定

「tRowGenerator」コンポーネントを追加し、スキーマにメタデータから
TESTDATAスキーマを選択します。

![testdata_13.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/165430/995cf9c6-667e-226f-ad26-88bd5d7602c7.jpeg)

![testdata_14.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/165430/83ec0e1c-b162-2de6-9ae3-32fa0d93765c.jpeg)

RowGeneratorエディターの設定
![testdata_15.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/165430/f3e9d865-5343-d2ba-a665-b0c58f7ccb3a.jpeg)

各カラムに指定したい値を設定します。
![testdata_16.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/165430/d6e4a31e-71d0-cb71-d75e-5e0a075d1131.jpeg)

作成する行数は、「生成する行数」で指定します。

| カラム &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | タイプ&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | 関数 | 環境変数 | 備考 |
|:--|:--:|:--|:--|:--|
| ID | int | Numeric.sequence<BR>(String int,int) | 「sequence identifier=s1」<BR>「start value=1」<BR>「step=1」 | 連番を設定 |
| ACCOUNT | String | カスタマイズ<BR>パラメータ  | "ACOUNT" + String.format(<BR>"%06d", Numeric.sequence("s2",1,1))  | 先頭に「ACCOUNT」という文字列と<BR>6桁連番をゼロ埋め |
| BDATE | String | カスタマイズ<BR>パラメータ | TalendDate.formatDate("yyyy-MM-dd",<BR>TalendDate.getRandomDate("2017-01-01","2018-12-31") )  | 指定期間のランダムな日付を設定 |
| STATUS | int | Numeric.sequence<BR>(String int,int) | 「min value=>0」<BR>「max=>2」<BR> | 最小値と最大値を設定 |
| RES | String | TalendString.<BR>getAsciiRandomString(int) | 「length=>6」 | ランダムな文字列を設定 |

結果は、プレビューや、tLogRowコンポーネントで確認できます。
※デフォルトで選択できる関数は、スキーマのタイプによって制限があります。
　一覧の一番上にある「・・・」を選択するとカスタマイズパラメータとして
　式ビルダで、自由に関数を設定することができます。

使用できる関数は、[ルーチン一覧](https://help.talend.com/reader/onzulQGhW96zdL_th7rxpA/UNYfDoGI7D6aSPrxIoAYCQ) を参考にしてください

### SQLiteへの登録

「tRowGenerator」コンポーネントで作ったレコードを
「tSQLiteOutput」と「tSQLiteCommit」コンポーネントを使ってTESTDATAテーブルに登録します。

![testdata_17.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/165430/8375739b-a189-d462-1b79-0ac78a1ead92.jpeg)

### まとめ
下記のレコードが、登録されました。

```
sqlite>  select * from TESTDATA;
1|ACOUNT000001|2018-06-09|1|0kCEtY
2|ACOUNT000002|2017-02-28|2|yAFV18
3|ACOUNT000003|2017-10-20|0|RAlhVv
4|ACOUNT000004|2017-07-21|2|f1YKEZ
5|ACOUNT000005|2017-08-27|2|yt84HR
6|ACOUNT000006|2017-01-06|0|GrLCFa
7|ACOUNT000007|2017-05-07|1|OVs3ZO
8|ACOUNT000008|2018-11-11|0|o815fV
9|ACOUNT000009|2017-08-05|1|flR0ne
10|ACOUNT000010|2018-09-30|2|yKJuvb
sqlite>
```

関数になれると、テストデータ作りが、かなり簡単になりそうですね。


# 参照記事
[SQLiteコマンドラインツールのダウンロードとインストール](https://www.dbonline.jp/sqlite/install/index1.html)
[手間がかかるテストデータもTOSを使えばノープログラミングで作成できる](https://www.gixo.jp/blog/8558/)
[サンプルデータを持ったテーブルを簡単に作成する](https://dev.classmethod.jp/talend/talend-create-sample-table/)
[ルーチン一覧](https://help.talend.com/reader/onzulQGhW96zdL_th7rxpA/UNYfDoGI7D6aSPrxIoAYCQ)