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.
La agrupación en clústeres líquidos es una estrategia de diseño de datos flexible para tablas Delta en Microsoft Fabric. Reemplaza la creación de particiones estáticas de estilo hive y el mantenimiento manual de Z-Order por la agrupación en clústeres declarativa y fácil de cambiar. Usted define en qué columnas se agrupa, y Fabric Spark Runtime controla automáticamente la distribución física de los datos.
Use este artículo para:
- Comprenda cómo funciona la agrupación en clústeres líquidos y cuándo usarlo.
- Compare la agrupación en clústeres líquidos con particiones y Z-Order.
- Configure la agrupación en clústeres en las tablas.
- Descripción de la agrupación en clústeres líquidos incrementales (Runtime 2.0+).
- Ajusta el comportamiento del clúster con configuraciones de sesión.
¿Qué es la agrupación en clústeres líquidos?
La agrupación en clústeres líquidos organiza los datos en archivos de tabla Delta para que las filas con valores similares en las columnas de agrupación en clústeres se coloquen. El diseño permite una omisión de archivos mejorada durante la ejecución de consultas: cuando una consulta filtra por columnas de clustering, el motor lee solo los archivos cuyos rangos de valores coinciden con el predicado, omitiendo el resto.
A diferencia de la creación de particiones, agrupación en clústeres líquidos:
- No crea estructuras de directorio físico por valor de columna.
- No requiere que elija columnas de agrupación en clústeres en tiempo de creación de tablas (se pueden cambiar más adelante).
- Gestiona columnas de alta cardinalidad sin crear posibles problemas de archivos pequeños causados por miles de particiones diminutas.
- Aplica la optimización del diseño durante
OPTIMIZE, no en el momento de la escritura.
Ventajas sobre la creación de particiones y el orden Z
La agrupación en clústeres líquidos ofrece ventajas significativas sobre la creación de particiones de estilo hive y el orden Z en términos de flexibilidad, mantenimiento y control de los patrones de datos en evolución.
En comparación con la creación de particiones de estilo hive
| Aspecto | Creación de particiones de estilo hive | Agrupación en clústeres líquidos |
|---|---|---|
| Granularidad | Un directorio por valor distinto (o combinación) | Intervalos de valores de nivel de archivo, sin directorios |
| Cardinalidad alta | Crea miles de archivos o directorios pequeños | Se maneja de forma natural; agrupa los datos en archivos del tamaño adecuado |
| Cambios de columna | Requiere reescritura de tabla completa |
ALTER TABLE ... CLUSTER BY se aplica la próxima vez OPTIMIZE |
| Ruta de escritura | La columna de partición debe conocerse en tiempo de escritura. | Cualquier columna puede agruparse posteriormente |
| Problema de archivos pequeños | Habitual en streaming o inserciones frecuentes | Gestionado por OPTIMIZE compactación |
Comparado con el orden Z
| Aspecto | Orden Z | Agrupación en clústeres líquidos |
|---|---|---|
| Cambios de columna | Se debe volver a ejecutar OPTIMIZE ZORDER BY (...) con nuevas columnas |
ALTER TABLE ... CLUSTER BY conserva la definición |
| Compatibilidad incremental | Sin modo incremental; usar WHERE para limitar el ámbito manualmente |
El modo incremental (runtime 2.0+) procesa automáticamente los archivos nuevos, modificados o incorrectos. |
| Metadata | Ninguna definición de columna persistente | Agrupación en clústeres de columnas almacenadas en metadatos de tabla |
| Diseño de varias columnas | Curva de orden Z aplicada durante la optimización | Orden Z para una columna de agrupación en clústeres; Curva Hilbert para más de 2 columnas, lo que proporciona una localidad de datos optimizada |
La agrupación en clústeres líquidos usa Z-Order para diseños de una sola columna y la curva Hilbert para más de 2 columnas, una mejora de Z-Order, que solo aplica la curva Z-Order para la agrupación en clústeres multidimensionales. La agrupación en clústeres líquidos encapsula ambos algoritmos en un marco incremental y compatible con metadatos que reduce el costo de mantenimiento continuo.
Crear una tabla líquida agrupada
Defina columnas de agrupación en clústeres mediante la cláusula en la creación de tablas CLUSTER BY :
-- Create a new clustered table
CREATE TABLE dbo.sales (
order_id BIGINT,
order_date DATE,
region STRING,
amount DECIMAL(10,2)
) CLUSTER BY (order_date, region);
-- Create from query results
CREATE TABLE dbo.sales_clustered
CLUSTER BY (order_date, region)
AS SELECT * FROM raw_sales;
-- Enable on existing table
ALTER TABLE dbo.sales_txn CLUSTER BY (order_date, region);
Cambiar columnas de agrupamiento
A diferencia de la creación de particiones, puede cambiar las columnas de agrupación en clústeres en cualquier momento sin volver a escribir datos:
-- Change clustering columns
ALTER TABLE sales CLUSTER BY (region, product_category);
-- Remove clustering (table becomes unclustered)
ALTER TABLE sales CLUSTER BY NONE;
Después de cambiar las columnas de agrupación en clústeres, el nuevo diseño se aplica en la siguiente OPTIMIZE ejecución. Los archivos existentes conservan su disposición anterior hasta que se vuelven a clusterizar.
Aplicación de clústeres con OPTIMIZE
La agrupación en clústeres se aplica durante el OPTIMIZE comando . No es necesario especificar columnas en la OPTIMIZE instrucción , ya que la definición de agrupación en clústeres se almacena en los metadatos de la tabla:
-- Cluster the table using the defined clustering columns
OPTIMIZE sales;
-- Recluster partial Z-Cubes and Z-Cubes with different clustering keys or clustering providers
OPTIMIZE sales FULL;
Utilice OPTIMIZE FULL cuando cambie las claves de agrupación y quiera reconstruir los Z-Cubes que no se ajusten a la estrategia de agrupación actual. Un Z-Cube es la unidad lógica que utiliza la agrupación en clústeres líquidos para agrupar archivos que comparten las mismas columnas de agrupación en clústeres. Los datos se agrupan en un único cubo Z hasta que las claves del clúster cambian o la cantidad de datos supera los 100 GB.
Tip
A partir de Fabric Runtime 2.0, el motor de ejecución Native admite la realización de OPTIMIZE en tablas en clústeres líquidos, lo que proporciona un rendimiento de agrupación en clústeres multidimensionales de 30 a 50% más rápido. Los entornos de ejecución anteriores recurren a la ejecución normal de Spark sin aceleración.
Funcionamiento de la agrupación en clústeres líquidos
Cuando se ejecuta OPTIMIZE en una tabla en clúster líquido, ocurre lo siguiente:
-
Selección de archivos: el motor selecciona los archivos que necesitan agrupación en clústeres.
- En Runtime 2.0+ (estrategia incremental de agrupación en clústeres), solo se seleccionan archivos no agrupados, en mal estado, pequeños o con vectores de eliminación.
- En tiempo de ejecución 1.3, se seleccionan todos los archivos de cada cubo Z menor que 100 GB, independientemente de si ya están bien agrupados.
- Agrupación en contenedores: Los archivos seleccionados se agrupan en contenedores para lograr un tamaño óptimo del archivo de salida.
- Reparticionamiento: Los datos de cada partición se redistribuyen mediante una curva de relleno de espacio (curva de Hilbert en varias columnas, Z-Order en una sola columna).
- Escritura de archivos: Los datos reparticionados se escriben en archivos nuevos con rangos de valores reducidos en las columnas de agrupación.
- Actualización de metadatos: el registro delta registra el reemplazo de archivos y etiqueta los nuevos archivos con metadatos de agrupación en clústeres.
El resultado es archivos con intervalos de valores sin superposición (o superpuestos mínimamente) en columnas de agrupación en clústeres, lo que permite al motor omitir los archivos que no coinciden con predicados de consulta.
Caution
Fabric Runtime 1.3 (Delta 3.2): use la agrupación en clústeres líquidos con precaución. En este tiempo de ejecución, la agrupación en clústeres líquidos usa una estrategia de reescritura completa de Z-Cube: cada archivo dentro de un cubo Z se reescribe en cada ejecución. Un cubo Z se conserva (omite) solo cuando su tamaño supera los 100 GB. En el caso de las tablas menores de 100 GB, la reescritura completa significa que cada OPTIMIZE ejecución vuelve a escribir todos los datos de tabla, incluso cuando los datos ya están bien agrupados. Esto provoca una severa amplificación de escritura.
- No utilice la compactación automática con agrupación líquida en Runtime 1.3. Cada desencadenador de compactación automática puede provocar una reescritura de tabla completa en lugar de simplemente agrupar en clústeres los datos nuevos o modificados.
- Evite ejecutar
OPTIMIZEdespués de cada operación de escritura. En Runtime 1.3, limita el clustering a ejecuciones planificadas y deliberadas, y acepta una menor actualización del clustering entre una y otra.
La agrupación en clústeres líquidos incrementales, que elimina esta amplificación de escritura, solo está disponible a partir de Fabric Runtime 2.0.
Agrupamiento líquido incremental
A partir de Fabric Runtime 2.0 (Delta 4.1), la agrupación en clústeres líquidos usa una estrategia de agrupación en clústeres incremental de forma predeterminada. La estrategia incremental es una mejora significativa sobre el comportamiento de agrupación en clústeres estándar.
Importante
La agrupación en clústeres líquidos incrementales solo está disponible en Fabric Runtime 2.0 y versiones posteriores. En tiempos de ejecución anteriores, OPTIMIZE usa el comportamiento estándar (reescritura completa) en el que todos los archivos de un cubo Z se reescriben en cada ejecución.
¿Por qué es importante la estrategia de agrupación en clústeres incrementales?
El algoritmo de agrupación en clústeres estándar vuelve a escribir todos los archivos dentro de un cubo Z (hasta 100 GB) en cada OPTIMIZE ejecución, independientemente de si ya están bien agrupados. Para una tabla que recibe pequeños anexos, el costo de agrupación en clústeres crece linealmente con el tamaño de la tabla, no con la cantidad de datos nuevos.
El modo incremental resuelve el problema de reescritura completa seleccionando solo los archivos que realmente necesitan agrupación en clústeres:
- Archivos no agrupados: datos recién escritos sin metadatos de agrupación en clústeres
- Archivos pequeños: archivos por debajo del umbral de tamaño de archivo de destino
- Archivos con vectores de eliminación: archivos con eliminaciones acumuladas que superan el umbral de limpieza
Los archivos que ya están bien agrupados y tienen el tamaño adecuado se omiten por completo.
Reclusterización automática
La agrupación en clústeres líquidos incrementales incluye la detección automática de superposición, conocida como reclusterización automática, para mantener la calidad de la agrupación en clústeres a lo largo del tiempo. A medida que llegan nuevos datos, esto puede crear solapamientos entre los intervalos de valores de los archivos, lo que reduce la eficacia de la omisión de datos. La reagrupación automática detecta intervalos de valores superpuestos en distintos archivos y reagrupa de forma selectiva solo los archivos afectados.
La reagrupación automática se ejecuta automáticamente como parte de OPTIMIZE siempre que haya datos nuevos o modificados que deban agruparse. No se requiere intervención manual ni reagrupaciones completas programadas. La estrategia de agrupación en clústeres incremental mantiene una calidad de agrupación en clústeres casi óptima a medida que evolucionan los datos.
Volver al comportamiento de reescritura completa
Si necesita deshabilitar la estrategia de agrupación en clústeres incrementales y usar el comportamiento de reescritura completa, establezca la siguiente configuración:
SET spark.microsoft.delta.optimize.clustering.strategy.incremental = FALSE;
OPTIMIZE sales;
Como alternativa, use OPTIMIZE FULL para un recluster completo de un solo uso sin cambiar la configuración de sesión:
OPTIMIZE sales FULL;
Note
La estrategia de agrupación en clústeres incrementales permite intencionadamente una desviación menor del diseño teóricamente óptimo para lograr reducciones significativas en la amplificación de escritura. Ejecutar OPTIMIZE FULL cierra esa brecha reconstruyendo por completo los Z-Cubes hasta el óptimo teórico, aunque con un mayor coste de escritura.
Referencia de configuración
Las siguientes configuraciones de sesión controlan el comportamiento de agrupación en clústeres líquidos en Fabric Runtime 2.0 y versiones posteriores.
Agrupación en clústeres incrementales
| Configuration | Tipo | Default | Descripción |
|---|---|---|---|
spark.microsoft.delta.optimize.clustering.strategy.incremental |
Booleano | true |
Conmutador maestro para la agrupación en clústeres incrementales. Cuando true, OPTIMIZE solo procesa archivos no agrupados, en mal estado, pequeños y de vectores de eliminación. Cuando false, se reescriben todos los archivos de los Z-Cubes de menos de 100 GB (comportamiento estándar). |
spark.microsoft.delta.optimize.clustering.strategy.incremental.autoRecluster |
Booleano | true |
Habilita la detección automática y el reclusterización de archivos con intervalos de datos superpuestos. Solo se aplica cuando está habilitada la agrupación en clústeres incrementales. |
Ajuste automático de recluster
Estas configuraciones controlan la sensibilidad y el alcance del reclustering automático. Los valores predeterminados son adecuados para la mayoría de las cargas de trabajo. Ajústelos solo cuando necesite cambiar el equilibrio entre la calidad de la agrupación y la amplificación de escritura.
| Configuration | Tipo | Default | Descripción |
|---|---|---|---|
spark.microsoft.delta.optimize.clustering.strategy.incremental.autoRecluster.minOffendingFiles |
Int | 4 |
Número mínimo de archivos superpuestos necesarios para desencadenar la reclusterización. Los valores más bajos se vuelven a agrupar antes (mejor rendimiento de las consultas, mayor costo de escritura). Debe ser ≥ 2. |
spark.microsoft.delta.optimize.clustering.strategy.incremental.autoRecluster.minOverlapThreshold |
Double | 0.75 |
Umbral de puntuación de superposición de dimensión de agrupación en clústeres. Los pares de archivos con una puntuación superior a este valor se consideran solapados. Debe estar en el intervalo (0,25, 1,0]. Los valores más bajos son más agresivos. |
Elegir columnas de agrupación
Para obtener los mejores resultados, elija las columnas de agrupación en clústeres en función de los patrones de filtro de consulta más comunes:
-
Elija entre 1 y 4 columnas que aparecen con frecuencia en
WHERElas cláusulas . Más columnas reducen la eficacia por columna de la omisión de archivos de la curva de llenado de espacio y aumentan el tiempo necesario para agrupar los datos. - Considere la cardinalidad de columna. Las columnas de baja cardinalidad producen menos intervalos de valores distintos, lo que reduce el beneficio de omitir archivos al combinarse con claves de agrupación de alta cardinalidad.
-
El orden de las columnas no afecta a la agrupación en clústeres. El orden de las columnas especificadas después de
CLUSTER BYno afecta a la agrupación multidimensional resultante en clústeres.
Tipos de columna compatibles
No todos los tipos de columna se pueden usar como claves de agrupación en clústeres. El motor evalúa el tipo de datos de cada columna para determinar la idoneidad.
Siempre aptos (tipos atómicos):
-
NumericType(ByteType,ShortType,IntegerType,LongType,FloatType,DoubleType,DecimalType) DateTypeTimestampTypeTimestampNTZTypeStringType
Apto condicionalmente:
Note
Los siguientes tipos se pueden habilitar a partir de Fabric Spark Runtime 2.0 (Delta 4.1)
-
StructType: cuandospark.microsoft.delta.clusteredTable.complexTypes.enabledestá habilitado y todos los campos hoja son tipos aptos. -
ArrayType: cuandospark.microsoft.delta.clusteredTable.complexTypes.enabledestá habilitado y el tipo de elemento es apto. -
MapType: cuandospark.microsoft.delta.clusteredTable.complexTypes.enabledestá habilitado, y los tipos de clave y valor son ordenables y aptos.
No apto:
BinaryTypeBooleanTypeNullType
Para consultar los tipos aptos equivalentes utilizados en las estadísticas a nivel de archivo, consulte Omisión de archivos: tipos de datos aptos.
Interacción con otras características
| Feature | Comportamiento |
|---|---|
| Partición | Incompatible. Para omitir archivos, se recomienda el clustering líquido en lugar de la partición. |
| Z-Order | Incompatible. Con fines de omisión de archivos, se recomienda la agrupación en clústeres líquidos a través de Z-Order. |
| Optimización rápida | Compatible a partir de Runtime 2.0. En tiempos de ejecución anteriores, la optimización rápida no tiene ningún efecto en las tablas en clúster líquido. Durante OPTIMIZE, omite la agrupación en clústeres cuando no hay suficientes archivos pequeños o datos insuficientes para generar un archivo de salida de tamaño correcto. |
| Tamaño del archivo de destino adaptable | Compatible. El tamaño del archivo de destino establecido por la evaluación adaptable se usa como tamaño de destino para la agrupación en clústeres. |
| Optimización de la escritura | Compatible. Genera archivos consolidados durante la escritura que luego se agrupan durante OPTIMIZE. |
| Compactación automática | No usar con liquid clustering en Runtime 1.3 o versiones anteriores. En esos tiempos de ejecución, cada desencadenador de compactación automática vuelve a escribir todos los datos en cubos Z menores de 100 GB, lo que provoca una amplificación grave de escritura. En Runtime 2.0 o posterior, la compactación automática es compatible: el clustering incremental garantiza que solo se reescriban los archivos nuevos o en mal estado. La compactación automática controla la consolidación de archivos pequeños; OPTIMIZE controla el diseño de la agrupación en clústeres. |
| Vectores de eliminación | Los archivos que superan el umbral de filas eliminadas se seleccionan para la agrupación en clústeres, independientemente de su estado de agrupación en clústeres. |
| V-Order | Compatible. V-Order y la agrupación líquida operan en ejes diferentes (estructura interna del archivo frente a rangos de valores entre archivos). Ambos se pueden aplicar juntos. |
procedimientos recomendados
-
Ejecute
OPTIMIZEperiódicamente después de las escrituras por lotes o de forma programada para tablas de streaming, pero solo en Runtime 2.0+, donde la estrategia de clustering incremental hace que las ejecuciones frecuentes resulten poco costosas. En Runtime 1.3 y versiones anteriores, cada ejecuciónOPTIMIZEreescribe todos los datos en los Z-Cubes de menos de 100 GB, por lo que las ejecuciones deben ser deliberadas y poco frecuentes. -
Use
OPTIMIZE FULLcon moderación. Resérvelo para después de cambiar las columnas de agrupación en clúster o cuando necesite un restablecimiento puntual de la calidad. - Supervise la calidad de la agrupación en clústeres comprobando las métricas de examen de consultas (archivos examinados frente a los archivos totales) en la interfaz de usuario de Spark o los planes de consulta.
- Combínelo con la optimización de escritura para cargas de trabajo de streaming y asegúrese de que cada microlote genere un número gestionable de archivos para la agrupación.