[Apache Hop] ETLで大量のDummyデータを生成してみた

# 紹介したいこと
- ETLを使ってDummyの大量データを生成する方法を紹介します。
- ダミーデータを生成する**Generate random value, Fake data**部品を紹介したい。
- HopでのETLの定義の雰囲気を伝えたい for Beginner

# 対象者
- Apache Hop (データ統合プラットフォーム) 、ETLを試してみたい方。
- 大量のDummyデータを準備したい人
- そのデータをデータソースに格納したい人(ファイル、RDB、MongDBなど)

# 前提環境
- Docker Desktopをインストールしている
- Apache Hopを準備している 
- Hop GUIを操作できる

https://qiita.com/Tadataka_Takahashi/items/f13161b981a8699f46ff

https://qiita.com/Tadataka_Takahashi/items/58f69ceb466a5c3a295a

https://qiita.com/Tadataka_Takahashi/items/f5551b0ad6f74a054b9c

# 手順の流れ
- 大量データを作成するフローを作成する(1)
- 動作確認(1)
- 大量データを作成するフローを作成する(2)
- 動作確認(2)

## 大量データを作成するフローを作成する(1) <BR> Generate random value

Hop GUIを起動して、以下のようなパイプラインを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/000a95e6-b85e-1965-bdf3-9b53b9bac018.png)

Generate rowsで行を生成します。何件分のデータの流れを作成するか定義します。
Generate random valueでランダムな値を生成します。
Text file outputでファイルに出力します。
この出力先を他のデータソースの部品に変更することで、他のデータソースに出力できます。

- Generate rows
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/a075c160-1334-6397-70c0-1e3a4b1fe6f8.png)
Limitのところ1000として、1000件の行を生成を指定。この件数を調整することで、大量データ生成できます。

- Generate random value
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/7033a17b-59ba-96f5-fb27-7fac05204c9e.png)
生成したい行のフィールド名、Typeを指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/8ef79f48-0d03-31b1-481b-259555a710fc.png)

https://hop.apache.org/manual/latest/pipeline/transforms/generaterandomvalue.html

## 動作確認(1) : Generate random value
以下のようにデータを生成して、出力することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/7927c833-dbf1-bb47-4d45-d4c43de9383e.png)

## 大量データを作成するフローを作成する(2) <BR> Fake data
以下のようなパイプラインを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/3ce15630-d20d-fdac-0f09-9966ad9d7bfc.png)

Generate rowsで行を生成します。何件分のデータの流れを作成するか定義します。
Fake dataでダミーのデータを生成します。
Text file outputでファイルに出力します。

Generate random valueとは違い、データの種類の設定のバリエーションが選べるところです。内部ではJava Faker libraryを使用してるとのことです。

- Generate random value
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/57ed72f3-e897-ff55-b0eb-31c892f7fd21.png)

- Fake data
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/8df43e99-3dbc-20ac-8b00-dd2bb3f4cf29.png)
Locale: 言語を指定できる
Output filed name : 出力フィールド名
Type of fake data: フェイクデータの種類を指定
Topic to generate: フェイクデータのトピック

指定可能なTypeとTopicについては、Fake dataのヘルプを参照ください。
Localeにjaを指定してみたが、一部Type, Topicでは日本語は対応してないようでした。

https://hop.apache.org/manual/latest/pipeline/transforms/fake.html

## 動作確認(2) : Fake data

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/80113393-fc57-d2a2-e56f-fcb8c14a5a8b.png)

# まとめ
- このように**Generate random value, Fake data**を利用して、ダミーのデータを生成しました。
- 出力したデータをファイルに出力をしました。他のデータソースの部品を使えば、RDB、MongoDBなどに作成したデータを格納する流れも生成することができます。
- HopではETL処理によりデータの流れを作り出せることが理解していただけたのではないかと思います。

もしも、これをみて、活用できそうだ、応用できそうそうだと思ったら、ぜひとも試してみてください。
より応用的な使い方、拡張性としてストリーム処理のApaceh Beamと連携する機能もあるので、興味ありましたらそちらも。

# 注意事項
- 大量データを処理するときに、PCの負荷があがって操作しにくくなったりします。自己責任で気をつけて操作してください。処理の間にintervalなどいれるなど調整してください。

# 参考

https://hop.apache.org/

連携可能なRDBの一覧
https://hop.apache.org/manual/latest/database/databases.html

https://youtu.be/sZSIbcPtebI