[Apache Hop] CSVを読みこみ変換処理してみた

# 対象者
- Apache Hop (データ統合プラットフォーム) を試してみたい方。
- データ収集、変換処理を試してみたい方。
- CSVのファイルを変換処理してみたい方。

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

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

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

# 手順の流れ
- 読み込むCSVファイルを準備する
- CVSを読み込んで、変換して出力する変換を作成する
- 動作を確認する

## 読み込むCSVファイルを準備する

https://www.oreilly.co.jp/catalog/
O'Reilly の書籍リストを元にCSVファイルを作成します。このデータを例として取り上げます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/56f56661-b8dd-c544-c2d3-70c9fc4348b4.png)


## CVSを読み込んで、変換して出力する変換を作成する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/77d80e33-3dbe-67d3-3bf3-1976be603541.png)
+のボタンをクリックして、Piplineを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/80d99940-590e-f74b-870d-f662cf489a78.png)
パイプラインは、データの読み取り、処理、または書き込みを行う一連の変換処理の流れを定義します。

以下のような流れを定義するとします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/a0cc8ce8-89c8-f295-0dea-a89558e32d25.png)

- CSV file Input
パイプラインの画面のあいてるところでクリックすると、以下のように部品を選択する画面が表示されます。
Searchにcsvを入力して貼り付けたい部品を検索して選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/848040b5-6ecc-90d0-af97-60969314a975.png)

部品の名前のエリアをクリックすると以下の定義画面が表示されます。自分の環境に合わせて定義します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/5d7c773e-8463-acda-6eff-f8886d4d718c.png)
filename:ファイルのパスを定義します。
File encoding: Shift-JISを選択します。環境にあわせて定義します。
Get Fieldsボタンで読み込む列一覧を取得します。
Previewボタンによりプレビューすることができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/80163217-64a9-3594-feb4-05d5f721780e.png)

- Filter rows 
上記のようにFilter rowsの部品を探して、配置します。
CSV file Inputを選択する時に Shiftを押しながらFilter rowsまで引っ張り配線します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/2aced001-60a2-ca1b-8a84-03f807d268a5.png)

定義は、以下のように定義してTitleに入門が含まれるものを指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/bbdf120f-81e8-3ff5-16df-aa9c114c6cf4.png)

- Text file ouput
上記のようにText file ouptの部品を探して、配置します。
Filter rows を選択する時に Shiftを押しながらText file ouputまで引っ張り配線します。
以下のように定義して、結果をファイルに出力するようにします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/b530adc0-4f96-00ce-98d9-c042d9db9933.png)
Filename:出力するファイルパスを指定します。
Extention:csvを指定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/95bda846-42ed-c902-cbdd-94912b403ef5.png)
Separetor: ,(カンマ)を指定
Encoding:日本語環境のためShift_JISを指定します。

## 動作を確認する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/4894fe86-28ce-09a9-1cc2-491ae82823b7.png)
再生ボタンをクリックして変換を実行します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/91928a09-6c4e-2304-ae37-8411f327dc17.png)

Run Optionsの画面がでてくるので、Pipeline run configurationでlocalを指定して実行します。
Text file oputで指定した出力先に、結果が出力されることを確認します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/fa4b8f53-5729-8642-e1b4-4a235e6c5342.png)


# まとめ
CSV入力を読み込み、フィルタしてファイルに出力する処理を実装しました。今回は入門編としてまずはCSVを取り扱いました。

入力、出力として、他にも多くのデータソースを対応しているので、他の形式のファイル(JSONなど)、MongoDB、RDBを入力、出力にするなどすることができます。他の部品についてはApache HopのWebサイトで一覧や部品の仕様を確認すると良いと思います。

# 参考

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

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

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