Da Vinci Studio 分析チームの末安です。
今回は 2021 年 1 月に公開した ETL ライブラリ inbulk について紹介します。
github.com
inbulk でできること
- ジョブを簡潔に定義できる
- 差分実行できる
- それらの処理を BigQuery 内で完結できる
ざっくり言うと、ほとんど yaml で定義できる BigQuery の API の wrapper のようなものになっています。
背景
分析チームでは BigQuery を利用することが多く、BigQuery 内のテーブルを加工して別のテーブルを作るといった作業がよく発生します。
以前まで、こういった処理は BigQuery の機能である Scheduled Query を利用して行っていましたが、利用していて幾つかの問題が見えてきました。
1. 依存関係を定義できない
一つの処理が終わった後に別のテーブルを作りたいということはよくあると思います。
Scheduled Query ではそういった依存関係は定義できないため、実行時間をずらすことでどうにか実現していましたが、最初の処理が失敗しても次の処理が実行されてしまうという問題がありました。
2. 差分実行のコストが大きい
バッチ処理においても冪等性を考慮することは重要だと思います。
これも BigQuery 上のみで実現できなくはないですが、宛先テーブルを全スキャンして新規追加分マージしてからそのテーブルを置換する必要がありました。
この方法の場合、宛先テーブルのデータ量が多いとかなりのコストがかかってしまうという問題がありました。
3. レビューしづらい
当時は BigQuery の UI 上で Scheduled Query を設定していたため、レビューがうまくできない状態でした。
この問題に関しては Terraform などで管理すれば解決できそうではありますが、こういった管理方法の場合、GitHub 上の定義と実態に差異が発生してしまうことが多いことと、他にも解決できない課題があったため別の手段を探すことにしました。
続きを読む