Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O Liquid Clustering é uma estratégia flexível de layout de dados para tabelas Delta no Microsoft Fabric. Ele substitui o particionamento estático no estilo Hive e a manutenção manual do Z-Order por agrupamento declarativo e adaptável a mudanças. Você define em quais colunas aplicar o clustering, e o Fabric Spark Runtime gerencia automaticamente o layout físico dos dados.
Use este artigo para:
- Entenda como a clusterização líquida funciona e quando usá-la.
- Compare o clustering líquido ao particionamento e ao Z-Order.
- Configure o clustering em suas tabelas.
- Entenda o clustering líquido incremental (Runtime 2.0+).
- Ajuste o comportamento do clustering com as configurações de sessão.
O que é clusterização líquida?
O agrupamento líquido organiza os dados nos arquivos de uma tabela Delta para que linhas com valores semelhantes nas colunas de agrupamento fiquem agrupadas. O layout permite um salto de arquivos aprimorado durante a execução da consulta: quando uma consulta filtra por colunas de clustering, o mecanismo lê apenas os arquivos cujos intervalos de valores correspondem ao predicado, pulando os demais.
Ao contrário do particionamento, o agrupamento líquido:
- Não cria estruturas físicas de diretórios para cada valor de coluna.
- Não exige que você escolha colunas de clustering no momento da criação da tabela (elas podem ser alteradas posteriormente).
- Lida com colunas de alta cardinalidade sem criar possíveis pequenos problemas de arquivo de milhares de partições minúsculas.
- Aplica a otimização de layout durante
OPTIMIZE, não no momento da gravação.
Benefícios sobre particionamento e ordem Z
O clustering líquido oferece vantagens significativas em relação ao particionamento no estilo Hive e à Ordem Z em termos de flexibilidade, manutenção e manipulação de padrões de dados em evolução.
Comparado ao particionamento no estilo Hive
| Aspecto | Particionamento no estilo hive | Agrupamento de líquidos |
|---|---|---|
| Granularidade | Um diretório por valor distinto (ou combinação) | Intervalos de valores no nível do arquivo, sem diretórios |
| Alta cardinalidade | Cria milhares de pequenos arquivos/diretórios | Lida naturalmente; agrupa os dados em arquivos com o tamanho adequado |
| Alterações de coluna | Requer reescrita de tabela completa |
ALTER TABLE ... CLUSTER BY aplica-se no próximo OPTIMIZE |
| Caminho de gravação | A coluna de partição deve ser conhecida no momento da gravação | Qualquer coluna pode ser agrupada posteriormente |
| Problema de arquivo pequeno | Comum com streaming ou inserções frequentes | Gerenciado pela OPTIMIZE compactação |
Em comparação com Z-Order
| Aspecto | Ordem Z | Agrupamento de líquidos |
|---|---|---|
| Alterações de coluna | Deve ser executado novamente OPTIMIZE ZORDER BY (...) com novas colunas |
ALTER TABLE ... CLUSTER BY persiste a definição |
| Suporte incremental | Nenhum modo incremental; usar WHERE para limitar o escopo manualmente |
O modo incremental (Runtime 2.0+) processa apenas arquivos novos, alterados ou não íntegros automaticamente |
| Metadata | Nenhuma definição de coluna persistente | Colunas de clustering armazenadas em metadados de tabela |
| Layout de várias colunas | Curva Z-Order aplicada durante a otimização | Z-Order para uma coluna de clustering; curva de Hilbert para 2 ou mais colunas, proporcionando localidade de dados otimizada |
A clusterização líquida usa Z-Order para layouts de coluna única e a curva de Hilbert para duas ou mais colunas — uma melhoria em relação à Z-Order, que aplica apenas a curva Z-Order à clusterização multidimensional. O clustering líquido encapsula ambos os algoritmos em uma estrutura incremental com reconhecimento de metadados que reduz o custo de manutenção contínua.
Criar uma tabela líquida clusterizada
Defina colunas de clustering usando a cláusula CLUSTER BY ao criar a tabela:
-- 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);
Alterar colunas de clustering
Ao contrário do particionamento, você pode alterar colunas de clustering a qualquer momento sem reescrever dados:
-- Change clustering columns
ALTER TABLE sales CLUSTER BY (region, product_category);
-- Remove clustering (table becomes unclustered)
ALTER TABLE sales CLUSTER BY NONE;
Depois de alterar as colunas de clustering, o novo layout entra em vigor na próxima execução de OPTIMIZE. Os arquivos existentes mantêm seu layout anterior até que sejam reagrupados em cluster.
Aplicar agrupamento com OPTIMIZE
O clustering é aplicado durante o OPTIMIZE comando. Não é necessário especificar colunas na OPTIMIZE instrução, pois a definição de clustering é armazenada nos metadados da tabela:
-- 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;
Use OPTIMIZE FULL ao alterar as chaves de clustering e quiser recriar Z-Cubes que não estejam em conformidade com a estratégia de clustering atual. Um Cubo Z é a unidade lógica que o clustering líquido usa para agrupar arquivos que compartilham as mesmas colunas de clustering. Os dados são clusterizados em um único Cubo Z até que as chaves de cluster sejam alteradas ou a quantidade de dados exceda 100 GB.
Dica
A partir do Fabric Runtime 2.0, o Native execution engine dá suporte à execução OPTIMIZE em tabelas clusteradas líquidas, fornecendo 30 a 50% desempenho de clustering multidimensional mais rápido. Os runtimes anteriores retornam à execução regular nãocelerada do Spark.
Como funciona o agrupamento líquido
Quando você executa OPTIMIZE em uma tabela líquida clusterizada, acontece o seguinte:
-
Seleção de arquivos: O mecanismo seleciona os arquivos que precisam de agrupamento.
- No Runtime 2.0+ (estratégia de clustering incremental), apenas arquivos não clusterizados, com problemas, pequenos ou com vetores de exclusão são selecionados.
- No Runtime 1.3, todos os arquivos em cada Z-Cube menores que 100 GB são selecionados, independentemente de já estarem bem clusterizados.
- Empacotamento em recipientes: os arquivos selecionados são agrupados em recipientes visando a um tamanho ideal de arquivo de saída.
- Reparticionamento: os dados em cada compartimento são reparticionados usando uma curva de preenchimento de espaço (curva Hilbert para várias colunas, Z-Order para coluna única).
- Gravação de arquivos: Os dados reparticionados são gravados como novos arquivos com faixas de valores estreitas nas colunas de clustering.
- Atualização de metadados: o log Delta registra a substituição de arquivo, marcando novos arquivos com metadados de clustering.
O resultado são arquivos com intervalos de valor não sobrepostos (ou minimamente sobrepostos) em colunas de clustering, permitindo que o mecanismo ignore arquivos que não correspondem a predicados de consulta.
Caution
Fabric Runtime 1.3 (Delta 3.2): use clustering líquido com cuidado. Neste ambiente de execução, a clusterização líquida usa uma estratégia de reescrita completa do Z-Cube — todos os arquivos dentro de um Z-Cube são reescritos a cada execução. Um Cubo Z é preservado (ignorado) somente quando seu tamanho excede 100 GB. Para tabelas menores que 100 GB, a reescrita completa significa que cada OPTIMIZE execução reescreve todos os dados da tabela, mesmo quando os dados já estão bem clusterizados. Isso causa uma amplificação de gravação severa.
- Não use a compactação automática com clustering líquido no Runtime 1.3. Cada gatilho de compactação automática pode causar uma reescrita de tabela completa em vez de apenas agrupar os dados novos/alterados.
- Evite executar
OPTIMIZEapós cada operação de gravação. No Runtime 1.3, restrinja o clustering a execuções estratégicas e intencionais e aceite uma menor atualidade do clustering entre essas execuções.
O clustering líquido incremental, que elimina essa amplificação de gravação, só está disponível a partir do Fabric Runtime 2.0.
Agrupamento incremental líquido
A partir de Fabric Runtime 2.0 (Delta 4.1), a clusterização líquida usa uma estratégia incremental de clusterização por padrão. A estratégia incremental é uma melhoria significativa em relação ao comportamento de clustering padrão.
Importante
A clusterização líquida incremental só está disponível no Fabric Runtime 2.0 e em versões posteriores. Em runtimes anteriores, OPTIMIZE usa o comportamento padrão (reescrita completa), em que todos os arquivos dentro de um Z-Cube são reescritos em cada execução.
Por que a estratégia de clustering incremental importa
O algoritmo de clustering padrão reescreve todos os arquivos em um Z-Cube (até 100 GB) em cada OPTIMIZE execução, independentemente de já estarem bem clusterizados. Para uma tabela que recebe pequenos acréscimos, o custo de clustering cresce linearmente com o tamanho da tabela, não com a quantidade de novos dados.
O modo incremental resolve o problema de reescrita completa selecionando apenas os arquivos que realmente precisam de clustering:
- Arquivos não clusterizados: dados recém-gravados sem metadados de clusterização
- Arquivos pequenos: arquivos abaixo do limite de tamanho do arquivo de destino
- Arquivos com vetores de exclusão: arquivos com exclusões acumuladas que excedem o limite de limpeza
Arquivos já bem clusterizados e com tamanho apropriado são ignorados por completo.
Reagrupamento automático
O agrupamento líquido incremental inclui a detecção automática de sobreposição, conhecida como reagrupamento automático, para preservar a qualidade do agrupamento ao longo do tempo. À medida que novos dados chegam, isso pode criar sobreposição entre intervalos de valores nos arquivos, reduzindo a eficácia da omissão de dados. O reagrupamento automático detecta intervalos de valores sobrepostos entre arquivos e reagrupa seletivamente apenas os arquivos afetados.
A reclusterização automática ocorre automaticamente como parte de OPTIMIZE sempre que houver dados novos ou alterados para agrupamento. Não é necessária intervenção manual nem reclusterizações completas agendadas. A estratégia de agrupamento incremental mantém uma qualidade de agrupamento próxima da ideal à medida que os dados evoluem.
Voltar ao comportamento de reescrita total
Se você precisar desabilitar a estratégia de clustering incremental e usar o comportamento de reescrita completa, defina a seguinte configuração:
SET spark.microsoft.delta.optimize.clustering.strategy.incremental = FALSE;
OPTIMIZE sales;
Como alternativa, use OPTIMIZE FULL para uma reclusterização completa de uma só vez, sem alterar as configurações da sessão:
OPTIMIZE sales FULL;
Observação
A estratégia de agrupamento incremental permite intencionalmente um pequeno desvio da disposição teoricamente ideal para obter reduções significativas na amplificação de escrita. A execução OPTIMIZE FULL fecha essa lacuna recriando totalmente os Cubos Z para o ideal teórico, mas com um custo de gravação mais alto.
Referência de configuração
As configurações de sessão a seguir controlam o comportamento da clusterização líquida no Fabric Runtime 2.0+.
Agrupamento incremental
| Configuração | Tipo | Default | Descrição |
|---|---|---|---|
spark.microsoft.delta.optimize.clustering.strategy.incremental |
booleano | true |
Chave principal para agrupamento incremental. Quando true, OPTIMIZE processa apenas arquivos não clusterizados, com problemas, pequenos e com vetor de exclusão. Quando false, todos os arquivos para Z-Cubes com menos de 100 GB de tamanho são reescritos (comportamento padrão). |
spark.microsoft.delta.optimize.clustering.strategy.incremental.autoRecluster |
booleano | true |
Habilita a detecção automática e o reagrupamento de arquivos com intervalos de dados sobrepostos. Aplica-se somente quando o clustering incremental está habilitado. |
Ajuste automático de reclusterização
Essas configurações controlam a sensibilidade e o escopo do reagrupamento automático. As configurações padrão são adequadas para a maioria das cargas de trabalho. Ajuste-os somente quando precisar alterar o equilíbrio entre a qualidade do agrupamento e a amplificação de escrita.
| Configuração | Tipo | Default | Descrição |
|---|---|---|---|
spark.microsoft.delta.optimize.clustering.strategy.incremental.autoRecluster.minOffendingFiles |
int | 4 |
Número mínimo de arquivos sobrepostos necessários para disparar o reclustering. Valores mais baixos são reagrupados mais cedo (melhor desempenho nas consultas, maior custo de escrita). Deve ser ≥ 2. |
spark.microsoft.delta.optimize.clustering.strategy.incremental.autoRecluster.minOverlapThreshold |
Double | 0.75 |
Limiar da pontuação de sobreposição de dimensão para agrupamento. Pares de arquivos com pontuação acima deste valor são considerados sobrepostos. Deve estar no intervalo (0,25, 1,0]. Valores mais baixos são mais agressivos. |
Escolhendo colunas de clustering
Para obter melhores resultados, escolha colunas de clustering com base nos padrões de filtro de consulta mais comuns:
-
Escolha de 1 a 4 colunas que aparecem com frequência em
WHEREcláusulas. Mais colunas reduzem a eficácia da omissão de arquivos por coluna da curva de preenchimento espacial e aumentam o tempo necessário para clusterizar os dados. - Considere a cardinalidade da coluna. Colunas de baixa cardinalidade produzem menos intervalos de valores distintos, o que reduz o benefício do salto de arquivos quando combinadas com chaves de clustering de alta cardinalidade.
-
A ordem da coluna não afeta o clustering. A ordem das colunas especificadas depois de
CLUSTER BYnão afeta o agrupamento multidimensional resultante.
Tipos de coluna suportados
Nem todos os tipos de coluna podem ser usados como chaves de clustering. O mecanismo avalia o tipo de dados de cada coluna para determinar a qualificação.
Sempre elegíveis (tipos atômicos):
-
NumericType(ByteType,ShortType,IntegerType,LongType, ,FloatType,DoubleType,DecimalType) DateTypeTimestampTypeTimestampNTZTypeStringType
Qualificado condicionalmente:
Observação
Os tipos a seguir podem ser habilitados a partir do Fabric Spark Runtime 2.0 (Delta 4.1)
-
StructType: quandospark.microsoft.delta.clusteredTable.complexTypes.enabledestá habilitado, e todos os campos folha são tipos qualificados. -
ArrayType: quandospark.microsoft.delta.clusteredTable.complexTypes.enabledestá habilitado e o tipo de elemento é qualificado. -
MapType: quandospark.microsoft.delta.clusteredTable.complexTypes.enabledestiver habilitado e os tipos de chave e valor forem ordenáveis e elegíveis.
Não elegível:
BinaryTypeBooleanTypeNullType
Para os tipos elegíveis equivalentes usados nas estatísticas no nível do arquivo, consulte Ignorar arquivos — tipos de dados elegíveis.
Interação com outros recursos
| Característica | Behavior |
|---|---|
| Particionamento | Incompatível. Para fins de descarte de arquivos, recomenda-se o clustering líquido em vez do particionamento. |
| Ordem Z | Incompatível. Para fins de eliminação de arquivos, a clusterização líquida é recomendada em vez de Z-Order. |
| Otimização rápida | Compatível a partir do Runtime 2.0. Em runtimes anteriores, a otimização rápida não tem efeito sobre tabelas clusteradas líquidas. Durante OPTIMIZE, ignora o agrupamento quando não houver arquivos pequenos suficientes ou dados suficientes para produzir um arquivo de saída com um tamanho adequado. |
| Tamanho do arquivo de destino adaptável | Compatível. O tamanho-alvo do arquivo definido pela avaliação adaptável é usado como tamanho-alvo para o agrupamento. |
| Otimizar gravação | Compatível. Produz arquivos consolidados durante a gravação, que depois são agrupados durante OPTIMIZE. |
| Compactação automática | Não use com agrupamento líquido na versão 1.3 ou anterior do Runtime. Nesses ambientes de execução, cada acionamento da compactação automática reescreve todos os dados em Z-Cubes menores que 100 GB, causando grave amplificação de gravação. No Runtime 2.0 ou superior, a compactação automática é compatível: o clustering incremental garante que apenas arquivos novos ou com problemas sejam reescritos. A compactação automática cuida da consolidação de arquivos pequenos; OPTIMIZE cuida do layout de agrupamento. |
| Vetores de deleção | Arquivos que excedem o limite de linhas excluídas são selecionados para agrupamento, independentemente de seu status de agrupamento. |
| V-Order | Compatível. V-Order e a clusterização líquida operam em eixos diferentes (layout interno do arquivo vs. faixas de valores entre arquivos). Ambos podem ser aplicados juntos. |
Práticas recomendadas
-
Execute
OPTIMIZEregularmente após gravações em lote ou em um agendamento para tabelas de streaming, mas somente no Runtime 2.0+, em que a estratégia de clustering incremental torna as execuções frequentes baratas. No Runtime 1.3 e em versões anteriores, cada execução deOPTIMIZEreescreve todos os dados em Z-Cubes com menos de 100 GB, portanto as execuções devem ser deliberadas e infrequentes. -
Use
OPTIMIZE FULLcom moderação. Deixe isso para depois de alterar as colunas de clustering ou quando precisar de uma redefinição pontual da qualidade. - Monitore a qualidade do clustering verificando as métricas de varredura da consulta (arquivos varridos vs. total de arquivos) na interface do Spark ou nos planos de consulta.
- Use em conjunto com a otimização de gravação em cargas de trabalho de streaming para garantir que cada microlote produza um número gerenciável de arquivos para agrupamento.