SardineCon SF/2026

Learn More

Golang と Dataflow を使って Sardine の AI フィーチャーストアを構築する

Kazuki Nishiura
Kazuki Nishiura
bg-image
bg-image
Golang と Dataflow を使って Sardine の AI フィーチャーストアを構築する
Subscribe to newsletter
Share

Sardine is Looker for fraud”. At Sardine, we are building the largest fraud and fincrime feature store in the world, to allow fraud and compliance teams the ability to create and backtest new rules in a no-SQL rule editor, using the same advanced post-processed and normalized signals that are used by our AI models. Read this article to learn how we are going about building this.

画像

:Sardine のノーコード・ルールエディター。SQL の知識がなくても、不正検知やコンプライアンス担当者が新しいルールを作成し、バックテストできるようにします。1,000 以上の特徴量がすべて集約・後処理・正規化され、Apache Beam と Go を用いた DataFlow ジョブで処理されています。

Apache Beam はオープンソースのデータ処理ライブラリです。Sardine では、さまざまなデータ処理を行う Beam ジョブの実行基盤として GCP の Dataflow を使用しています。

私たちのジョブは主に Java で書かれています。これは、Apache Beam コミュニティによるサポートが最も充実しているためです。しかし、Beam は Python と golang にも対応しています。Dataflow は公式には Java と Python のみをサポートしていますが、golang のジョブに対しても Dataflow をランナーとして利用することができます。

画像

私たちはバックエンドサーバーに golang を使用しているため、golang を使ってバックフィル用の Beam ジョブを書くことで、サーバー向けに使っているコードを再利用することができました。本記事では、Bigquery からマスターデータを読み込み、golang でいくつかの処理を行い、その結果を SQL データベースに書き込むバックフィルジョブについて説明します。

Dataflow は公式には golang をサポートしていないため、オンラインで参考資料をほとんど見つけることができませんでした。本記事が、同様のことを実現したいと考えている方の助けになれば幸いです。読者の皆さんはすでに 公式のクイックスタート に目を通し、Beam の基本的な概念を理解しているものと想定しています。

ソースコードを直接確認したい場合は、こちらのオープンソースリポジトリへのリンクをご覧ください。

https://github.com/sardine-ai/dataflow-golang-example

最初に直面した問題は、Beam SDK によって引き起こされた名前空間の競合エラーでした。



私は報告しました 1週間ほど前にBeamチームに連絡しましたが、彼らからは何の返答もありませんでした。調べてみると、競合を無視するための GOLANG_PROTOBUF_REGISTRATION_CONFLICT フラグがあることが分かったので、ローカルでジョブを実行するときにそれを渡すだけで済みます。



Dataflow 上でジョブを実行する場合は少し複雑になります。というのも、Beam SDK が暗黙的にワーカーバイナリをコンパイルしてくれるためです。ですが幸いなことに、worker_binary というフラグがあるので、自分でバイナリをビルドして Beam に渡すことができます。



BigQuery を読み込むには、Beam がすでにライブラリを提供しているので、次のように書くだけで済みます。



データベースへの書き込みには、自分でコードを書けば問題ありません。注意すべき点として、各ParDoごとにデータベース接続を開いたり閉じたりし続けるのは避けたいということです。代わりに、データベース接続を初期化するためにStartBundleメソッドを利用できます。golang の Beam では、ParDo用の struct を定義します。



以上です!私たちのジョブの簡略化したコードは、以下のリポジトリで確認できます。

https://github.com/sardine-ai/dataflow-golang-example

もしあなたがデータ好きで、この文章を読んで楽しんでいただけたなら、ぜひ私たちの仲間になりませんか。現在、シニアデータエンジニアを募集しており、Feature Store の構築とスケールに一緒に取り組んでいただける方を探しています!