Usar agrupamento líquido para tabelas

Liquid clustering é uma técnica de otimização de layout de dados que substitui o particionamento de tabelas e ZORDER. Ele simplifica o gerenciamento de tabelas e otimiza o desempenho da consulta organizando automaticamente os dados com base em chaves de clustering.

Ao contrário do particionamento tradicional, você pode redefinir chaves de cluster sem reescrever dados existentes. Isso permite que seu layout de dados evolua junto com as necessidades analíticas em mudança. O clustering líquido aplica-se tanto a tabelas de streaming como a visões materializadas.

Importante

O agrupamento líquido está disponível de forma geral para tabelas Delta Lake com o Databricks Runtime 15.4 LTS e posteriores, e em pré-visualização pública para tabelas Apache Iceberg com o Databricks Runtime 16.4 LTS e posteriores. A Databricks recomenda o uso do Databricks Runtime mais recente para obter o melhor desempenho.

As tabelas Apache Iceberg v3 geridas também suportam vetores de eliminação, rastreio de linhas, concorrência ao nível da linha e agrupamento líquido automático. Estas capacidades requerem Databricks Runtime 18.0 e superiores. Consulte Usar recursos do Apache Iceberg v3.

Quando usar aglomeração líquida

A Databricks recomenda o agrupamento líquido para todas as novas tabelas, incluindo tabelas de streaming e visualizações materializadas. Os seguintes cenários se beneficiam particularmente do clustering:

  • Consultas que filtram em colunas de alta cardinalidade.
  • Tabelas com grande desfasamento de dados.
  • Tabelas de rápido crescimento que exigem manutenção e esforço de otimização.
  • Tabelas com requisitos de escrita concorrentes.
  • Tabelas com padrões de acesso variados ou em mudança.
  • Tabelas onde uma chave de partição típica pode devolver resultados de partições demais ou de menos.

Habilitar agrupamento líquido

Pode ativar o liquid clustering numa tabela não particionada existente ou durante a criação da tabela. A aglomeração não é compatível com o particionamento ou ZORDER. A Databricks recomenda permitir que a plataforma gerencie todas as operações de layout e otimização de dados em sua tabela. Depois de ativar o liquid clustering, execute trabalhos OPTIMIZE para agrupar dados incrementalmente. Consulte Como acionar clustering.

Criar tabelas com agrupamento

Para habilitar o agrupamento líquido, adicione a CLUSTER BY frase a uma instrução de criação de tabela, como nos exemplos abaixo. No Databricks Runtime 14.3 LTS e versões posteriores, pode utilizar as APIs DataFrame e a API DeltaTable em Python ou Scala para ativar o liquid clustering nas tabelas Delta Lake.

SQL

Para criar uma tabela vazia com clustering:

CREATE TABLE table1 (col0 INT, col1 STRING) CLUSTER BY (col0);

Para criar uma tabela a partir de dados existentes com clustering, CLUSTER BY deve aparecer após o nome da tabela, não na SELECT cláusula:

CREATE TABLE table2 CLUSTER BY (col0)
AS SELECT * FROM table1;

Para copiar a estrutura da tabela, incluindo a respetiva configuração de clustering:

CREATE TABLE table3 LIKE table1;

Python

Para criar uma tabela vazia com clustering usando a DeltaTable API:

(DeltaTable.create()
  .tableName("table1")
  .addColumn("col0", dataType = "INT")
  .addColumn("col1", dataType = "STRING")
  .clusterBy("col0")
  .execute())

Para criar uma tabela a partir de um DataFrame existente:

df = spark.read.table("table1")
df.write.clusterBy("col0").saveAsTable("table2")

Para criar uma tabela usando a DataFrameWriterV2 API (disponível no Databricks Runtime 14.2 e superior):

df = spark.read.table("table1")
df.writeTo("table1").using("delta").clusterBy("col0").create()

Scala

Para criar uma tabela vazia com clustering usando a DeltaTable API:

DeltaTable.create()
  .tableName("table1")
  .addColumn("col0", dataType = "INT")
  .addColumn("col1", dataType = "STRING")
  .clusterBy("col0")
  .execute()

Para criar uma tabela a partir de um DataFrame existente:

val df = spark.read.table("table1")
df.write.clusterBy("col0").saveAsTable("table2")

Para criar uma tabela usando a DataFrameWriterV2 API (disponível no Databricks Runtime 14.2 e superior):

val df = spark.read.table("table1")
df.writeTo("table1").using("delta").clusterBy("col0").create()

Importante

Ao usar APIs DataFrame para definir chaves de clustering, apenas se pode especificar colunas de clustering durante a criação da tabela ou ao usar o modo overwrite (como em operações CREATE OR REPLACE TABLE). Não é possível alterar as chaves de cluster no modo append.

Para alterar chaves de clustering em uma tabela existente enquanto anexa dados, use comandos SQL ALTER TABLE para modificar a configuração de clustering separadamente de suas operações de gravação de dados. Ver Alterar chaves de agrupamento.

No Databricks Runtime 16.4 LTS e posteriores, pode criar tabelas com agrupamento líquido ativado através de operações de escrita do Structured Streaming, tal como nos exemplos seguintes:

SQL

CREATE TABLE table1 (
  col0 STRING,
  col1 DATE,
  col2 BIGINT
)
CLUSTER BY (col0, col1);

Python

(spark.readStream.table("source_table")
  .writeStream
  .clusterBy("column_name")
  .option("checkpointLocation", checkpointPath)
  .toTable("target_table")
)

Scala

spark.readStream.table("source_table")
  .writeStream
  .clusterBy("column_name")
  .option("checkpointLocation", checkpointPath)
  .toTable("target_table")

Warning

As tabelas do Delta Lake com agrupamento líquido ativado utilizam a versão 7 do gravador Delta e a versão 3 do leitor. Os clientes Delta que não suportam esses protocolos não podem ler essas tabelas. Não podes fazer downgrade das versões do protocolo de tabelas. Consulte Compatibilidade de recursos e protocolos do Delta Lake.

Para sobrepor a ativação predefinida de funcionalidades, como vetores de eliminação, consulte Sobrepor a ativação predefinida de funcionalidades (opcional).

Ativar em tabelas existentes

Para permitir o agrupamento de líquidos numa tabela Delta Lake não particionada existente, faça o seguinte:

ALTER TABLE <table_name>
CLUSTER BY (<clustering_columns>)

Para tabelas Apache Iceberg geridas, considere o seguinte:

  • Para tabelas com a especificação v2, deve desligar explicitamente os vetores de eliminação e o rastreio de linhas ao ativar o agrupamento de líquidos numa tabela existente.
  • Para tabelas com a especificação v3, não é necessário desligar estas funcionalidades porque vetores de eliminação e rastreamento de linhas são suportados. Consulte Usar recursos do Apache Iceberg v3.

Note

O comportamento padrão não aplica clustering a dados gravados anteriormente. Para forçar o reagrupamento, use OPTIMIZE FULL ou OPTIMIZE FULL WHERE <predicate>. Ver reagrupamento da Força.

Converta uma tabela particionada em agrupamento líquido

No Databricks Runtime 18.1 e versões posteriores, para converter uma tabela Delta Lake particionada existente para agrupamento líquido, utilize REPLACE PARTITIONED BY WITH CLUSTER BY numa instrução ALTER TABLE. A conversão minimiza o tempo de inatividade do leitor e do escritor e suporta tabelas externas e geridas. Após a conversão, a tabela suporta leituras com Databricks Runtime 13.3 LTS e superiores.

Note

Para tabelas Iceberg geridas, a conversão não é necessária porque estas tabelas usam definições de partição como chaves de agrupamento líquido. Executar o comando de conversão gera um erro.

As vantagens de converter tabelas particionadas em agrupamento líquido incluem:

  • Melhorias de desempenho para tabelas que sofrem de mau salto de dados ou sobre-particionamento.
  • Melhorias automáticas de desempenho, usando CLUSTER BY AUTO, para tabelas com padrões de consulta frequentemente mutáveis.
  • As colunas de agrupamento são flexíveis e fáceis de alterar, enquanto a partição é rígida e difícil de alterar.
  • Reduz os conflitos de escrita, porque as tabelas com clusterização líquida permitem a concorrência ao nível das linhas. Ver Concorrência a nível de linha.

Syntax

ALTER TABLE <table_name>
REPLACE PARTITIONED BY WITH CLUSTER BY [( <clustering_columns> ) | AUTO]

A CLUSTER BY cláusula suporta as seguintes opções:

  • ( <clustering_columns> ): Especifica novas colunas de agrupamento. O Databricks recomenda manter as novas colunas de agrupamento semelhantes às colunas de partição originais. Usar colunas muito diferentes desencadeia uma grande operação de reagrupamento logo na primeira OPTIMIZE execução.
  • AUTO: Utiliza as colunas de partição atuais como colunas iniciais de agrupamento e permite que a otimização preditiva se adapte ao longo do tempo. Disponível apenas para tabelas geridas pelo Unity Catalog. Consulte Agrupamento automático de líquidos.
  • Sem opções especificadas: Usa as colunas de partição atuais como as novas colunas de agrupamento.

Para orientações sobre como escolher chaves de clustering ao migrar de tabelas particionadas, veja Migrar de particionamento ou Z-order.

Examples

Para agrupar em colunas diferentes das partições originais, como para uma tabela particionada em (year, month, day), faça o seguinte:

ALTER TABLE t1 REPLACE PARTITIONED BY WITH CLUSTER BY (day, id);
OPTIMIZE t1;

Note

Para tirar partido da alteração das colunas de agrupamento, deve executar OPTIMIZE.

Para usar o agrupamento automático de líquidos e começar pelas colunas de partição atuais, faça o seguinte:

ALTER TABLE t2 REPLACE PARTITIONED BY WITH CLUSTER BY AUTO;

Para manter as colunas de partição atuais como colunas de agrupamento, faça o seguinte:

ALTER TABLE t3 REPLACE PARTITIONED BY WITH CLUSTER BY;

Lidar com leituras e escritas concorrentes durante a conversão

Após a conversão, o Databricks Runtime 13.3 LTS e versões superiores são suportados para operações de leitura e escrita. O Azure Databricks recomenda o Databricks Runtime 15.4 LTS ou superior para cargas de trabalho que leem dados da tabela ou escrevem dados na tabela durante a conversão.

Consulte a tabela seguinte para saber como lidar com cargas de trabalho de leitura e escrita concorrentes durante a conversão:

Tipo de carga de trabalho Leituras durante a conversão Escreve durante a conversão
Batch Sem tempo de descanso. Todas as versões do Databricks Runtime podem ler a tabela durante a conversão. Sem indisponibilidade no Databricks Runtime 15.4 e posterior.
Para Databricks Runtime 15.3 e inferiores, o Databricks recomenda que pause as cargas de trabalho antes de converter e depois reinicie as cargas após a conclusão da conversão.
Streaming Com rastreamento de esquemas e mapeamento de colunas: Reinicie o fluxo sem perder nenhum commit.
Sem controlo de esquema e mapeamento de colunas: O fluxo gera uma exceção. Reinicie com uma nova localização do ponto de controlo e a versão inicial. Os commits não se perdem.
Reinicia a transmissão sem perder nenhum commit.

Verificar ou reverter uma conversão

Para confirmar a conversão, execute DESCRIBE EXTENDED para ver as novas colunas de agrupamento. Executa DESCRIBE HISTORY para ver uma série de operações REORG, uma operação UPGRADE PROTOCOL e uma operação REPLACE PARTITIONED BY WITH CLUSTER BY.

Para reverter uma conversão, use RESTORE para voltar à versão anterior. Alternativamente, pode reescrever a tabela usando REPLACE TABLE ... PARTITIONED BY (...) AS SELECT * FROM ....

Para reverter usando RESTORE, execute os seguintes comandos:

ALTER TABLE my_table CLUSTER BY NONE;
ALTER TABLE my_table UNSET TBLPROPERTIES ('delta.liquid.hierarchicalClusteringColumns');
RESTORE TABLE my_table TO VERSION AS OF <version_number_before_conversion>;

Consulte RESTORE.

Converter uma tabela particionada por uma coluna de data/hora

Para converter uma tabela (t1) que é particionada por uma coluna de carimbo temporal (timestamp_col) e usar a coluna de carimbo temporal como chave de clustering, deve definir configurações adicionais:

SET spark.databricks.delta.liquidConversion.statsGeneration.enabled = false;
ALTER TABLE t1 REPLACE PARTITIONED BY WITH CLUSTER BY (timestamp_col, id);
ANALYZE TABLE t1 COMPUTE DELTA STATISTICS;

Se tentar converter uma coluna de partição de carimbo temporal numa coluna de clustering sem estas configurações, o comando gera um erro:

ALTER TABLE REPLACE PARTITIONED BY WITH CLUSTER BY cannot auto-generate stats on table with column event_ts due to unsupported type: timestamp. Disable stats auto-generation by setting 'spark.databricks.delta.liquidConversion.statsGeneration.enabled' to 'false' and retry the command again. SQLSTATE: 42000

Limitações de conversão

As seguintes limitações aplicam-se ao REPLACE PARTITIONED BY WITH CLUSTER BY comando de conversão:

  • Tabelas de streaming e visualizações materializadas criadas nos Lakeflow Spark Declarative Pipelines não são suportadas. Para usar o agrupamento líquido, deve atualizar a definição da canalização para usar CLUSTER BY em vez de PARTITIONED BY.
  • Tabelas que usam Delta Sharing com filtragem de partições não são suportadas. Para informações sobre filtragem de partições para Partilha Delta, consulte Especificar partições de tabela a partilhar.

Remover chaves de clusterização

Para remover chaves de agrupamento, use a seguinte sintaxe:

ALTER TABLE table_name CLUSTER BY NONE;

Escolher chaves de clustering

Escolha chaves de agrupamento com base nas colunas mais frequentemente usadas nos filtros de consulta. As teclas certas melhoram significativamente o salto de dados e o desempenho das consultas.

Sugestão

A Databricks recomenda a utilização da clusterização líquida automática para selecionar, de forma inteligente, chaves de clusterização com base nos seus padrões de consultas. Consulte Agrupamento automático de líquidos.

Principais orientações em matéria de seleção

Ao especificar manualmente as chaves de clustering, escolha colunas com base nas colunas usadas com mais freqüência nos filtros de consulta. Você pode definir chaves de clustering em qualquer ordem. Se duas colunas estiverem altamente correlacionadas, você só precisará incluir uma delas como uma chave de clustering.

Você pode especificar até quatro chaves de clustering. Para tabelas mais pequenas (menos de 10 TB), usar mais chaves de clustering pode degradar o desempenho ao filtrar numa única coluna. Por exemplo, filtrar com quatro teclas tem um desempenho pior do que filtrar com duas teclas. No entanto, à medida que o tamanho da tabela aumenta, essa diferença de desempenho torna-se insignificante para consultas de coluna única.

As chaves de agrupamento devem ser colunas com estatísticas coletadas. Por defeito, as tabelas Delta Lake recolhem estatísticas para as primeiras 32 colunas. Veja Especificar colunas de estatísticas.

Tipos de dados suportados

O agrupamento suporta estes tipos de dados para chaves de clustering:

  • Date
  • Carimbo de data/hora
  • TimestampNTZ (Databricks Runtime 14.3 LTS e versões superiores)
  • Cordão
  • Inteiro, Longo, Curto, Byte
  • Flutuador, Duplo, Decimal

Pode agrupar com base num StructField usando notação por pontos, como CLUSTER BY (struct_col.field). Campos de estruturas aninhadas são suportados até qualquer profundidade, como CLUSTER BY (struct_col.nested.field). O tipo de dado do campo deve ser um dos tipos suportados na lista anterior.

Não pode agrupar por nenhuma das seguintes opções:

  • Tipos complexos, como StructType, MapType, ou ArrayType
  • MapType e ArrayType elementos, como map_col['key'], array_col[0], ou map_col.key.

Migrando de particionamento ou ordem Z

Importante

A Databricks recomenda que utilize a conversão automática com o comando REPLACE PARTITIONED BY WITH CLUSTER BY. Veja Converter uma tabela particionada para agrupamento líquido.

Se você estiver convertendo uma tabela existente, considere as seguintes recomendações:

Técnica atual de otimização de dados Recomendação para chaves de agrupamento
Particionamento estilo colmeia Utilize colunas de partição como chaves de agrupamento.
Indexação de ordem Z Use as ZORDER BY colunas como chaves de agrupamento.
Particionamento estilo colmeia e ordem Z Utilize colunas de partição e ZORDER BY colunas como chaves de agrupamento.
Colunas geradas para reduzir a cardinalidade (por exemplo, data extraída de um carimbo de data/hora) Use a coluna original como uma chave de clustering e não crie uma coluna gerada.

Agrupamento automático de líquidos

No Databricks Runtime 15.4 LTS e superiores, pode ativar o clustering automático de líquidos para tabelas Delta Lake geridas pelo Unity Catalog. Para tabelas Apache Iceberg v3 geridas pelo Unity Catalog, o agrupamento líquido automático requer o Databricks Runtime 18.0 ou posterior. O agrupamento líquido automático permite que o Azure Databricks escolha de forma inteligente as chaves de agrupamento para otimizar o desempenho da consulta, usando a cláusula CLUSTER BY AUTO.

Note

O agrupamento automático de líquidos também é suportado para visualizações materializadas e tabelas de streaming, incluindo Lakeflow Spark Declarative Pipelines e pipelines independentes. Especifique CLUSTER BY AUTO na sua pipeline ou definição SQL.

Como funciona o agrupamento automático de líquidos

A agrupação automática de líquidos requer otimização preditiva para a seleção automática de chaves e operações de agrupamento, e funciona de forma assíncrona. Consulte Otimização preditiva para tabelas gerenciadas do Unity Catalog.

A clusterização automática de líquidos aplica otimizações inteligentes baseadas nos seus padrões de utilização:

  • Analisa a carga de trabalho de consulta: o Azure Databricks analisa a carga de trabalho de consulta histórica da tabela e identifica as melhores colunas candidatas para clustering.
  • Adapta-se às alterações: se os padrões de consulta ou as distribuições de dados mudarem ao longo do tempo, o cluster líquido automático selecionará novas chaves para otimizar o desempenho.
  • Seleção consciente de custos: Azure Databricks altera as chaves de clustering apenas quando as poupanças de custos previstas devido a melhorias de saltos de dados superam o custo de clusterização de dados.

O agrupamento automático de líquidos pode não selecionar chaves pelos seguintes motivos:

  • A tabela é demasiado pequena para beneficiar do agrupamento líquido.
  • A tabela já tem um esquema de agrupamento eficaz, seja a partir de chaves manuais anteriores ou ordem de inserção natural que corresponde aos padrões de consulta.
  • A tabela não tem consultas frequentes.
  • Não estás a usar Databricks Runtime 15.4 LTS ou superior.

Você pode aplicar clustering líquido automático a todas as tabelas geridas do Unity Catalog, independentemente das características dos dados e das consultas. A heurística decide se é rentável selecionar chaves de clustering.

Compatibilidade de Versões do Databricks Runtime

Você pode ler ou gravar tabelas com clustering automático ativado em todas as versões do Databricks Runtime que suportam liquid clustering. No entanto, a seleção inteligente de chaves depende de metadados introduzidos no Databricks Runtime 15.4 LTS.

Use o Databricks Runtime 15.4 LTS ou superior para garantir que as chaves selecionadas automaticamente beneficiem todas as suas cargas de trabalho e que essas cargas de trabalho sejam consideradas ao selecionar novas chaves.

Ativar ou desativar o agrupamento automático de líquidos

SQL

Para criar uma tabela com agrupamento automático de líquidos:

CREATE OR REPLACE TABLE table1 (column01 int, column02 string) CLUSTER BY AUTO;

Para permitir o agrupamento automático de líquidos numa tabela existente, incluindo tabelas com chaves especificadas manualmente:

ALTER TABLE table1 CLUSTER BY AUTO;

Para definir as dicas iniciais da coluna de agrupamento para seleção de chaves, defina as chaves de agrupamento e depois ative o agrupamento automático:

ALTER TABLE table1 CLUSTER BY (c1, c2);
ALTER TABLE table1 CLUSTER BY AUTO;

Em alternativa, use a API Python para definir dicas numa única operação.

Para desativar o agrupamento automático de líquidos:

ALTER TABLE table1 CLUSTER BY NONE;

Para desligar o agrupamento automático de líquidos e especificar colunas de agrupamento:

ALTER TABLE table1 CLUSTER BY (column01, column02);

Se uma tabela existente tiver ativada a agrupação automática de líquidos, a execução CREATE OR REPLACE table_name sem CLUSTER BY AUTO ela desliga a agrupação automática e não preserva as colunas de agrupamento. Para preservar o agrupamento automático de líquidos e quaisquer colunas previamente selecionadas, inclua CLUSTER BY AUTO na instrução replace. Com CLUSTER BY AUTO, a otimização preditiva utiliza a carga de trabalho histórica de consultas da tabela para identificar as melhores chaves de agrupamento.

Python

A API Python está disponível no Databricks Runtime 16.4 e superior. Só podes usar Python ao criar ou substituir uma tabela. Use SQL para alterar o clusterByAuto status de uma tabela existente.

Para criar uma tabela com agrupamento automático de líquidos usando DataFrameWriter:

df = spark.read.table("table1")
df.write
  .format("delta")
  .option("clusterByAuto", "true")
  .saveAsTable(...)

Para definir sugestões iniciais para colunas de agrupamento na seleção de chaves com DataFrameWriter:

df.write
  .format("delta")
  .clusterBy("clusteringColumn1", "clusteringColumn2")
  .option("clusterByAuto", "true")
  .saveAsTable(...)

Para criar uma tabela com agrupamento automático de líquidos usando DataFrameWriterV2:

df.writeTo(...).using("delta")
  .option("clusterByAuto", "true")
  .create()

Para definir sugestões iniciais da coluna de agrupamento para seleção de chave usando DataFrameWriterV2:

df.writeTo(...).using("delta")
  .clusterBy("clusteringColumn1", "clusteringColumn2")
  .option("clusterByAuto", "true")
  .create()

Para criar uma tabela de streaming com clustering automático de líquidos:

spark.readStream.table("source_table")
  .writeStream
  .option("clusterByAuto", "true")
  .option("checkpointLocation", checkpointPath)
  .toTable("target_table")

Para definir sugestões iniciais para colunas de agrupamento para a seleção de chaves numa tabela de transmissão em fluxo:

spark.readStream.table("source_table")
  .writeStream
  .clusterBy("column1", "column2")
  .option("clusterByAuto", "true")
  .option("checkpointLocation", checkpointPath)
  .toTable("target_table")

Quando utiliza .clusterBy para sugestões de seleção de chave de cluster juntamente com .option('clusterByAuto', 'true'), o comportamento é o seguinte:

  • Se isto definir o agrupamento automático de líquidos pela primeira vez, as colunas de agrupamento são definidas para as colunas especificadas em .clusterBy.
  • Se esta for uma tabela existente com o agrupamento líquido automático ativado, uma sugestão .clusterBy só é aceite uma vez. Por exemplo, as colunas especificadas por .clusterBy só são definidas se a tabela não tiver colunas de agrupamento definidas.

Importante

Ao usar as APIs DataFrame, a opção só pode ser definida ao utilizar o modo clusterByAuto. Não é possível definir clusterByAuto ao usar o modo append. Esta restrição é a mesma que ao definir manualmente as colunas de agrupamento. Só é possível configurar as definições de agrupamento durante operações de criação ou substituição de tabelas, utilizando o modo overwrite.

Como solução alternativa, se você quiser alterar o clusterByAuto status em uma tabela existente ao acrescentar dados, use comandos SQL ALTER TABLE para modificar a configuração de clustering separadamente de suas operações de gravação de dados.

Verificar se o clustering automático está ativado

Para verificar se uma tabela tem o agrupamento automático de líquidos habilitado, use DESCRIBE TABLE ou SHOW TBLPROPERTIES.

Se o agrupamento automático de líquidos estiver habilitado, a clusterByAuto propriedade será definida como true. A clusteringColumns propriedade mostra as colunas de clustering atuais que foram selecionadas automática ou manualmente.

Limitations

O agrupamento automático de líquidos não está disponível para tabelas geridas Apache Iceberg v2. É suportado para tabelas Apache Iceberg v3 geridas no Databricks Runtime 18.0 e versões posteriores.

Gravar dados em uma tabela clusterizada

Para escrever numa tabela Delta Lake clusterizada, deve usar um cliente Delta writer que suporte todas as funcionalidades da tabela de protocolo de escrita Delta usadas pelo cluster líquido. Para gravar numa tabela Iceberg clusterizada, pode-se usar a API de Catálogo REST do Unity Catalog. No Azure Databricks, você deve usar Databricks Runtime 13.3 LTS ou superior.

Operações que suportam aglomeração na gravação

As operações que se agrupam durante a escrita incluem o seguinte:

  • INSERT INTO operações
  • CTAS e RTAS declarações
  • COPY INTO a partir do formato Parquet
  • spark.write.mode("append")

Limites de tamanho para agrupamento

O clustering na gravação só é acionado quando os dados na transação atingem um limite de tamanho. Estes limiares variam consoante o número de colunas de agrupamento e são mais baixos para tabelas geridas pelo Catálogo Unity do que para outras tabelas Delta Lake.

Número de colunas de agrupamento Tamanho limite para tabelas gerenciadas do Unity Catalog Limite de tamanho para outras tabelas Delta Lake
1 64 MB 256MB
2 256MB 1 GB
3 512 MB 2 GB
4 1 GB 4 GB

Como nem todas as operações aplicam "liquid clustering", o Databricks recomenda a execução frequente de OPTIMIZE para garantir que todos os dados sejam agrupados de forma eficiente.

Cargas de trabalho de streaming

As cargas de trabalho de Streaming estruturado oferecem suporte a clustering na gravação quando você define a configuração spark.databricks.delta.liquid.eagerClustering.streaming.enabled do Spark como true. O clustering para essas cargas de trabalho só será acionado se pelo menos uma das últimas cinco atualizações de streaming exceder um limite de tamanho da tabela acima.

Como acionar o agrupamento

A otimização preditiva executa automaticamente comandos OPTIMIZE para tabelas ativadas. Consulte Otimização preditiva para tabelas gerenciadas do Unity Catalog. Ao usar a otimização preditiva, o Databricks recomenda desabilitar todos os trabalhos agendados OPTIMIZE .

Para acionar o clustering, você deve usar o Databricks Runtime 13.3 LTS ou superior. A Databricks recomenda o Databricks Runtime 17.3 LTS ou superior para um desempenho mais rápido OPTIMIZE em tabelas grandes. Use o OPTIMIZE comando na sua tabela:

OPTIMIZE table_name;

O agrupamento líquido é incremental, o que significa que OPTIMIZE reescreve dados apenas quando necessário, para acomodar dados que precisam de agrupamento. OPTIMIZE não reescreve ficheiros de dados com chaves de clustering que não correspondem aos dados que estão a ser agrupados. Ver reagrupamento da Força.

Se não estiver a usar otimização preditiva, a Databricks recomenda agendar trabalhos regulares OPTIMIZE para agrupar dados. Para tabelas com muitas atualizações ou inserções, o Databricks recomenda agendar uma OPTIMIZE tarefa a cada uma ou duas horas. Como o agrupamento de dados em estado líquido é incremental, a maioria dos trabalhos para tabelas clusterizadas é executada rapidamente.

Reagrupamento de forças

No Databricks Runtime 16.4 LTS e superiores, pode forçar o reagrupamento de todos os registos numa tabela com a seguinte sintaxe:

OPTIMIZE table_name FULL;

Importante

A execução do OPTIMIZE FULL reagrupa todos os dados existentes conforme necessário. Para tabelas grandes que não foram agrupadas anteriormente nas chaves especificadas, essa operação pode levar horas.

Execute OPTIMIZE FULL quando ativares a aglomeração pela primeira vez ou alterares as chaves de aglomeração. Se você já executou OPTIMIZE FULL e não houve nenhuma alteração nas chaves de clustering, OPTIMIZE FULL será executado da mesma forma que OPTIMIZE. Nesse cenário, OPTIMIZE usa uma abordagem incremental e regrava apenas arquivos que não foram compactados anteriormente. Sempre use OPTIMIZE FULL para garantir que o layout de dados reflita as chaves de cluster atuais.

Reagrupamento parcial

No Databricks Runtime 18.1 e superiores, pode forçar o reagrupamento de um subconjunto de registos usando OPTIMIZE FULL WHERE <predicate>. Um ficheiro é incluído se qualquer parte do seu intervalo se sobrepor ao predicado. Consulte Parâmetros.

OPTIMIZE events FULL WHERE event_date >= '2025-01-01';

Ler dados de uma tabela agrupada

Pode ler dados numa tabela Delta Lake agrupada usando qualquer cliente Delta Lake que suporte a leitura de vetores de eliminação. Usando a API do catálogo REST do Iceberg, você pode ler dados em uma tabela Iceberg clusterizada. O clustering líquido melhora o desempenho da consulta por meio do salto automático de dados ao filtrar chaves de clustering.

SELECT * FROM table_name WHERE cluster_key_column_name = "some_value";

Gerir chaves de clusterização

Veja como uma tabela é agrupada

Você pode usar DESCRIBE comandos para ver as chaves de clustering de uma tabela, como nos exemplos a seguir:

DESCRIBE TABLE table_name;

DESCRIBE DETAIL table_name;

Alterar chaves de agrupamento

Você pode alterar as chaves de clustering de uma tabela a qualquer momento executando um ALTER TABLE comando, como no exemplo a seguir:

ALTER TABLE table_name CLUSTER BY (new_column1, new_column2);

Quando se alteram as chaves de clustering, as operações subsequentes OPTIMIZE e de gravação utilizam a nova abordagem de clustering, mas os dados existentes não são reescritos. Para reescrever dados existentes com as chaves de clustering atualizadas, veja Forçar reagrupamento.

Você também pode desativar o clustering definindo as teclas como NONE, como no exemplo a seguir:

ALTER TABLE table_name CLUSTER BY NONE;

Definir chaves de cluster como NONE não reescreve dados clusterizados, mas impede que operações futuras OPTIMIZE usem chaves de clustering.

Utilizar agrupamento de líquidos a partir de um motor externo

Você pode habilitar o agrupamento de líquidos em tabelas Iceberg gerenciadas a partir de mecanismos Iceberg externos. Para habilitar o clustering líquido, especifique colunas de partição ao criar uma tabela. O Unity Catalog interpreta as partições como chaves de clustering. Por exemplo, execute o comando abaixo no OSS Spark:

CREATE OR REPLACE TABLE main.schema.icebergTable
PARTITIONED BY c1;

Para desligar o agrupamento de líquidos:

ALTER TABLE main.schema.icebergTable DROP PARTITION FIELD c2;

Para alterar chaves de agrupamento através da evolução das partições do Iceberg:

ALTER TABLE main.schema.icebergTable ADD PARTITION FIELD c2;

Se você especificar uma partição usando uma transformação de bucket, o Unity Catalog descartará a expressão e usará a coluna como uma chave de clustering:

CREATE OR REPLACE TABLE main.schema.icebergTable
PARTITIONED BY (bucket(c1, 10));

Compatibilidade para tabelas com agrupamento líquido

O liquid clustering usa recursos das tabelas Delta Lake que requerem versões específicas do Databricks Runtime para leitura e escrita. As tabelas criadas com agrupamento líquido no Databricks Runtime 14.3 LTS e posteriores utilizam o checkpoint V2 por defeito. Pode ler e escrever tabelas com o checkpoint V2 no Databricks Runtime 13.3 LTS e versões posteriores. Ver Checkpoint V2.

Para dar suporte a leitores que utilizam Databricks Runtime desde 12.2 LTS até 13.2, desative o checkpoint V2 e faça downgrade do protocolo de tabela. Consulte Downgrade para clássico.

Substituir a ativação de recurso padrão (opcional)

Pode substituir a ativação predefinida das funcionalidades da tabela Delta Lake ao ativar o Liquid Clustering. Isto impede atualizações dos protocolos de leitor e escritor associados a essas funcionalidades da tabela. Você deve ter uma tabela existente para concluir as seguintes etapas:

  1. Use ALTER TABLE para definir a propriedade da tabela que desliga uma ou mais funcionalidades. Por exemplo, para desligar os vetores de eliminação, execute o seguinte:

    ALTER TABLE table_name SET TBLPROPERTIES ('delta.enableDeletionVectors' = false);
    
  2. Ative o agrupamento líquido na tabela executando o seguinte:

    ALTER TABLE <table_name>
    CLUSTER BY (<clustering_columns>)
    

A tabela seguinte contém informações sobre as funcionalidades Delta que pode sobrescrever e como a habilitação afeta a compatibilidade com as versões do Databricks Runtime:

Recurso Delta Compatibilidade de tempo de execução Propriedade para substituir a habilitação Efeitos no agrupamento de líquidos se esta opção estiver desativada
Vetores de eliminação As leituras e gravações requerem o Databricks Runtime 12.2 LTS e superior. 'delta.enableDeletionVectors' = false Desativar os vetores de eliminação também desativa a concorrência ao nível da linha, tornando as transações e as operações de agrupamento mais propensas a conflitos. Ver Concorrência a nível de linha.
DELETE, MERGEe UPDATE os comandos podem ser executados mais lentamente.
Rastreamento de fila As gravações requerem o Databricks Runtime 13.3 LTS e superior. Pode ser lido a partir de qualquer versão do Databricks Runtime. 'delta.enableRowTracking' = false Desligar o rastreio de linhas também desativa a concorrência ao nível das linhas, tornando as transações e operações de clustering mais propensas a conflitos. Ver Concorrência a nível de linha.
Ponto de Verificação V2 As leituras e gravações requerem o Databricks Runtime 13.3 LTS e superior. 'delta.checkpointPolicy' = 'classic' Sem efeito no comportamento de agrupamento de líquidos. Ver Checkpoint V2.

Limitations

  • Databricks Runtime 15.1 e inferiores: O clustering na escrita não suporta consultas de origem que incluam filtros, joins ou agregações.
  • Databricks Runtime 15.4 LTS e inferiores: Não pode criar uma tabela com clustering líquido ativado usando uma escrita de Streaming Estruturado. Pode usar Structured Streaming para gravar dados numa tabela existente com o liquid clustering ativado.
  • Apache Iceberg v2: A concorrência ao nível das linhas não é suportada em tabelas geridas do Apache Iceberg v2 porque vetores de eliminação e rastreamento de linhas não são suportados.
    • A concorrência ao nível das linhas é suportada em tabelas Apache Iceberg v3 geridas porque a especificação v3 suporta vetores de eliminação e rastreamento de linhas. Consulte Usar recursos do Apache Iceberg v3.