Cómo obtener el mejor rendimiento de las bases de datos Delta Lake Star Schema

Cómo obtener el mejor rendimiento de las bases de datos Delta Lake Star Schema

  • Big Data
  • mayo 20, 2022
  • No Comment
  • 27
  • 13 minutes read


La mayoría de los desarrolladores de almacenes de datos están muy familiarizados con el omnipresente esquema en estrella. Un esquema en estrella introducido por Ralph Kimball en la década de 1990 se usa para desnormalizar los datos comerciales en dimensiones (como tiempo y producto) y hechos (como transacciones en montos y cantidades). Un esquema en estrella almacena datos de manera eficiente, mantiene el historial y actualiza los datos al reducir la duplicación de definiciones comerciales repetitivas, lo que permite agregarlos y filtrarlos rápidamente.

La implementación común de un esquema en estrella para admitir aplicaciones de inteligencia empresarial se ha vuelto tan rutinaria y exitosa que muchos modeladores de datos prácticamente pueden hacerlo mientras duermen. En Databricks, hemos creado muchas aplicaciones de datos y buscamos constantemente enfoques de mejores prácticas que sirvan como regla general, una implementación básica que nos garantiza un gran resultado.

Al igual que en un almacén de datos tradicional, hay algunas reglas generales simples que debe seguir en Delta Lake para mejorar en gran medida sus uniones de esquema de estrella delta.

Estos son los pasos básicos para el éxito:

  1. Use tablas delta para crear sus tablas de hechos y dimensiones
  2. Optimice el tamaño de su archivo para una limpieza rápida de archivos
  3. Cree un orden z para sus tablas de hechos
  4. Cree órdenes z para sus campos clave de dimensión y predicados más probables
  5. Analizar la tabla para recopilar estadísticas para Adaptive Query Execution Optimizer

1. Use tablas delta para crear sus tablas de hechos y dimensiones

Delta Lake es una capa de formato de almacenamiento abierta que le permite insertar, actualizar, eliminar y agregar fácilmente transacciones ACID a sus tablas de lago de datos, lo que simplifica el mantenimiento y las revisiones. Delta Lake también ofrece la capacidad de realizar una limpieza dinámica de archivos para optimizar consultas SQL más rápidas.

La sintaxis es simple en Databricks Runtimes 8.x y versiones posteriores, siendo Delta Lake el formato de tabla predeterminado. Puede crear una tabla delta usando SQL de la siguiente manera:

CREATE TABLE MY_TABLE (COLUMN_NAME STRING)

Antes del tiempo de ejecución de 8.x, Databricks tenía que crear la tabla con el USING DELTA Sintaxis.

El esquema de estrella de ejemplo y los atributos de dimensión suelen utilizar tablas de Delta Lake.

2. Optimice el tamaño de su archivo para una limpieza rápida de archivos

Dos de las mayores pérdidas de tiempo en una consulta de Apache Spark™ son el tiempo dedicado a leer datos del almacenamiento en la nube y la necesidad de leer todos los archivos subyacentes. Al omitir datos en Delta Lake, las consultas pueden leer selectivamente solo los archivos delta que contienen datos relevantes, lo que ahorra una cantidad significativa de tiempo. La omisión de datos puede ayudar a la poda de archivos estáticos, la poda de archivos dinámicos, la poda de particiones estáticas y la poda de particiones dinámicas.

Una de las primeras cosas a considerar al configurar la omisión de datos es el tamaño ideal del archivo de datos: demasiado pequeño y tendrá demasiados archivos (el conocido «problema de archivos pequeños»); demasiado grande y no puede omitir suficientes datos.

Un buen rango de tamaño de archivo es entre 32 y 128 MB (1024 * 1024 * 32 = 33554432 para 32 MB, por supuesto). Nuevamente, la idea es que si el tamaño del archivo es demasiado grande, la limpieza dinámica del archivo saltará al archivo o archivos correctos, pero serán tan grandes que aún queda mucho trabajo por hacer. Al crear archivos más pequeños, puede beneficiarse del saneamiento de archivos y minimizar la E/S para obtener los datos que necesita fusionar.

Puede establecer el valor del tamaño del archivo para todo el cuaderno en Python:

spark.conf.set("spark.databricks.delta.targetFileSize", 33554432)

O en SQL:

SET spark.databricks.delta.targetFileSize=33554432

O puede configurarlo solo para una tabla específica usando:

ALTER TABLE (database).(table) SET TBLPROPERTIES (delta.targetFileSize=33554432)

Si está leyendo este artículo después de haber creado las tablas, aún puede establecer la propiedad de la tabla para el tamaño del archivo, y optimizar y construir el ZORDER proporcionará los archivos al nuevo tamaño de archivo. Si ya agregó un ZORDER, puede agregar y/o eliminar una columna para forzar una reescritura antes de llegar a la configuración final de ZORDER. Lea más sobre ZORDER en el paso 3.

Se puede encontrar documentación más completa aquí, y para aquellos a los que les gusta Python o Scala además de SQL, aquí está la sintaxis completa.

A medida que Databricks continúa agregando características y funciones, también podemos optimizar automáticamente el tamaño del archivo según el tamaño de la tabla. Para bases de datos más pequeñas, la configuración anterior probablemente brindará un mejor rendimiento, pero para tablas más grandes y/o simplemente para hacerlo más fácil, puede seguir la guía aquí e implementarla. delta.tuneFileSizesForRewrites propiedad de la tabla.

3. Cree un orden z para sus tablas de hechos

Para mejorar la velocidad de consulta, Delta Lake admite la capacidad de optimizar el diseño de los datos almacenados en el almacenamiento en la nube con z-ordering.
Para mejorar la velocidad de las consultas, Delta Lake admite la capacidad de optimizar el diseño de los datos almacenados en el almacenamiento en la nube mediante el ordenamiento en z, también conocido como agrupación multidimensional. Los órdenes Z se utilizan en situaciones similares a los índices agrupados en el mundo de la base de datos, aunque en realidad no son una estructura auxiliar. Un orden z agrupa los datos en la definición de orden z para que los valores de filas y columnas de la definición de orden z se combinen en la menor cantidad de archivos posible.

La mayoría de los sistemas de bases de datos han introducido la indexación para mejorar el rendimiento de las consultas. Los índices son archivos y, a medida que aumenta el tamaño de los datos, pueden convertirse en otro gran problema de datos para resolver. En cambio, Delta Lake organiza los datos en los archivos de Parquet para que la selección de regiones en el almacenamiento de objetos sea más eficiente. Combinado con el proceso de recopilación de estadísticas y la omisión de datos, Z-Order es similar a las búsquedas de bases de datos frente a los escaneos donde los índices se han resuelto sin crear otro cuello de botella computacional para encontrar los datos que busca una consulta.

Para el orden Z, la mejor práctica es limitar el número de columnas en el orden Z al mejor 1-4. Seleccionamos las claves foráneas (claves foráneas por uso, en realidad no forzadas) de las 3 dimensiones más grandes que eran demasiado grandes para enviarlas a los trabajadores.

OPTIMIZE MY_FACT_TABLE 
  ZORDER BY (LARGEST_DIM_FK, NEXT_LARGEST_DIM_FK, ...)

Además, si su tabla de hechos tiene una escala masiva y cientos de miles de millones de filas o petabytes de datos, considere la posibilidad de particionar para mejorar aún más la omisión de archivos. Las particiones están en efecto cuando está filtrando activamente en un campo particionado.

4. Cree órdenes z para sus campos clave de dimensión y predicados más probables

Aunque Databricks no impone claves principales en una tabla delta, dado que está leyendo este blog, probablemente tenga dimensiones y exista una clave sustituta, una que es un número entero o un número entero grande y se valida y se espera que sea única.

Una de las dimensiones con las que trabajamos tenía más de mil millones de filas y se benefició de la omisión de archivos y la limpieza dinámica de archivos después de agregar nuestros predicados al orden z. Nuestras dimensiones más pequeñas también tenían órdenes z en el campo clave de dimensión y se transmitieron en la combinación de los hechos. De manera similar al consejo de la tabla de hechos, limite el número de columnas en el orden Z a los campos 1-4 en la dimensión que es más probable que se incluyan en un filtro además de la clave.

OPTIMIZE MY_BIG_DIM 
  ZORDER BY (MY_BIG_DIM_PK, LIKELY_FIELD_1, LIKELY_FIELD_2)

5. Analice la tabla para recopilar estadísticas para Adaptive Query Execution Optimizer

Uno de los mayores avances en Apache Spark™ 3.0 fue la Ejecución adaptable de consultas, o AQE para abreviar. A partir de Spark 3.0, hay tres funciones principales en AQE, incluida la fusión de particiones posteriores a la reproducción aleatoria, la conversión de combinación de ordenación y combinación en combinación de transmisión y la optimización de combinaciones sesgadas. Juntas, estas funciones permiten un rendimiento acelerado de los modelos de dimensión en Spark.

Para que AQE sepa qué tarifa elegir, necesitamos recopilar estadísticas sobre las tablas. Para hacer esto, emita el comando ANALIZAR TABLA. Los clientes han informado que la recopilación de estadísticas de tablas ha reducido significativamente la ejecución de consultas en modelos dimensionales, incluidas las uniones complejas.

ANALYZE TABLE MY_BIG_DIM COMPUTE STATISTICS FOR ALL COLUMNS

Conclusión

Al seguir las pautas anteriores, las organizaciones pueden reducir los tiempos de consulta; en nuestro ejemplo, de 90 segundos a 10 segundos en el mismo clúster. Las optimizaciones redujeron en gran medida la E/S y aseguraron que solo procesáramos el contenido correcto. También nos beneficiamos de la estructura flexible de Delta Lake, ya que escalaría y manejaría los tipos de consultas que enviaban las herramientas de inteligencia comercial de forma ad hoc.

Además de las optimizaciones de omisión de archivos mencionadas en este blog, Databricks está invirtiendo mucho en mejorar el rendimiento de las consultas Spark SQL con Databricks Photon. Obtenga más información sobre Photon y el aumento de rendimiento que ofrece para todas sus consultas Spark SQL con Databricks.

Los clientes pueden esperar que su rendimiento de consultas ETL/ELT y SQL mejore al habilitar Photon en Databricks Runtime. Cuando combina las mejores prácticas descritas aquí con el tiempo de ejecución de Databricks habilitado para Photon, puede esperar un rendimiento de consulta de baja latencia que puede superar a los mejores almacenes de datos en la nube.

Cree su base de datos de esquema en estrella con Databricks SQL hoy.



Related post

Cómo los objetos tecnológicos brillantes distraen la atención de la política climática

Cómo los objetos tecnológicos brillantes distraen la atención de…

Soy ingeniero de formación y me encantan las cosas nuevas. Los últimos gadgets, ideas, diseños. Pero cuando se trata del clima,…
Premios de socios globales de ladrillos de datos 2022

Premios de socios globales de ladrillos de datos 2022

Databricks tiene un ecosistema de socios de más de 600 socios en todo el mundo que son fundamentales para crear y…
Las tejas de hormigón de base biológica reducen las emisiones de CO2 y los residuos

Las tejas de hormigón de base biológica reducen las…

Las baldosas de base biológica son un nuevo material de construcción sostenible que se utiliza para crear fachadas sostenibles para edificios.…

Leave a Reply

Tu dirección de correo electrónico no será publicada.