“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.

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.

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!




