Traffine I/O

日本語

2022-06-05

Meltano

Meltanoとは

Meltanoとは、SingerによるELTパイプライン向けソフトウェアであり、ELTのELを担当します。ELTのTの部分はdbtで補い、ELTを実現します。

Meltanoのインストール方法

ローカルにインストールする場合

  1. 仮想環境を用意します。
bash
$ python -m venv venv
$ source venv/bin/activate
$ pip install --upgrade pip
  1. Meltanoをインストールします。
bash
$ pip install meltano
  1. プロジェクトを作成します。
bash
$ meltano init my_project

my_projectディレクトリが作成され、以下のようなファイルを確認することができます。

my_project/
   |-- .meltano
   |-- meltano.yml
   |-- README.md
   |-- requirements.txt
   |-- output/.gitignore
   |-- .gitignore
   |-- extract/.gitkeep
   |-- load/.gitkeep
   |-- transform/.gitkeep
   |-- analyze/.gitkeep
   |-- notebook/.gitkeep
   |-- orchestrate/.gitkeep

Dockerコンテナを利用する場合

  1. Dockerイメージをプルします。
bash
$ docker pull meltano/meltano
  1. プロジェクトを作成します。
bash
$ mkdir meltano-docker && cd meltano-docker
$ docker run -v "$(pwd)":/projects \
             -w /projects \
             meltano/meltano init my_project

以下のコマンドを実行し、http://localhost:5000にアクセスすると、Meltano UIが利用可能になります。

bash
$ docker run -v "$(pwd)":/project \
             -w /project \
             -p 5000:5000 \
             meltano/meltano

Meltanoのアップグレード方法

最新のバージョンにするには、以下のコマンドを実行します。

bash
$ meltano upgrade

プロジェクトを実行

meltano.ymlファイルは以下のようになっています。

meltano.yml
version: 1
default_environment: dev
project_id: <UUID>
environments:
- name: dev
- name: staging
- name: prod

コマンドを実行したり、meltano.ymlファイルを直接編集することで、実行内容を定義していきます。

環境設定

以下のコマンドで環境の一覧を取得できます。デフォルトでdev環境がアクティブとなっています。

bash
$ meltano environment list

2022-05-15T23:31:35.498763Z [info     ] Environment 'dev' is active
dev
staging
prod

以下のコマンドで環境を変更することができます。

bash
$ export MELTANO_ENVIRONMENT=prod

新しい環境を追加したい場合は以下のコマンドを実行します。

bash
$ meltano environment add <NEW ENVIRONMENT NAME>

Extractorの追加

「Extractor」とは、データソースからデータを取得するプラグインです。以下のコマンドでExtractorで取得可能なデータソース一覧を確認することができます。

bash
$ meltano discover extractors

meltano addコマンドによりExtractorプラグインを追加します。今回はtap-slackを追加します。

bash
$ meltano add extractor tap-slack

Extractorリストにデータソースが存在しない場合は、データソースのSinger tapが存在するかどうかを確認し、存在しない場合はカスタムプラグインを追加します。

https://hub.meltano.com/singer
https://docs.meltano.com/concepts/plugins#custom-plugins

meltano.ymlファイルにtap-slackが追加されていることが確認されます。

meltano.yml
plugins:
  extractors:
    - name: tap-slack
      variant: mashey
      pip_url: git+https://github.com/Mashey/tap-slack.git

以下のコマンドで追加したExtractorの利用方法を確認することができます。

bash
$ meltano invoke tap-slack --help

Extractorのコンフィグの設定

Extractorを実行するためにはコンフィグの設定が必要になります。以下のコマンドで項目を確認することができます。

bash
$ meltano config tap-slack list

もしくは以下のリンクから確認することができます。

https://hub.meltano.com/extractors/tap-slack

コンフィグの設定を行います。

bash
$ meltano config tap-slack set channeles '[YOUR CHANNEL ID]'
$ meltano config tap-slack set token <YOUR API TOKEN>
$ meltano config tap-slack set start_date 2022-05-02T00:00:00Z

抽出するデータの選択

コンフィグの設定が完了したら、抽出したいデータを選択します。以下のコマンドで抽出可能なデータの一覧を確認することができます。

bash
$ meltano select tap-slack --list --all

抽出したいカテゴリを選択します。今回はカテゴリ「channels」配下にある全てのデータを取得するようにします。

bash
$ meltano select tap-slack channels "*"

選択したデータを確認します。

bash
$ meltano select tap-slack --list

Loaderの追加

「Loader」とは、ELTの「L」を行うためのプラグインです。以下のコマンドで追加可能なLoader一覧を確認することができます。

bash
$ meltano discover loaders

今回はSlackから抽出したデータをBigQueryにロードをします。以下のコマンドを実行してBigQueryのLoaderを追加します。

https://hub.meltano.com/loaders/target-bigquery

bash
$ meltano add loader target-bigquery

Loaderリストにロード先が存在しない場合は、ロード先のSinger targetが存在するかどうかを確認し、存在しない場合はカスタムプラグインを追加します。

https://www.singer.io/#targets
https://docs.meltano.com/concepts/plugins#custom-plugins

Loaderのコンフィグの設定

credentials_pathを設定します。credentials_pathとは、BibQueryへのアクセス権限があるサービスアカウントのクライアントシークレットファイルのフルパスです。例えば、~/mymeltano/my_project/client_secrets.jsonのようになります。

https://github.com/adswerve/target-bigquery#step-1-activate-the-google-bigquery-api

bash
$ meltano config target-bigquery set credentials_path <FULL/PATH/TO/CREDENTIAL FILE>

その他のコンフィグを設定します。

bash
$ meltano config target-bigquery set location asia-northeast1
$ meltano config target-bigquery set project_id <PROJECT ID>

meltano.ymlファイルは以下のようになります。

meltano.yml
version: 1
default_environment: dev
project_id: 6e1e3687-a9eb-4c67-8be1-493b37cf4f5d
plugins:
  extractors:
  - name: tap-slack
    variant: mashey
    pip_url: git+https://github.com/Mashey/tap-slack.git
  loaders:
  - name: target-bigquery
    variant: adswerve
    pip_url: git+https://github.com/adswerve/target-bigquery.git@0.11.3
environments:
- name: dev
  config:
    plugins:
      extractors:
      - name: tap-slack
        config:
          channeles: '[<CHANNEL ID>]'
          start_date: '2022-06-01T00:00:00Z'
        select:
        - channels.*
      loaders:
      - name: target-bigquery
        config:
          credentials_path: <FULL/PATH/TO/CREDENTIAL FILE>
          location: asia-northeast1
          project_id: <Project ID>
- name: staging
- name: prod

EL パイプラインを実行

以下のコマンドによりELパイプラインを実行すると、SlackのデータがBigQueryにロードされます。

bash
$ meltano run tap-slack target-bigquery

参考

https://docs.meltano.com/getting-started
https://dev.classmethod.jp/articles/meltano-slack-to-bq/

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!