LoginSignup
3
3

More than 1 year has passed since last update.

[Apache Hop] ローコードでETL処理を実装してWebサービスにしてみた(同期編)

Last updated at Posted at 2022-05-03

紹介したいこと

以下のようなETL処理をローコードで実装して、Webサービスとして公開できてしまうのです。
OSSでこんなことできてしまうのは、凄くないですか?
部品が充実していて、やりたい処理実現が見越せていたら、こんな方法もありますよということで紹介させていただきます。

image.png

データ変換処理の定義例
image.png
CSV入力 > フィルターで抽出 > JSON形式で出力

対象者

  • Apache Hop (データ統合プラットフォーム) を使ってみたいかた。データ収集、変換処理をしたいかた。
  • ローコードでETL処理を実装してWebサービスを作成したい方。
  • 外部から変換処理を呼び出し、変換結果を利用する方法を検討されているかた。

前提環境

  • Apache Hopの環境を構築している
    現時点(2022/04/29時点)で最新であるApache Hop 1.2.0を例として説明します。

  • Hopサーバの設定として、HOP_PROJECT_FOLDER, HOP_PROJECT_NAME を定義します。次のページを参照して定義してください。

  • Dockerで環境構築したので、docker-complse.yml(ページ下の設定ファイルの例)を用いてdockerの構成を作成しました。ホストOSにも、hopのファイルを配置して、Dockerからも参照するようにしました。

手順の流れ

  • 変換処理を定義する
  • Webサービスとして公開する
  • 動作を確認する

変換処理(パイプライン)の定義

  • Hop GUIを起動してパイプラインを新規作成します。
  • CSVファイル(ブック情報一覧)でテーブル情報を入力します。
  • Java filterで条件に該当するデータを抽出します。
  • JSON ouputで結果を出力します。
    image.png

CSVの定義については、以下のページを参照ください。

Java filterでは、Titleに指定した文字列が含まれるものを抽出します。
image.png

上記の条件にでてくる${para1}は、この変換処理(パイプライン)のパラメータとして定義しています。Webサービスでアクセスするときには、引数として指定することができます。

image.png

JSON ouputでは、右から流れてきたデータをoutputValue変数にJSONとして出力します。Nr rows in blockは複数行の結果を1つのグループして出力するため、0を指定しました。
image.png

Get Fieldsボタンで出力するフィールドを指定します。
image.png

Webサービスとして公開する

  • Hop GUIのMetadataタブを開き、Webサービスを右クリックしてNewで定義を作成します。
    image.png

  • Webという名前でサービスを定義して保存します。
    image.png

Enables?: 有効にするためチェックします。
Filename on the server: 上記で定義したパイプライン(変換処理)の定義ファイルを定義します。
Output transform: JSON ouput部品を指定します。
Output filed: outputValueのフィールドを指定します。
Content type: application/jsonを指定します。
List status on server: サーバで監視する状態にするので、チェックします。

動作を確認する

コマンドプロンプトでcurlコマンドで非同期処理を実行します。

curl -u cluster:cluster -i -s "http://localhost:8081/hop/webService/?service=Web&para1=%E8%A8%80%E8%AA%9E" -X GET

書式としては、serviceの名前、パラメータのKey,Valueを&でつなげていく感じです。
http://localhost:8181/hop/webService/?service=test&A=valueA&B=valueB

以下のようにJSON出力が返ってくる。

{"data":[{"PublishDate":39837,"ISBN":"978-4-87311-394-4","Price":4180,"Title":"プログラミング言語 Ruby","ImageUrl":"https:\/\/www.oreilly.co.jp\/books\/images\/picture_large978-4-87311-394-4.jpeg","URL":"https:\/\/www.oreilly.co.jp\/books\/9784873113944\/"},{"PublishDate":40492,"ISBN":"978-4-87311-470-5","Price":4180,"Title":"入門 自然言語処理","ImageUrl":"https:\/\/www.oreilly.co.jp\/books\/images\/picture_large978-4-87311-470-5.jpeg","URL":"https:\/\/www.oreilly.co.jp\/books\/9784873114705\/"},{"PublishDate":41775,"ISBN":"978-4-87311-683-9","Price":1540,"Title":"word2vecによる自然言語処理","ImageUrl":"https:\/\/www.oreilly.co.jp\/books\/images\/picture_large978-4-87311-683-9.jpeg","URL":"https:\/\/www.oreilly.co.jp\/books\/9784873116839\/"},{"PublishDate":42391,"ISBN":"978-4-87311-752-2","Price":3520,"Title":"Go言語によるWebアプリケーション開発","ImageUrl":"https:\/\/www.oreilly.co.jp\/books\/images\/picture_large978-4-87311-752-2.jpeg","URL":"https:\/\/www.oreilly.co.jp\/books\/9784873117522\/"},{"PublishDate":43267,"ISBN":"978-4-87311-822-2","Price":3740,"Title":"Go言語でつくるインタプリタ","ImageUrl":"https:\/\/www.oreilly.co.jp\/books\/images\/picture_large978-4-87311-822-2.jpeg","URL":"https:\/\/www.oreilly.co.jp\/books\/9784873118222\/"},{"PublishDate":43399,"ISBN":"978-4-87311-846-8","Price":3080,"Title":"Go言語による並行処理","ImageUrl":"https:\/\/www.oreilly.co.jp\/books\/images\/picture_large978-4-87311-846-8.jpeg","URL":"https:\/\/www.oreilly.co.jp\/books\/9784873118468\/"}]}

PowerBIでWebサービスにアクセスしてダッシュボードを作成して可視化することをやってみました。
Titleに言語が含まれるブックの一覧をアプリケーションで表示している例です。
image.png

以下のページにアクセスすると、Webサービスの実行の履歴、状況を確認することができます。
http://localhost:8081/hop/status/

image.png

対象の項目を指定して、ボタンで実行、停止、詳細の参照ができます。

まとめ

  • ローコードでETL処理を実装して、Webサービスとして公開することをためしてみました。このWebサービスの機能は、Apache Hopの特徴の機能の1つとなります。
  • 今後に時間があれば非同期処理のWebサービスもあるので、それについても投稿できたらと考えています。

感想

  • GUIで実行したときの変換処理は、ストレスなく動いている。自分でスクリプト実装していた処理よりも速く動いてる体感である。
  • Dockerについては、どこに何のファイル、フォルダがあるのか。ファイルを編集する術を知るのが、大変であった。はじめての場合にはJavaのみでの環境で試してから、感覚をつかむほうがよさそうであった。
  • Hop Webの画面のレスポンスは、まだまだこれからで発展途上でありそう。
  • 日本語言語、時刻の設定、時間の調整、セキュリティの設定、エラーハンドリング、ログの確認方法など、本格的な運用のことを考えると、まだ調査が必要な項目は多くある。ただし、処理の流れがある程度見えていて、試してみたいなどについては活用できそうである。

参考

設定ファイルの例

docker-complse.yml

version: '3'
services:

  hop1:
    image: aacc73292e53
    container_name: hop    
    ports:
      - 8083:8080
    user: root
    volumes:
       - ./:/files
    environment:
       HOP_LOG_LEVEL: Basic
       HOP_PROJECT_FOLDER: /files/config/projects/default
       HOP_PROJECT_NAME: default
  hopWeb1:
    image: faaa970e7332
    container_name: hopWeb
    ports:
      - 8082:8080
    volumes:
       -  ./:/files

参考

HopのDockerの使い方、設定項目など:

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3