Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Los formatos de tablas de Lakehouse y Delta Lake son fundamentales para Microsoft Fabric, lo que garantiza que las tablas estén optimizadas para el análisis sea un requisito clave. En esta guía se describen los conceptos de optimización de tablas de Delta Lake, las configuraciones y cómo aplicarlos a los patrones de uso de macrodatos más comunes.
Importante
Los OPTIMIZE comandos de este artículo son comandos de Spark SQL y deben ejecutarse en entornos de Spark como:
- Cuadernos de Fabric con el entorno de ejecución de Spark
- Definiciones de trabajos de Spark
- Lakehouse a través de la opción Mantenimiento en el Explorador
Estos comandos NO se admiten en el punto de conexión de SQL Analytics o el editor de consultas SQL de Almacén, que solo admiten comandos T-SQL. Para el mantenimiento de tablas mediante el punto de conexión de SQL Analytics, use las opciones de la interfaz de usuario de mantenimiento de Lakehouse o ejecute los comandos en un cuaderno de Fabric.
¿Qué es V-Order?
V-Order es una optimización del tiempo de escritura en el formato de archivo parquet que permite lecturas ultrarrápidas en los motores de procesamiento de Microsoft Fabric, como Power BI, SQL, Spark y otros.
Los motores de Power BI y SQL utilizan la tecnología Microsoft Verti-Scan y archivos parquet con V-Order para lograr tiempos de acceso a los datos similares a los de la memoria. Spark y otros motores de proceso que no son Verti-Scan también se benefician de los archivos ordenados por V-Order con un promedio de tiempos de lectura un 10 % más rápidos, con algunos escenarios de hasta un 50 %.
V-Order optimiza los archivos Parquet mediante la ordenación, la distribución de grupos de filas, la codificación y la compresión, lo que reduce el uso de los recursos y mejora el rendimiento y la eficiencia de los costos. Aunque agrega ~15% a los tiempos de escritura, puede aumentar la compresión hasta 50%. La ordenación de V-Order tiene un impacto del 15 % en los tiempos medios de escritura, pero proporciona hasta un 50 % más de compresión.
Todos los motores parquet puede leer su formato parquet de código abierto 100 % compatible como archivos parquet normales. Las tablas delta son más eficientes que nunca; características como Z-Order son compatibles con V-Order. Las propiedades de tabla y los comandos de optimización se pueden usar para controlar el orden V de sus particiones.
V-Order se aplica en el nivel de archivo parquet. Las tablas delta y sus características, como Z-Order, compactación, vacío, viaje de tiempo, etc. son ortogonales a V-Order y, como tal, son compatibles y se pueden usar juntas para beneficios adicionales.
Control de escrituras de V-Order
V-Order se utiliza para optimizar el diseño de archivos parquet y lograr consultas más rápidas, especialmente en escenarios con muchas lecturas. En Microsoft Fabric, el orden de V está deshabilitado de forma predeterminada para todas las áreas de trabajo recién creadas para optimizar el rendimiento de las cargas de trabajo de ingeniería de datos con mucha escritura.
El comportamiento de orden V en Apache Spark se controla mediante las siguientes configuraciones:
| Configuración | Valor predeterminado | Descripción |
|---|---|---|
spark.sql.parquet.vorder.default |
false |
Controla la escritura de V-Order de nivel de sesión. Configurado a false de forma predeterminada en las nuevas áreas de trabajo de Fabric. |
TBLPROPERTIES("delta.parquet.vorder.enabled") |
Anular | Controla el comportamiento predeterminado del orden V en el nivel de tabla. |
Opción del escritor de DataFrame: parquet.vorder.enabled |
Anular | Se usa para controlar el orden V en el nivel de operación de escritura. |
Utilice los siguientes comandos para habilitar o anular las escrituras de V-Order según sus necesidades.
Importante
El orden V está deshabilitado de forma predeterminada en las nuevas áreas de trabajo de Fabric (
spark.sql.parquet.vorder.default=false) para mejorar el rendimiento de las canalizaciones de ingesta y transformación de datos.Si la carga de trabajo es de lectura intensiva, como consultas interactivas o paneles, habilite V-Order con las siguientes configuraciones:
- Establezca la propiedad
spark.sql.parquet.vorder.defaultSpark en true". - Cambie los perfiles de recursos a
readHeavyforSparko los perfilesReadHeavy. Este perfil habilita automáticamente el orden V para mejorar el rendimiento de lectura.
- Establezca la propiedad
En el entorno de ejecución de Fabric 1.3 y versiones posteriores, la configuración spark.sql.parquet.vorder.enable se elimina. Dado que el orden V se aplica automáticamente durante la optimización delta mediante instrucciones OPTIMIZE, no es necesario habilitar manualmente esta configuración en versiones más recientes en tiempo de ejecución. Si va a migrar código de una versión anterior en tiempo de ejecución, puede quitar esta configuración, ya que el motor ahora lo controla automáticamente.
Comprobación de la configuración de V-Order en la sesión de Apache Spark
%%sql
SET spark.sql.parquet.vorder.default
Deshabilitación de la escritura de V-Order en la sesión de Apache Spark
%%sql
SET spark.sql.parquet.vorder.default=FALSE
Habilitación de la escritura de V-Order en la sesión de Apache Spark
Importante
Cuando se habilita en el nivel de sesión. Todas las escrituras de parquet se realizan con V-Order activado, lo que incluye tablas de parquet no Delta y tablas Delta con la propiedad de tabla parquet.vorder.enabled establecida en true o false.
%%sql
SET spark.sql.parquet.vorder.default=TRUE
Control de V-Order mediante las propiedades de la tabla Delta
Habilite la propiedad de tabla V-Order durante la creación de la tabla:
%%sql
CREATE TABLE person (id INT, name STRING, age INT) USING parquet TBLPROPERTIES("delta.parquet.vorder.enabled" = "true");
Importante
Cuando la propiedad tabla se establece en true, los comandos INSERT, UPDATE y MERGE se comportan según lo previsto y realizan la optimización durante el tiempo de escritura. Si la configuración de la sesión de V-Order se establece en true o si se habilita con spark.write, las escrituras son V-Order incluso aunque TBLPROPERTIES esté configurado en false.
Habilite o deshabilite V-Order modificando la propiedad de tabla:
%%sql
ALTER TABLE person SET TBLPROPERTIES("delta.parquet.vorder.enabled" = "true");
ALTER TABLE person SET TBLPROPERTIES("delta.parquet.vorder.enabled" = "false");
ALTER TABLE person UNSET TBLPROPERTIES("delta.parquet.vorder.enabled");
Después de habilitar o deshabilitar V-Order mediante propiedades de tabla, solo se ven afectadas las escrituras futuras en la tabla. Los archivos parquet mantienen la ordenación usada cuando se creó. Para cambiar la estructura física actual para aplicar o quitar el orden V, consulte cómo controlar el orden V al optimizar una tabla.
Control de V-Order directamente durante las operaciones de escritura
Todos los comandos de escritura de Apache Spark heredan la configuración de sesión si no está explícita. Todos los comandos siguientes escriben utilizando V-Order al heredar implícitamente la configuración de sesión.
df_source.write\
.format("delta")\
.mode("append")\
.saveAsTable("myschema.mytable")
DeltaTable.createOrReplace(spark)\
.addColumn("id","INT")\
.addColumn("firstName","STRING")\
.addColumn("middleName","STRING")\
.addColumn("lastName","STRING",comment="surname")\
.addColumn("birthDate","TIMESTAMP")\
.location("Files/people")\
.execute()
df_source.write\
.format("delta")\
.mode("overwrite")\
.option("replaceWhere","start_date >= '2017-01-01' AND end_date <= '2017-01-31'")\
.saveAsTable("myschema.mytable")
Importante
V-Order solo aplica a los archivos afectados por el predicado.
En una sesión en la que spark.sql.parquet.vorder.default no se establece o se establece en false, los siguientes comandos escribirían mediante V-Order:
df_source.write\
.format("delta")\
.mode("overwrite")\
.option("replaceWhere","start_date >= '2017-01-01' AND end_date <= '2017-01-31'")\
.option("parquet.vorder.enabled ","true")\
.saveAsTable("myschema.mytable")
DeltaTable.createOrReplace(spark)\
.addColumn("id","INT")\
.addColumn("firstName","STRING")\
.addColumn("middleName","STRING")\
.addColumn("lastName","STRING",comment="surname")\
.addColumn("birthDate","TIMESTAMP")\
.option("parquet.vorder.enabled","true")\
.location("Files/people")\
.execute()
¿Qué es la optimización de escritura?
Las cargas de trabajo analíticas en motores de procesamiento de macrodatos, como Apache Spark, funcionan de forma más eficaz al usar tamaños de archivo más grandes estandarizados. La relación entre el tamaño del archivo, el número de archivos, el número de trabajos de Spark y sus configuraciones desempeña un papel fundamental en el rendimiento. La incorporación de datos a las tablas del lago de datos puede tener la característica heredada de escribir constantemente un gran número de archivos pequeños; este escenario se conoce comúnmente como el "problema de los archivos pequeños".
Optimize Write es una característica de Delta Lake en Fabric y Synapse que reduce el recuento de archivos y aumenta el tamaño de archivo individual durante las escrituras en Apache Spark. El tamaño del archivo de destino se puede cambiar según los requisitos de carga de trabajo mediante las configuraciones.
La característica está habilitada de manera predeterminada en Microsoft Fabric Runtime para Apache Spark. Para obtener más información sobre escenarios de uso de optimización de escritura, lea el artículo La necesidad de optimizar la escritura en Apache Spark.
Optimización de combinación
El comando MERGE de Data Lake permite a los usuarios actualizar una tabla delta con condiciones avanzadas. Puede actualizar datos de una tabla de origen, una vista o un DataFrame en una tabla de destino mediante el comando MERGE. Sin embargo, el algoritmo actual de la distribución de código abierto de Delta Lake no está totalmente optimizado para controlar las filas sin modificar. El equipo Delta de Microsoft Spark implementó una optimización de combinación aleatoria baja personalizada. Las filas sin modificar se excluirán de operaciones de orden aleatorio costosas que se necesiten para actualizar las filas coincidentes.
La implementación se controla mediante la configuración spark.microsoft.delta.merge.lowShuffle.enabled, habilitada de forma predeterminada en el tiempo de ejecución. No requiere cambios de código y es totalmente compatible con la distribución de código abierto de Delta Lake. Para más información sobre los escenarios de uso de combinación aleatoria baja, lea el artículo Optimización de combinación aleatoria baja en tablas delta.
Mantenimiento de tablas delta
A medida que cambian las tablas delta, el rendimiento y la rentabilidad del almacenamiento tienden a degradarse por los siguientes motivos:
- Los nuevos datos agregados a la tabla pueden sesgar datos.
- Las tasas de ingesta de datos por lotes y streaming pueden traer muchos archivos pequeños.
- Las operaciones de actualización y eliminación agregan sobrecarga de lectura. Los archivos Parquet son inmutables por diseño, ya que las tablas Delta, al agregar nuevos archivos Parquet con el conjunto de cambios, amplía aún más los problemas impuestos por los primeros dos elementos.
- Ya no se necesitan archivos de datos ni archivos de registro disponibles en el almacenamiento.
Para mantener las tablas en el mejor estado y optimizar el rendimiento, realice operaciones de compactación de contenedores y vaciado en las tablas Delta. La compactación de bin se logra mediante el comando OPTIMIZE; combina todos los cambios en archivos parquet más grandes y consolidados. La limpieza de almacenamiento desreferenciada se logra mediante el comando VACUUM.
Los comandos de mantenimiento de tablas OPTIMIZE y VACUUM se pueden usar en cuadernos y definiciones de trabajos de Spark y, a continuación, orquestarlos mediante funcionalidades de plataforma. Lakehouse en Fabric ofrece una funcionalidad para usar la interfaz de usuario para realizar el mantenimiento de tablas ad hoc, como se explica en el artículo Mantenimiento de tablas de Delta Lake.
Importante
Diseñar la estructura física de la tabla en función de la frecuencia de ingesta y los patrones de lectura suele ser más importante que los comandos de optimización de esta sección.
Control de V-Order al optimizar una tabla
Las siguientes estructuras de comandos realizan la compactación de bin y vuelven a escribir todos los archivos afectados mediante V-Order, independientemente de la configuración de TBLPROPERTIES o de la configuración de sesión:
%%sql
OPTIMIZE <table|fileOrFolderPath> VORDER;
OPTIMIZE <table|fileOrFolderPath> WHERE <predicate> VORDER;
OPTIMIZE <table|fileOrFolderPath> WHERE <predicate> [ZORDER BY (col_name1, col_name2, ...)] VORDER;
Cuando se usan ZORDER y VORDER juntos, Apache Spark realiza la compactación de bin, ZORDER y VORDER secuencialmente.
Los siguientes comandos realizan la compactación de bin y vuelven a escribir todos los archivos afectados mediante la configuración TBLPROPERTIES. Si TBLPROPERTIES se establece en true en V-Order, todos los archivos afectados se escriben como V-Order. Si TBLPROPERTIES no está establecido o se establece en false, hereda la configuración de sesión. Para quitar V-Order de la tabla, establezca la configuración de sesión en false.
Nota:
Al usar estos comandos en cuadernos de Fabric, asegúrese de que hay un espacio entre %%sql y el OPTIMIZE comando . La sintaxis correcta es:
%%sql
OPTIMIZE table_name;
No:%%sqlOPTIMIZE table_name; (esto provocará un error de sintaxis)
%%sql
OPTIMIZE <table|fileOrFolderPath>;
OPTIMIZE <table|fileOrFolderPath> WHERE predicate;
OPTIMIZE <table|fileOrFolderPath> WHERE predicate [ZORDER BY (col_name1, col_name2, ...)];