Compartir vía


Trabajo con combinaciones en Azure Databricks

Databricks admite la sintaxis de combinación estándar ANSI. En este artículo se describen las diferencias entre las combinaciones con el procesamiento por lotes y el procesamiento de flujos y se proporcionan algunas recomendaciones para optimizar el rendimiento de las combinaciones.

Nota:

Databricks también admite la sintaxis estándar para los operadores de conjunto UNION, INTERSECT y EXCEPT. Consulte Operadores de conjunto.

Diferencias entre combinaciones por lotes y de flujos

Las combinaciones en Azure Databricks son con estado o sin estado.

Todas las combinaciones por lotes son combinaciones sin estado. Los resultados procesan inmediatamente y reflejan los datos en el momento en que se ejecuta la consulta. Cada vez que se ejecuta la consulta, los nuevos resultados se calculan en función de los datos de origen especificados. Consulte Combinaciones por lotes.

Las combinaciones entre dos orígenes de datos de flujos tienen estado. En combinaciones con estado, Azure Databricks realiza un seguimiento de la información sobre los orígenes de datos y los resultados y actualiza los resultados de forma iterativa. Las combinaciones con estado pueden proporcionar soluciones eficaces para el procesamiento de datos en línea, pero pueden ser difíciles de implementar de forma eficaz. Tienen semántica operativa compleja en función del modo de salida, el intervalo de desencadenador y la marca de agua. Consulte Combinaciones de flujo con flujo.

Las combinaciones estáticas de flujo no tienen estado, pero proporcionan una buena opción para combinar un origen de datos incremental (como una tabla de hechos) con un origen de datos estático (por ejemplo, una tabla dimensional que cambia lentamente). En lugar de combinar todos los registros de ambos lados cada vez que se ejecuta una consulta, solo se combinan los registros recién recibidos del origen de streaming con la versión actual de la tabla estática. Consulte Combinaciones estáticas de flujos.

Combinaciones por lotes

Azure Databricks admite la sintaxis de combinación SQL estándar, incluidas las combinaciones internas, externas, semi, anti y cruzadas. Consulte JOIN.

Nota:

Databricks recomienda usar una vista materializada para optimizar el cálculo incremental de los resultados de una combinación interna. Consulte Uso de vistas materializadas en Databricks SQL.

Combinaciones de flujo con flujo

La combinación de dos orígenes de datos de streaming puede presentar desafíos importantes en la administración de la información de estado y el razonamiento sobre el cálculo y la salida de los resultados. Antes de implementar una combinación de flujo con flujo, Databricks recomienda desarrollar una comprensión sólida de la semántica operativa para el streaming con estado, incluida la forma en que las marcas de agua afectan a la administración del estado. Vea los artículos siguientes:

Databricks recomienda especificar marcas de agua para ambos lados de todas las combinaciones de flujo con flujo. Se admiten los siguientes tipos de combinación:

  • Combinaciones internas
  • Combinaciones externas izquierdas
  • Combinaciones externas derechas
  • Combinaciones externas completas
  • Semicombinaciones izquierdas

Consulte la documentación de Apache Spark Structured Streaming sobre combinaciones de flujo con flujo.

Combinaciones estáticas de secuencias

Nota:

El comportamiento descrito para las combinaciones estáticas de flujo supone que los datos estáticos se almacenan mediante Delta Lake.

Una combinación de secuencia estática combina la versión válida más reciente de una tabla Delta (los datos estáticos) a una secuencia de datos mediante una combinación sin estado.

Cuando Azure Databricks procesa un microlote de datos en una combinación de secuencia estática, la versión válida más reciente de los datos de la tabla delta estática se une con los registros presentes en el microproceso actual. Dado que la combinación no tiene estado, no es necesario configurar la marca de agua y puede procesar los resultados con baja latencia. Los datos de la tabla delta estática usada en la combinación deben cambiar lentamente.

En el siguiente ejemplo se muestra este patrón:

streamingDF = spark.readStream.table("orders")
staticDF = spark.read.table("customers")

query = (streamingDF
  .join(staticDF, streamingDF.customer_id==staticDF.id, "inner")
  .writeStream
  .option("checkpointLocation", checkpoint_path)
  .table("orders_with_customer_info")
)

Optimización del rendimiento de las combinaciones

El proceso con Photon habilitado siempre selecciona el mejor tipo de combinación. Consulte ¿Qué es Photon?

El uso de una versión reciente de Databricks Runtime con Photon habilitado suele proporcionar un buen rendimiento de combinación, pero también debe tener en cuenta las siguientes recomendaciones:

  • Las combinaciones cruzadas son muy costosas. Quite las combinaciones cruzadas de las cargas de trabajo y las consultas que requieren baja latencia o recomputación frecuente.

  • El orden de combinación es importante. Al realizar varias combinaciones, primero una las tablas más pequeñas y, a continuación, une el resultado con tablas más grandes.

  • El optimizador puede tener problemas en consultas con muchas combinaciones y agregaciones. Guardar los resultados intermedios puede acelerar la planificación de consultas y los resultados informáticos.

  • Mantenga nuevas estadísticas para mejorar el rendimiento. La optimización predictiva con ANALYZE (versión preliminar pública) puede actualizar y mantener estadísticas automáticamente. También puede ejecutar la consulta ANALYZE TABLE table_name COMPUTE STATISTICS para actualizar las estadísticas en el planificador de consultas.

Importante

La optimización predictiva con ANALYZE está en versión preliminar pública. Incluye la colección de estadísticas inteligentes durante las escrituras. Use este formulario para registrarse en la versión preliminar pública.

Nota:

En Databricks Runtime 14.3 LTS y superiores, puede modificar las columnas en las que Delta Lake recopila estadísticas para la omisión de datos y, a continuación, volver a calcular las estado. Vea Especificación de columnas de estadísticas delta.

Sugerencias de combinación en Azure Databricks

Apache Spark permite especificar sugerencias de combinación para combinaciones de rango y sesgadas. Las sugerencias para las combinaciones sesgadas no son necesarias, ya que Azure Databricks optimiza automáticamente estas combinaciones. Consulte Sugerencias

Las sugerencias para las combinaciones de rango pueden ser útiles si el rendimiento de las combinaciones es bajo y está realizando combinaciones de desigualdad. Los ejemplos incluyen la combinación de rango de marcas de tiempo o un rango de ID de clusterización. Consulte Optimización de la combinación de intervalos.