TROCCO APIを使ってみた

アソビューのデータ基盤チームでデータエンジニアをやっている米澤です。

本日は私が所属するチームで日夜使っている、ETLツール「TROCCO」に最近追加された「TROCCO API」機能を使ってみた雑感をまとめてみたいと思います。

TROCCO とは

まずはツールのご紹介。

TROCCOは、primeNumber社が提供する国産のETLツールです。
会社内でデータ基盤を構築するデータパイプラインを開発する上で必要な基本機能は揃っていると思います。

機能は大きく分けて以下3種類あります。

  • データ転送
    ローデータが格納されているシステムから、DWH(データウェアハウス)へデータを転送する
  • データマート
    データウェアハウスのデータを変換して作り直す
  • ワークフロー
    データ転送とデータマートを組み合わせてパイプラインを作る

各設定は基本的にGUI上から行うことが前提のツールで、エンジニア以外の職種の方でも使いやすいツールだと思います。

また、今回紹介するTROCCO APIだけでなく、最近terraformで設定管理が行えるようになり(まだ設定可能な機能は部分的ですが・・)、GUIベースのツールから幅を広げて、エンジニア寄りのツールに少しずつ進化していっているように感じます。

蛇足ですが、以前Findy Toolsのレビューサイトに弊社がTROCCOを選択した理由などを記事にまとめたことがありますので、ついでにこちらもご一読いただけますと幸いです。

findy-tools.io

TROCCO API とは

TROCCO APIは、文字通りにデータマートなどの定義を外部システムからAPI接続して実行 or 変更するための仕組みです。

TROCCOの管理画面からAPI KEYを作成し、そのAPI KEYを外部システムからHTTPリクエストのヘッダに埋め込んで送信することで、TROCCOの一部機能を実行することができます。

TROCCO API経由で使える機能は大きく以下6つに分けられます。

  • データ転送実行/実行結果取得
  • データマート実行
  • ワークフロージョブ実行/実行結果取得
  • データマート定義作成/更新/削除/取得
  • ユーザー作成/更新/削除/取得
  • 接続情報作成/更新/削除/取得

機能的に作成や更新が可能だとしても、ユーザーが一番使う可能性が高いのは、データ転送/データマート/ワークフローの「実行」だと思います。 よって、このブログでも「実行」機能の解説に絞らせてもらいます。

TROCCO APIの使い方

まず、「データ転送実行」を行う方法を説明します。

転送ジョブ実行の仕様はヘルプページを参照してください。
trocco API - 転送ジョブ実行

Pythonで作った簡単なサンプルコードを紹介します。

import requests
import json

if __name__ == "__main__":
    url = 'https://trocco.io/api/jobs'
    req_header = {
        'Content-Type': 'application/json',
        'Authorization': 'Token ABCDE',
    }
    req_data = json.dumps({
        'job_definition_id': 12345,
    })

    req = requests.post(
        url,
        data=req_data.encode(),
        headers=req_header
    )
    print(req.status_code)
    print(req.text)

このサンプルコードでは、API KEY= ABCDE で、かつ、TROCCOで作成したデータ転送設定のIDは 12345 を想定しています。 なお、TROCCOのIDは、対象データ転送定義の画面を表示した際にURLに記載されている以下の箇所がIDになります。

また、仕様に書いてある通り、使えるHTTPのメソッドは POST のみです。

上記はデータ転送実行の例ですが、データマート/ワークフローもAPIのURLやパラメータが異なるだけで、基本的には同じ方法で実行することができます。

サンプルコードはPythonですが、HTTPリクエストができればどんな言語でも良いですし、アクセスする外部システムもどんなシステムでも良いでしょう。 具体的な使い方としては、[外部システムの処理 -> TROCCOワークフロー] で全体的なワークフローを構成したい場合などに使うことになると思います。

使う上での注意点

TROCCO APIを使う上でいくつか注意点があります。

契約プラン

ヘルプページの一番最初のページに書いてありますが、契約プランが「Advanced」以上ではないと使えません。 Advancedプラン以上ではない契約プランの方は、下記のメニューに「TROCCO API KEY」が表示されません。

カスタム変数

TROCCOのカスタム変数は非常に便利な機能で、様々な設定で使うことになると思います。

仕様を見ると、データ転送とデータマートにはBody parametersに custom_variables を渡して実行することができます。
trocco API - 転送ジョブ実行
データマートシンクジョブ実行

しかし、ワークフローには custom_variables がなく、カスタム変数を渡すことができない仕様のようです。
trocco API - ワークフロージョブ実行

実務で使う場合、データ転送やデータマートを直接実行するよりも、データ転送やデータマートで構成されるワークフローを実行するケースの方が多いと思いますので、ワークフロー実行時にカスタム変数が渡せないのは非常に物足りないです。ここは、primeNumber社の今後の機能拡張に期待したいところです。

ステータス管理

例えば、データ転送実行時を例にすると、仕様には Responses の情報も記載されています。
trocco API - 転送ジョブ実行

この中に status 項目があり、様々なステータスの記載があります。
しかし、実際に実行のリクエストを投げた際に返される status は queued で、それ以外の status が返されることはありません。

後続のステータスを把握するには、別途「転送ジョブ実行結果取得」を実行する必要があります。
trocco API - 転送ジョブ実行結果取得

例えば、[外部システムの処理① -> TROCCOワークフロー -> 外部システムの処理②] のような全体ワークフローを構築する場合は、エラー時も含めてTROCCOのステータス管理は必須になるので、ポーリング処理を実装する必要があるでしょう。

どこまで複雑なワークフローを構築するかはケースバイケースだと思いますが、「実行」と「ステータス把握」は別リクエストになることは頭に入れておいてください。

活用事例

簡単ですが、弊社でこのTROCCO APIを使った一例を紹介したいと思います。

弊社ではスマホへのプッシュ通知連絡にBrazeというツールを活用しています。
そのBrazeのデータをデータレイクに取り組む際に、以下の図のようにワークフローを構築しました。

この中で、Braze APIは非同期でデータが連携されます。
通常であれば複雑な非同期処理の仕組みが必要ですが、後続の大部分の処理をTROCCOに任せることで、シンプルな構成で構築することができました。TROCCO API機能がないとこのフローは構築できなかったので、非常にありがたい機能です。

まとめ

TROCCO APIの簡単な使い方と注意点をまとめてみました。

TROCCOは国産ツールでサポートも日本語ということもあり、日本ではかなり使われているETLツールだと思います。もしTROCCOを使っている方で、この機能を使ってみたい方、使い方に困っている方などにこの記事が少しでも参考になれば幸いです。


アソビューでは「生きるに、遊びを。」をミッションに、一緒に働くメンバーを募集しています。 ご興味がありましたらお気軽にご応募いただければと思います。

www.asoview.com