“Sardine es el Looker del fraude”. En Sardine, estamos construyendo el mayor feature store de fraude y delitos financieros del mundo, para que los equipos de fraude y cumplimiento normativo puedan crear y realizar backtesting de nuevas reglas en un editor de reglas sin SQL, utilizando las mismas señales avanzadas, posprocesadas y normalizadas que utilizan nuestros modelos de IA. Lee este artículo para saber cómo estamos abordando su construcción.

Figura: el editor de reglas sin código de Sardine, que permite a un analista de fraude o cumplimiento normativo crear y realizar backtesting de nuevas reglas sin conocimientos de SQL. Contamos con más de 1,000 características que se agregan, posprocesan y normalizan mediante un job de DataFlow que usa Apache Beam y Go.
Apache Beam es una biblioteca de procesamiento de datos de código abierto. En Sardine usamos Dataflow de GCP como runner para nuestro job de beam, con el fin de realizar una variedad de procesamientos de datos.
Nuestros jobs están escritos principalmente en Java, ya que es el lenguaje mejor soportado por la comunidad de Apache Beam. Sin embargo, Beam también soporta Python y golang. Aunque Dataflow oficialmente solo soporta Java y Python, aún puedes usar Dataflow como runner para tu job en golang.

Usamos golang para nuestros servidores backend, así que escribir un job de backfill de beam en golang nos permitió reutilizar el código que usamos en los servidores. En este artículo hablaré sobre un job de backfill que lee los datos maestros de Bigquery, aplica cierto procesamiento con golang y los escribe en una base de datos SQL.
Dado que Dataflow no soporta oficialmente golang, no pudimos encontrar mucho material en línea. Espero que este artículo ayude a alguien que quiera lograr objetivos similares. Supongo que los lectores ya han pasado por la guía oficial de introducción y conocen los conceptos básicos de Beam.
Si quieres ir directamente al código fuente, aquí tienes el enlace a un repositorio de código abierto:
https://github.com/sardine-ai/dataflow-golang-example
El primer problema que enfrentamos fue un error de conflicto de espacio de nombres causado por el SDK de Beam.
Le reporté esto al equipo de Beam hace aproximadamente una semana, pero no obtuve respuesta. Resulta que existe una bandera GOLANG_PROTOBUF_REGISTRATION_CONFLICT para ignorar el conflicto, así que puedes simplemente pasarla al ejecutar un job localmente:
Para ejecutar un job en Dataflow, es un poco más complicado, porque el SDK de Beam compila implícitamente un binario worker por ti. Sin embargo, afortunadamente existe una bandera worker_binary, así que puedes compilar tu propio binario y pasárselo a Beam:
Para leer Bigquery, Beam ya ofrece una biblioteca, así que simplemente puedes hacer:
Para escribir en la base de datos, puedes escribir tu propio código. Algo a tener en cuenta es que probablemente no quieras estar abriendo y cerrando la conexión a la base de datos en cada ParDo. En su lugar, puedes usar un método StartBundle para inicializar la conexión a la base de datos. En golang beam, defines un struct para ParDo:
¡Y eso es todo! Puedes encontrar una versión simplificada del código de nuestro job en el siguiente repositorio.
https://github.com/sardine-ai/dataflow-golang-example
Si eres un data geek y disfrutaste leyendo este artículo, únete a nosotros. Estamos contratando a un senior data engineer que nos ayude a construir y escalar nuestro Feature Store.



