por Surya Sai Turaga y John O'Dwyer
Prueba este notebook en Databricks
Change data capture (CDC) es un caso de uso que vemos que muchos clientes implementan en Databricks. Puedes consultar nuestro análisis anterior en profundidad sobre el tema aquí. Normalmente, vemos que la CDC se utiliza en una arquitectura de ingesta a análisis llamada arquitectura medallion. La arquitectura medallion toma datos sin procesar aterrizados de los sistemas de origen y refina los datos a través de tablas de bronce, plata y oro. La CDC y la arquitectura medallion proporcionan múltiples beneficios a los usuarios, ya que solo es necesario procesar los datos cambiados o añadidos. Además, las diferentes tablas de la arquitectura permiten que diferentes perfiles, como los científicos de datos y los analistas de BI, utilicen los datos correctos y actualizados para sus necesidades. Nos complace anunciar la nueva y emocionante función Change Data Feed (CDF) en Delta Lake, ¡que hace que esta arquitectura sea más fácil de implementar y posible la operación MERGE y el control de versiones de registro de Delta Lake!
Obtén una vista previa temprana del <a href="https://www.databricks.com/resources/ebook/delta-lake-running-oreilly?itm_data=simplifycdcdl-blog-oreillydlupandrunning" target="_blank">nuevo ebook de O'Reilly</a> para obtener la guía paso a paso que necesitas para empezar a usar Delta Lake.</p><h2><strong>¿Por qué es necesaria la función CDF?</strong></h2><p>Muchos clientes utilizan Databricks para realizar CDC, ya que es más fácil de implementar con Delta Lake en comparación con otras tecnologías de Big Data. Sin embargo, incluso con las herramientas adecuadas, la CDC puede seguir siendo difícil de ejecutar. Diseñamos CDF para que la codificación sea aún más sencilla y para abordar los mayores puntos débiles en torno a la CDC, incluyendo:</p><ul><li aria-level="1"><strong>Control de calidad</strong>: los cambios a nivel de fila son difíciles de obtener entre versiones.</li><li aria-level="1"><strong>Ineficiencia</strong>: puede ser ineficiente tener en cuenta las filas que no cambian, ya que los cambios de la versión actual son a nivel de archivo y no de fila.</li></ul><p>Así es como la implementación de Change Data Feed (CDF) ayuda a resolver los problemas anteriores:</p><ul><li aria-level="1"><strong>Simplicidad y conveniencia</strong>: utiliza un patrón común y fácil de usar para identificar cambios, lo que hace que tu código sea simple, conveniente y fácil de entender.</li><li aria-level="1"><strong>Eficiencia</strong>: la capacidad de tener solo las filas que han cambiado entre versiones hace que el consumo posterior de las operaciones Merge, Update y Delete sea extremadamente eficiente.</li></ul><p>CDF captura cambios <strong>solo</strong> de una tabla Delta y es <strong>solo</strong> prospectivo una vez habilitado.</p><h2><strong>¡Change Data Feed en acción!</strong></h2><p>Profundicemos en un ejemplo de CDF para un caso de uso común: predicciones financieras. El notebook referenciado en la parte superior de este blog ingiere datos financieros. Estimated Earnings Per Share (EPS) son datos financieros de analistas que predicen el beneficio por acción trimestral de una empresa. Los datos sin procesar pueden provenir de muchas fuentes diferentes y de múltiples analistas para múltiples acciones.</p><p>Con la función CDF, los datos simplemente se insertan en la tabla de bronce (ingesta sin procesar), luego se filtran, limpian y aumentan en la tabla de plata y, finalmente, se calculan los valores agregados en la tabla de oro basándose en los datos cambiados en la tabla de plata.</p><p>Si bien estas transformaciones pueden volverse complejas, afortunadamente, ahora la función CDF basada en filas es simple y eficiente. Pero, ¿cómo se usa? ¡Vamos a ver!</p><p><em>NOTA: El ejemplo aquí se centra en la versión SQL de CDF y también en una forma específica de usar las operaciones; para evaluar variaciones, consulta la documentación </em><a href="https://docs.databricks.com/delta/delta-change-data-feed.html"><em>aquí</em></a></p><h2><strong>Habilitación de CDF en una tabla Delta Lake</strong></h2><p>Para tener la función CDF disponible en una tabla, primero debes habilitar la función en dicha tabla. A continuación, se muestra un ejemplo de habilitación de CDF para la tabla de bronce al crear la tabla. También puedes habilitar CDF en una tabla como una actualización de la tabla. Además, puedes habilitar CDF en un clúster para todas las tablas creadas por el clúster. Para estas variaciones, consulta la documentación <a href="https://docs.databricks.com/delta/delta-change-data-feed.html">aquí</a>.</p><p><a href="https://www.databricks.com/wp-content/uploads/2021/06/change-data-blog-img-2.png" data-lightbox=" "><img class="size-full wp-image-173324" style="width:620px;" src="https://www.databricks.com/wp-content/uploads/2021/06/change-data-blog-img-2.png" alt="Cómo simplificar CDC con Delta Lakes Change Data Feed" height="81"></a></p><p>Change Data Feed es una función prospectiva, capturará cambios una vez que se configure la propiedad de la tabla y no antes.</p><h2><strong>Consulta de los datos de cambio</strong></h2><p>Para consultar los datos de cambio, utiliza la operación <em>table_changes</em>. El siguiente ejemplo incluye filas insertadas y dos filas que representan la imagen previa y posterior de una fila actualizada, para que podamos evaluar las diferencias en los cambios si es necesario. También hay un tipo de cambio <em>delete</em> que se devuelve para las filas eliminadas.</p><p><a href="https://www.databricks.com/wp-content/uploads/2021/06/How-to-Simplify-CDC-with-Delta-Lakes-Change-Data-Feed-blog-img-3.jpg" data-lightbox=" "><img class="size-full wp-image-158153 aligncenter" style="width:1158px;" src="https://www.databricks.com/wp-content/uploads/2021/06/How-to-Simplify-CDC-with-Delta-Lakes-Change-Data-Feed-blog-img-3.jpg" alt="Cómo se crean las filas de Change Data Feed" height="468"></a></p><p>Este ejemplo accede a los registros cambiados basándose en la <em>versión de inicio</em>, pero también puedes limitar las versiones basándote en la <em>versión de fin</em>, así como en las <em>marcas de tiempo de inicio y fin</em> si es necesario. Este ejemplo se centra en SQL, pero también hay formas de acceder a estos datos en Python, Scala, Java y R. Para estas variaciones, consulta la documentación <a href="https://docs.databricks.com/delta/delta-change-data-feed.html">aquí</a>.</p><p><a href="https://www.databricks.com/wp-content/uploads/2021/06/How-to-Simplify-CDC-with-Delta-Lakes-Change-Data-Feed-blog-img-4.png" data-lightbox=" "><img class="size-full wp-image-158154 aligncenter" style="width:1133px;" src="https://www.databricks.com/wp-content/uploads/2021/06/How-to-Simplify-CDC-with-Delta-Lakes-Change-Data-Feed-blog-img-4.png" alt="Ejemplo de Change Date Feed donde se accede a los registros de cambios utilizando la versión de inicio." height="354"></a></p><h2><strong>Uso de datos de filas de CDF en una declaración MERGE</strong></h2><p>Las declaraciones MERGE agregadas, como la fusión en la tabla de oro, pueden ser complejas por naturaleza, pero la función CDF hace que la codificación de estas declaraciones sea más simple y eficiente.</p><p><a href="https://www.databricks.com/wp-content/uploads/2021/06/How-to-Simplify-CDC-with-Delta-Lakes-Change-Data-Feed-blog-img-5.jpg" data-lightbox=" "><img class="size-full wp-image-158155 aligncenter" style="width:1400px;" src="https://www.databricks.com/wp-content/uploads/2021/06/How-to-Simplify-CDC-with-Delta-Lakes-Change-Data-Feed-blog-img-5.jpg" alt="Diagrama de cómo se utilizan las filas de Change Data Feed en una declaración MERGE" height="1203"></a></p><p>Como se ve en el diagrama anterior, CDF facilita la derivación de qué filas han cambiado, ya que solo realiza la agregación necesaria en los datos que han cambiado o son nuevos utilizando la operación <em>table_changes</em>. A continuación, puedes ver cómo utilizar los datos cambiados para determinar qué fechas y símbolos de acciones han cambiado.</p><p><a href="https://www.databricks.com/wp-content/uploads/2021/06/How-to-Simplify-CDC-with-Delta-Lakes-Change-Data-Feed-blog-img-6.png" data-lightbox=" "><img class="size-full wp-image-158156 aligncenter" style="width:648px;" src="https://www.databricks.com/wp-content/uploads/2021/06/How-to-Simplify-CDC-with-Delta-Lakes-Change-Data-Feed-blog-img-6.png" alt="Ejemplo de Change Date Feed donde la fecha de cambio se utiliza para determinar qué filas han cambiado." height="286"></a></p><p>Como se muestra a continuación, puedes usar los datos cambiados de la tabla de plata para agregar solo los datos de las filas que necesitan ser actualizadas o insertadas en la tabla de oro. Para hacer esto, usa <strong>INNER JOIN</strong> en <em>table_changes('<strong>nombre_tabla</strong>','<strong>versión</strong>')</em></p><p><a href="https://www.databricks.com/wp-content/uploads/2021/06/How-to-Simplify-CDC-with-Delta-Lakes-Change-Data-Feed-blog-img-7.jpg" data-lightbox=" "><img class="size-full wp-image-158157 aligncenter" style="width:866px;" src="https://www.databricks.com/wp-content/uploads/2021/06/How-to-Simplify-CDC-with-Delta-Lakes-Change-Data-Feed-blog-img-7.jpg" alt="Ejemplo de Change Data Feed donde los datos cambiados de una tabla de plata se utilizan para agregar los datos solo a aquellas filas que necesitan ser actualizadas." height="281"></a></p><p>¡El resultado final es una versión clara y concisa de una tabla de oro que puede cambiar incrementalmente con el tiempo!</p><p><a href="https://www.databricks.com/wp-content/uploads/2021/06/How-to-Simplify-CDC-with-Delta-Lakes-Change-Data-Feed-blog-img-8.png" data-lightbox=" "><img class="aligncenter size-full wp-image-158158" style="width:477px;" src="https://www.databricks.com/wp-content/uploads/2021/06/How-to-Simplify-CDC-with-Delta-Lakes-Change-Data-Feed-blog-img-8.png" alt="Ejemplo de tabla gold actualizada usando la función Change Data Feed." height="336"></a></p><h2><strong>Casos de uso típicos</strong></h2><p>Estos son algunos casos de uso y beneficios comunes de la nueva función CDF:</p><h3>Tablas Silver y Gold</h3><p>Mejora el rendimiento de Delta procesando solo los cambios después de la comparación inicial de MERGE para acelerar y simplificar las operaciones ETL/ELT.</p><h3>Vistas materializadas</h3><p>Crea vistas de información actualizadas y agregadas para usar en BI y análisis sin tener que reprocesar las tablas subyacentes completas, actualizando en su lugar solo donde han llegado los cambios.</p><h3>Transmitir cambios</h3><p>Envía Change Data Feed a sistemas downstream como Kafka o RDBMS que pueden usarlo para procesar incrementalmente en etapas posteriores de los pipelines de datos.</p><h3>Tabla de registro de auditoría</h3><p>Capturar las salidas de Change Data Feed como una tabla Delta proporciona almacenamiento perpetuo y capacidad de consulta eficiente para ver todos los cambios a lo largo del tiempo, incluyendo cuándo ocurren las eliminaciones y qué actualizaciones se realizaron.</p><h2><strong>Cuándo usar Change Data Feed</strong></h2><p><a href="https://www.databricks.com/wp-content/uploads/2021/06/Small-fraction-of-records-updated-in-each-batch-blog-img-12.jpg" data-lightbox=" "><img class="aligncenter size-full wp-image-158162" style="width:1270px;" src="https://www.databricks.com/wp-content/uploads/2021/06/Small-fraction-of-records-updated-in-each-batch-blog-img-12.jpg" alt="Mejores prácticas sobre cuándo y cuándo no usar la función Delta Lake Change Data Feed." height="790"></a></p><h2><strong>Conclusión</strong></h2><p>En Databricks, nos esforzamos por hacer posible lo imposible y simplificar lo difícil. CDC, versionado de registros e implementación de MERGE eran prácticamente imposibles a escala hasta que se creó Delta Lake. ¡Ahora lo estamos haciendo más simple y eficiente con la emocionante función Change Data Feed (CDF)!</p><p>Prueba este notebook en Databricks</p><p><em>(Esta entrada del blog ha sido traducida utilizando herramientas basadas en inteligencia artificial)</em> <a href="https://www.databricks.com/en/blog/2021/06/09/how-to-simplify-cdc-with-delta-lakes-change-data-feed.html">Publicación original</a></p>
Suscríbete a nuestro blog y recibe las últimas publicaciones directamente en tu bandeja de entrada.