join - tag - Enlace complejo con el flujo de datos de google
meta alt tag (1)
Parece que Dataflow sería una buena opción. Le permitimos escribir una canalización que toma una PCollection
de eventos empresariales y realiza el ETL. La canalización puede ser por lotes (ejecutarse periódicamente) o por transmisión (se ejecuta cada vez que ingresan los datos de entrada).
Las diversas combinaciones son en su mayoría relativamente expresables en Dataflow. Para el producto cartesiano, puede considerar el uso de entradas laterales para hacer que el contenido de una PCollection
esté disponible como una entrada para el procesamiento de cada elemento en otra PCollection
.
También puede consultar el uso de GroupByKey
o CoGroupByKey
para implementar las uniones. Estos aplanan múltiples entradas y permiten acceder a todos los valores con la misma clave en un solo lugar. También puede usar Combine.perKey
para calcular combinaciones asociativas y conmutativas de todos los elementos asociados con una tecla (p. Ej., SUMA, MIN, MAX, PROMEDIO, etc.).
Las uniones con fecha sonará como si fueran una buena opción para ventanas, lo que le permite escribir una tubería que consume ventanas de datos (por ejemplo, ventanas por hora, ventanas diarias, ventanas de 7 días que se deslizan todos los días, etc.).
Editar: menciona GroupByKey
y CoGroupByKey
.
Soy un novato, tratando de comprender cómo podríamos volver a escribir un proceso ETL por lotes en Google Dataflow. He leído algunos de los documentos, ejecúteme algunos ejemplos.
Estoy proponiendo que el nuevo proceso ETL sea impulsado por eventos de negocios (es decir, una fuente PCollection). Estos desencadenarían el proceso de ETL para esa entidad comercial en particular. El proceso de ETL extraería los conjuntos de datos de los sistemas fuente y luego pasaría esos resultados (PCollections) a la siguiente etapa de procesamiento. Las etapas de procesamiento implicarían varios tipos de combinaciones (incluidas combinaciones cartesianas y no clave, por ejemplo, bandas con fecha).
Entonces, un par de preguntas aquí:
(1) ¿El enfoque que propongo es válido y eficiente? Si no fuera lo que sería mejor, no he visto presentaciones sobre procesos ETL complejos en el mundo real usando Google Dataflow, solo escenarios simples.
¿Hay algún producto de ETL de "nivel superior" que se ajuste mejor? Estuve vigilando a Spark y Flink por un tiempo.
Nuestro ETL actual es moderadamente complejo, aunque solo hay unas 30 tablas centrales (dimensiones y datos EDW clásicos) y ~ 1000 pasos de transformación. Los datos de origen son complejos (aproximadamente 150 tablas de Oracle).
(2) Las complejas combinaciones no clave, ¿cómo se manejarían?
Obviamente, me atrae Google Dataflow por ser una API en primer lugar, y las capacidades de procesamiento en paralelo parecen encajar muy bien (se nos pide que pasemos del procesamiento de un lote al procesamiento incremental).
¡Un buen ejemplo trabajado de Dataflow para este caso de uso realmente impulsaría la adopción hacia adelante!
Gracias, Mike S