“Sardine é o Looker para fraudes”. Na Sardine, estamos construindo o maior feature store de fraude e crimes financeiros do mundo, para permitir que as equipes de fraude e compliance possam criar e fazer backtest de novas regras em um editor de regras no-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 fazendo isso.

Figura: o editor de regras no-code da Sardine que permite a um analista de fraude ou de compliance criar e testar novas regras sem precisar conhecer SQL. Temos mais de 1.000 funcionalidades que são todas agregadas, pós-processadas e normalizadas por meio de um job DataFlow usando Apache Beam e Go.
Apache Beam é uma biblioteca de processamento de dados de código aberto. Na Sardine usamos o Dataflow da GCP como executor do nosso job Beam para realizar diversos tipos de processamento de dados.
Nossos jobs são em sua maioria escritos em Java, já que é a linguagem com melhor suporte pela comunidade do Apache Beam. No entanto, o Beam também oferece suporte a Python e Go. Embora o Dataflow oficialmente só ofereça suporte a Java e Python, você ainda pode usar o Dataflow como runner para o seu job em Go.

Usamos golang para servidores de backend, então escrever um job de backfill do Beam usando golang nos permitiu reutilizar 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 a golang, não conseguimos encontrar muito material online. 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á um 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 relatei isso para a equipe do Beam há cerca de uma semana, mas não obtive nenhuma resposta deles. Acontece que existe a flag GOLANG_PROTOBUF_REGISTRATION_CONFLICT para ignorar conflitos, então você pode simplesmente passá-la quando executar um job localmente:
Para executar um job no Dataflow, é um pouco mais complicado, porque o Beam SDK compila implicitamente um binário de worker para você. Felizmente, porém, existe a flag worker_binary, assim você pode construir o seu próprio binário e passá‑lo para o Beam:
Para ler o BigQuery, o Beam já fornece uma biblioteca, então você pode simplesmente fazer:
Para gravar no banco de dados, você pode simplesmente escrever o seu próprio código. Uma coisa a observar é que provavelmente você não vai querer ficar abrindo/fechando a conexão com o banco de dados para cada ParDo. Em vez disso, você pode utilizar o método StartBundle para inicializar a conexão com o banco de dados. No Beam para Go (golang), você define uma struct para ParDo:
É isso! Você pode encontrar um código simplificado do nosso trabalho no repositório abaixo.
https://github.com/sardine-ai/dataflow-golang-example
Se você é um entusiasta de dados e gostou de ler este artigo, venha trabalhar conosco. Estamos contratando um(a) engenheiro(a) de dados sênior para ajudar a construir e escalar nosso Feature Store!



