[Apache Hop] Windowsにインストールしてみた

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

# Apache Hopとは
- Apache Hop は オープンソースのデータ統合プラットフォームです。 ETL (Extract/Transform/Load) の開発ツール・実行エンジンです。

- 部品連ねていくことで、データの変換処理をローコードで実現することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/cb38cb6e-be1b-696a-0e82-3c7fdab8c508.png)
例 : データを生成してjsonにしてからKaffkaのProducerとしてメッセージ送信してる流れ

- 部品の種類も豊富でデータベースのMongDB, postgresql, MySQL、neo4jや Kafkaなどと連携する機能があります。応用した使い方としては、実装した変換処理をWebサービスとして公開する機能があります。

もしも、さらに詳細を知りたくなりましたら、日本Apache Hopユーザーグループの案浦さんの紹介動画を参照ください。

https://www.youtube.com/watch?v=JpM2zQmAnVk&t=12s

# 前提環境
- OS: Windows 10
ここでは著者の都合でWindowsを前提としている。基本的にJavaが動作するOSであれば、Linux, MacOSでも動くはず。

# 手順の概要
現時点(2022/04/29時点)で最新であるApache Hop 1.2.0を例としてインストール手順を説明します。
- Javaのインストール
- Apache Hop のダウンロード
- hop-guiを起動する
- サンプルの変換処理を試す

## Javaのインストール
前提条件のページを確認して、必要なバージョンのJavaをインストールします。
https://hop.apache.org/manual/latest/installation-configuration.html#

自分の環境、使いたいバージョンのOpenJDKをダウンロードしてインストールします。
この手順の例としては、Adopt OpenJDK 11のmsiを使用してインストールします。
Apache Hopでサポートしているバージョンにしてください。

https://adoptopenjdk.net/
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/6a194084-3b50-469f-d95c-b5fa9d904bee.png)

## Apache Hop のダウンロード
Webページからインストールしたいレビジョンのファイルをダウンロードします。
今回の手順では、apache-hop-client-1.2.0.zipをダウンロードして、任意のフォルダで解凍します。
もしも、最新版のファイルが公開されていれば、そちらを参照ください。
https://hop.apache.org/download/

## hop-guiを起動する
hopフォルダ以下にある、hop-gui.batを実行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/36115545-fac9-7610-c730-79b9e54db326.png)

コマンドプロンプトの画面がでてきて、変換処理を定義するhop-guiが起動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/74f91f4c-d0e0-0733-53b4-6c2a32560eb7.png)

## サンプルの変換処理を試す
メニューバーのProjectでsamplesを指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/3d0c2daf-8c23-2cd8-6138-1524ed9d34c9.png)

メニューのFileからOpenをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/6f198781-9f06-31b4-1937-9611d2158216.png)

samples/transformsフォルダ以下に変換処理の定義ファイルがあります。この中からmerge-join-basic.hplを選択します。以下の画面が展開します。このフォルダに変換処理のサンプルがあるので、ファイル名から興味のありそうな変換があれば、開いてみるといいと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/43517160-d842-a4cf-d3b0-97fbf2d52f58.png)
Test Data1とTest Data2のテーブルを結合する例です。

Test Data1のテーブル
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/c1689e3e-403b-f394-2499-4afd1af6041d.png)

Test Data2のテーブル
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/bb64d5a9-25e0-39fd-9dcf-06a8b053481a.png)

変換処理を実行するために、メニューの再生ボタンを押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/d14e9caa-2b46-ee56-dad9-b2d1b2ab577e.png)

Run Optionsの画面で、Pipeline run configurationでlocalを指定します。ローカルで実行の意味になります。Prametersタブで実行時に指定するパラメータを定義できます。ここでは省略してLanuchボタンを押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/f10f8761-fa2b-c5e3-17b7-e5780f200df6.png)

実行した全体の状況、ログなどが下側の画面に出力されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/762eb80f-c3e4-2522-5d3b-a6a99a219863.png)

実行されると部品の右上にチェックがつきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/d54860b7-df19-3bc4-f89a-c49615d3b4ed.png)

Output Innerの右下のテーブルのアイコンをクリックすると変換の結果がみられます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/2b301d0a-07f7-dca3-306e-02a3a6ff51eb.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/879e73e4-3b90-96ac-5573-252a44e95f08.png)
注意事項: データが1行ずつながれてくるので、順番は最後にながれた行から出力されています。

# まとめ
このような手順でWindowsでApache Hopを導入して動かしてみました。
公式のページのGetting Startedなどを参照してさらに使いこなしてみてください。部品をならべるところはPentaho(Kettle)から派生している部分もあるので、そちらでのやり方を検索してみるのもいいのではないかと思います。

# 参考、関連する記事
Apache Hopの公式ページ
https://hop.apache.org/

日本Apache Hopユーザーグループの案浦さんの紹介ブログ(日本語)
https://annoura.com/dive-into-apachehop/

ASF Incubatorを卒業したApache Hopで遊んでみる : 
特徴が分かりやすくまとまっている。
また、ストリーム処理(Google Cloud Dataflow )も試されてる。上級者のかた。
https://zenn.dev/kotarot/articles/play-with-apache-hop

部品を連ねて処理を実装するのに参考になりそう

https://qiita.com/mik/items/2976720c21243850bf30

DockerでHopを動かす方法

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

https://youtu.be/RMIOTmZK-YE

# 今後のアクション(仮)
時間があれば以下の項目の記事も投稿していこうと思います。
- hop guiの使い方
- 定義の構成(Project, WorkflowやPiplelineなど)
- Webサービスを実装する
- 他のDBとの連携 (MongDB, postgresql, MySQL、neo4jなど)