Sardine named a Leader in The Forrester Wave™: Financial Crime Management Solutions, Q3 2026

Learn More
Engineering
Fraud

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

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

Sardine不正対策のためのLookerだ」。私たちはSardineで、不正対策・コンプライアンスチームがノーコードのルールエディタで新しいルールを作成しバックテストできるように、AIモデルが使用しているのと同じ高度に後処理・正規化されたシグナルを用いて、世界最大級の不正・金融犯罪向けフィーチャーストアを構築しています。この記事では、その構築方法について紹介します。

Image

: 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を使うことも可能です。

Image

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

Dataflowは公式にはgolangをサポートしていないため、オンラインで参考になる資料はあまり見つかりませんでした。同じような目標を達成したい方の助けになれば幸いです。読者はすでに公式のgetting startedガイドに目を通し、Beamの基本的な概念を理解していることを前提としています。

ソースコードを直接見たい方は、以下のオープンソースリポジトリへのリンクをご覧ください。

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

私たちが最初に直面した問題は、Beam SDKによって引き起こされるnamespaceの競合エラーでした。

私は約1週間前にBeamチームにこの問題を報告しましたが、返答はありませんでした。実は、この競合を無視するためのGOLANG_PROTOBUF_REGISTRATION_CONFLICTフラグがあり、ジョブをローカルで実行する際に渡すだけで済みます。

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

Bigqueryの読み込みについては、Beamがすでにライブラリを提供しているため、以下のようにするだけで済みます。

データベースへの書き込みについては、自分自身のコードを書くことができます。一つ注意すべき点は、ParDoごとにデータベース接続を開閉し続けたくはないだろうということです。代わりに、StartBundleメソッドを使ってデータベース接続を初期化できます。golang beamでは、ParDo用のstructを定義します。

以上です!私たちのジョブの簡略化されたコードは、以下のリポジトリでご覧いただけます。

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

データが大好きで、この記事を楽しんでいただけたなら、ぜひ私たちの仲間になりませんか。Feature Storeの構築・スケールを手伝ってくれるシニアデータエンジニアを募集しています!