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

Learn More
Engineering
Fraud

Como usamos Golang e Dataflow para construir o Feature Store de IA da Sardine

Kazuki Nishiura
Kazuki Nishiura
bg-image
bg-image
Como usamos Golang e Dataflow para construir o Feature Store de IA da Sardine
Subscribe to newsletter
Share

Sardine é o Looker da fraude”. Na Sardine, estamos construindo o maior feature store de fraude e crimes financeiros do mundo, para permitir que as equipes de fraude e compliance criem e façam backtesting de novas regras em um editor de regras sem SQL, usando os mesmos sinais avançados, pós-processados e normalizados que são usados pelos nossos modelos de IA. Leia este artigo para saber como estamos construindo isso.

Image

Figura: o editor de regras sem código da Sardine, que permite que um analista de fraude ou compliance crie e faça backtesting de novas regras sem conhecimento de SQL. Temos mais de 1.000 features que são agregadas, pós-processadas e normalizadas por meio de um job do DataFlow usando Apache Beam e Go.

Apache Beam é uma biblioteca de processamento de dados de código aberto. Na Sardine usamos o Dataflow do GCP como runner para o nosso job do beam, para realizar diversos tipos de processamento de dados.

Nossos jobs são escritos principalmente em Java, já que é a linguagem mais bem suportada pela comunidade do Apache Beam. No entanto, o Beam também oferece suporte a Python e golang. Embora o Dataflow oficialmente só ofereça suporte a Java e Python, ainda é possível usar o Dataflow como runner para o seu job em golang.

Image

Usamos golang para os servidores backend, então escrever um job de backfill do beam usando golang nos permitiu reutilizar o código que usamos nos servidores. Neste artigo, vou falar sobre um job de backfill que lê os dados mestres do Bigquery, aplica algum processamento com golang e grava em um banco de dados SQL.

Como o Dataflow não oferece suporte oficial ao golang, não conseguimos encontrar muito material on-line. Espero que este artigo ajude alguém que queira alcançar objetivos semelhantes. Presumo que os leitores já tenham passado pelo guia oficial de introdução e conheçam os conceitos básicos do Beam.

Se você quiser ir direto ao código-fonte, aqui está o link para um repositório de código aberto:

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

O primeiro problema que enfrentamos foi um erro de conflito de namespace causado pelo SDK do Beam.

Eu reportei isso à equipe do Beam há cerca de uma semana, mas não obtive resposta. Descobrimos que existe uma flag GOLANG_PROTOBUF_REGISTRATION_CONFLICT para ignorar o conflito, então basta passá-la ao executar um job localmente:

Para executar um job no Dataflow, é um pouco mais complicado, porque o SDK do Beam compila implicitamente um binário worker para você. Felizmente, existe uma flag worker_binary, então você pode compilar seu próprio binário e passá-lo para o Beam:

Para ler o Bigquery, o Beam já oferece uma biblioteca, então basta fazer:

Para gravar no banco de dados, você pode escrever seu próprio código. Uma coisa a se observar é que você provavelmente não vai querer ficar abrindo/fechando a conexão com o banco de dados a cada ParDo. Em vez disso, você pode utilizar um método StartBundle para inicializar a conexão com o banco de dados. No golang beam, você define uma struct para ParDo:

É isso! Você pode encontrar uma versão simplificada do código do nosso job no repositório abaixo.

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

Se você é um data geek e gostou de ler este artigo, venha se juntar a nós. Estamos contratando um senior data engineer para ajudar a construir e escalar nosso Feature Store!