La velocidad de escritura en las tablas Delta aumenta significativamente después de copiarla en Databricks.
Estoy fusionando un dataframe de PySpark en una tabla Delta. El delta de salida está particionado por FECHA. La siguiente consulta tarda 30s en ejecutarse:
query = DeltaTable.forPath(spark, RUTA_DE_LA_TABLA).alias(
"actual"
).merge(
spark_df.alias("sdf"),
"actual.FECHA >= fecha_actual() - INTERVALO 1 DÍAS
AND (actual.feat1 = sdf.feat1)
AND (actual.TIEMPO = sdf.TIEMPO)
AND (actual.feat2 = sdf.feat2) "
,
).whenNotMatchedInsertAll()
Después de copiar el contenido del Delta a otra ubicación, la consulta anterior se vuelve 60 veces más rápida (es decir, tarda 0.5s en el mismo clúster) al utilizar NUEVA_RUTA
en lugar de RUTA_DE_LA_TABLA
. Aquí está el comando para copiar el delta:
(spark.read.format("delta").load(RUTA_DE_LA_TABLA).write.format(
"delta"
)
.mode("sobrescribir").partitionBy(["FECHA"]).save(NUEVA_RUTA))
¿Cómo puedo hacer que la consulta en el primer delta sea tan rápida como en el nuevo? Entiendo que Delta tiene un sistema de versiones y sospecho que es la razón por la que tarda tanto tiempo. Intenté limpiar la tabla Delta (lo que redujo el tiempo de consulta a 20s) pero aún estoy lejos de los 0.5s.
Configuración:
- Python 3.7;
- Pyspark 3.0.1;
- Databricks Runtime 7.3 LTS
davy.ai
Hay varias formas en las que puedes optimizar el rendimiento de las consultas en la primera tabla Delta:
Habilitar el ordenamiento ZORDER: Delta Lake admite el ordenamiento ZORDER, que puede mejorar significativamente el rendimiento de las consultas al organizar los datos dentro de cada partición. Puedes usar la cláusula ZORDER BY al escribir datos en la tabla Delta para optimizar el rendimiento de la consulta.
Usar la caché de Delta: Delta Lake proporciona un mecanismo de caché que te permite almacenar en caché los marcos de datos o tablas en memoria o en disco para acelerar el rendimiento de las consultas. Puedes intentar almacenar en caché la tabla Delta antes de ejecutar la consulta para ver si mejora el rendimiento.
Optimizar la configuración del clúster: Dependiendo del tamaño de tus datos y la complejidad de la consulta, es posible que debas ajustar la configuración del clúster para asignar más recursos. Puedes intentar aumentar el número de nodos o ajustar las configuraciones de memoria y CPU para optimizar el rendimiento.
Optimizar la tabla Delta: Puedes optimizar la tabla Delta mediante el análisis y la optimización de los datos utilizando el comando OPTIMIZE. Esto compactará los archivos pequeños y eliminará las versiones antiguas, lo que puede mejorar el rendimiento de las consultas.
En resumen, hay varias formas de optimizar el rendimiento de las consultas en la primera tabla Delta. Puedes intentar optimizar la condición de fusión, habilitar el ordenamiento ZORDER, usar la caché de Delta, optimizar la configuración del clúster u optimizar la tabla Delta utilizando el comando OPTIMIZE.