A medida que las empresas crecen, los volúmenes de datos aumentan de GB a TB (o más), y las demandas de latencia pasan de horas a minutos (o menos), lo que hace cada vez más costoso proporcionar información actualizada al negocio. Históricamente, los ingenieros de datos de Python y Scala recurrían a la transmisión para satisfacer estas demandas, procesando eficientemente nuevos datos en tiempo real, pero los ingenieros de análisis que necesitaban escalar canalizaciones dbt basadas en SQL no tenían esta opción.
¡Ya no! Este blog busca ilustrar cómo podemos usar las nuevas Tablas de Transmisión y Vistas Materializadas en Databricks para ofrecer información fresca y en tiempo real a las empresas con la simplicidad de SQL y dbt.
En la Data + AI Summit de 2023, presentamos Tablas de Transmisión y Vistas Materializadas en Databricks SQL. Esta increíble capacidad brindó a los usuarios de Databricks SQL un fácil acceso a nuevas y potentes materializaciones de tablas introducidas por primera vez en Delta Live Tables, lo que les permitió incrementalizar consultas grandes, transmitir directamente desde fuentes de datos de eventos y más.
Además de usar de forma nativa Tablas de Transmisión y Vistas Materializadas dentro de un entorno Databricks, también funcionan para usuarios de dbt en Databricks. dbt-databricks se ha convertido en una de las formas más populares de construir modelos de datos en Databricks, aprovechando todas las potentes capacidades de Databricks SQL, incluido el motor de cómputo Photon, la escalabilidad instantánea de los Almacenes SQL sin servidor y el modelo de gobernanza de Unity Catalog, con la ubicuidad del marco de transformación de dbt.
A partir de dbt v1.6+, dbt-databricks ha evolucionado en tres facetas clave:
Nota: ¡Esté atento al próximo lanzamiento de dbt v1.7.3 que refinará aún más las capacidades anteriores!
Veamos cómo podemos usar estas nuevas características con la demostración de Airline Trips.
La demostración de Airline Trips se creó para demostrar cómo ingerir y transformar incrementalmente datos de eventos en vivo para obtener información comercial actualizada en Databricks, ya sea un panel o un modelo de IA. El conjunto de datos representa todos los viajes aéreos que se realizan en los Estados Unidos a lo largo del tiempo, capturando los retrasos en las salidas y llegadas de cada viaje.
Un cuaderno auxiliar incluido establece una transmisión simulada de este conjunto de datos, mientras que el proyecto dbt muestra un modelo de datos que toma estos eventos json sin procesar y los transforma a través de ETL de transmisión en una capa de Vistas Materializadas, tablas de características y más.
El repositorio está disponible públicamente aquí, y utiliza datos de muestra empaquetados en todos los espacios de trabajo de Databricks de inmediato. ¡Siéntase libre de seguir!
Una de las formas más sencillas de empezar a utilizar Tablas de Transmisión es para la ingesta de datos desde el almacenamiento de datos en la nube, como S3 para AWS o ADLS para Azure. Es posible que tenga una fuente de datos ascendente que genere datos de eventos a gran volumen, y un proceso para depositarlos como archivos sin procesar en una ubicación de almacenamiento, típicamente json, csv, parquet o avro.
En nuestra demostración, imaginemos que recibimos un flujo en vivo de cada viaje aéreo realizado en los Estados Unidos de un tercero, y queremos ingerirlo incrementalmente a medida que llega.
En lugar de preparar los archivos como una tabla externa, o usar una herramienta de terceros para materializar una Tabla Delta para la fuente de datos, simplemente podemos usar Tablas de Transmisión para resolver esto. Tome el modelo a continuación para nuestra alimentación de viajes aéreos de bronce:
Los dos puntos clave a tener en cuenta son:
Como aparte, aunque Auto Loader requiere la menor configuración, también puede transmitir directamente desde una plataforma de transmisión de eventos como Kafka, Kinesis o Event Hubs para una latencia aún menor utilizando una sintaxis muy similar. Consulte aquí para más detalles.
La transmisión no tiene por qué detenerse en el paso de ingesta. Si queremos realizar algunas uniones posteriores o agregar una clave sustituta, pero queremos limitarlo solo a los datos nuevos para ahorrar cómputo, podemos continuar usando la materialización de Tabla de Transmisión. Por ejemplo, tome el fragmento de nuestro próximo modelo para la capa plateada, la alimentación enriquecida de viajes aéreos, donde unimos tablas de mapeo para códigos de aeropuerto al conjunto de datos sin procesar:
Una vez más, hemos utilizado la materialización de Tabla de Transmisión y hemos podido aprovechar la funcionalidad estándar de dbt para toda nuestra lógica. Esto incluye:
El único cambio real en nuestro SQL fue la adición de la palabra clave STREAM() alrededor de la declaración ref() para airline_trips_bronze, para indicar que esta tabla se está leyendo incrementalmente, mientras que la tabla airport_codes que se une es una tabla de mapeo que se lee en su totalidad. Esto se llama una unión de transmisión estática.
Con nuestras tablas plateadas enriquecidas listas, ahora podemos pensar en cómo queremos servir información agregada a nuestros consumidores comerciales finales. Típicamente, si usamos una materialización de tabla, tendríamos que recalcular todos los resultados históricos cada vez.
Para aprovechar las Tablas de Transmisión ascendentes que solo procesan nuevos datos en cada ejecución, recurrimos a las Vistas Materializadas para la tarea.
¡La buena noticia en Databricks es que un modelo que construye una Vista Materializada no se ve diferente a un modelo que construye una tabla! Tomemos nuestro ejemplo para una Vista Materializada de capa dorada para calcular el porcentaje de vuelos retrasados cada día:
¡Todo lo que cambiamos fue la configuración de materialización!
Recuerde, las Vistas Materializadas se pueden actualizar incrementalmente cuando hay cambios en las tablas base. En el escenario anterior, a medida que transmitimos nuevos datos, la Vista Materializada determina qué grupos requieren recálculo y solo calcula estos, dejando las agregaciones sin cambios tal como están y reduciendo los costos generales de cómputo. Esto es más fácil de visualizar en el ejemplo, ya que agregamos por ArrDate, la fecha de llegada de los vuelos, lo que significa que los nuevos días de datos caerán naturalmente en nuevos grupos y los grupos existentes permanecerán sin cambios.
Analizando los registros de eventos de la Vista Materializada (en la imagen a continuación) después de varias ejecuciones del modelo, podemos ver la incrementalización en acción. La primera ejecución es un cálculo completo como cualquier tabla, pero una segunda ejecución para actualizar las agregaciones con nuevos datos aprovecha una actualización incremental fila por fila. Una ejecución final del modelo reconoció que no se habían ingerido nuevos datos en la fuente y simplemente no hizo nada.
Hemos cubierto lo básico para obtener datos directamente de la fuente de eventos hasta una Vista Materializada lista para BI, pero el repositorio de demostración contiene mucho más.
En el repositorio se incluyen ejemplos de cómo monitorizar registros para Tablas de Streaming y Vistas Materializadas para entender cómo se están procesando los datos, así como un ejemplo avanzado no cubierto en este blog de cómo unir dos flujos juntos en una unión de flujos (stream-stream join) ¡solo con SQL!
Clona el repositorio en tu entorno de Databricks para empezar, o conecta dbt Cloud a Databricks sin costo adicional con partner connect. También puedes aprender más con la documentación para Vistas Materializadas y Tablas de Streaming.
(Esta entrada del blog ha sido traducida utilizando herramientas basadas en inteligencia artificial) Publicación original
