Partilhar via


Usar agrupamento líquido para tabelas Delta

O cluster líquido Delta Lake substitui o particionamento de tabelas e ZORDER simplifica as decisões de layout de dados e otimiza o desempenho da consulta. O clustering líquido proporciona flexibilidade para redefinir chaves de clustering sem reescrever dados existentes, permitindo que o esquema de dados evolua juntamente com as necessidades analíticas ao longo do tempo.

Importante

O Databricks recomenda o uso do Databricks Runtime 15.2 e superior para todas as tabelas com clustering líquido habilitado. O suporte de visualização pública com limitações está disponível no Databricks Runtime 13.3 LTS e superior.

Nota

As tabelas com clustering líquido habilitado suportam simultaneidade em nível de linha no Databricks Runtime 13.3 LTS e superior. A simultaneidade em nível de linha está geralmente disponível no Databricks Runtime 14.2 e superior para todas as tabelas com vetores de exclusão habilitados. Consulte Níveis de isolamento e conflitos de gravação no Azure Databricks.

Para que serve o agrupamento de líquidos?

O Databricks recomenda o agrupamento líquido para todas as novas tabelas Delta. Seguem-se alguns exemplos de cenários que beneficiam do clustering:

  • Tabelas geralmente filtradas por colunas de cardinalidade elevada.
  • Tabelas com distorção significativa na distribuição de dados.
  • Mesas que aumentam rapidamente e exigem esforço de manutenção e ajuste.
  • Tabelas com requisitos de escrita simultânea.
  • Tabelas com padrões de acesso que se alteram ao longo do tempo.
  • Tabelas onde uma chave de partição típica pode deixar a tabela com muitas ou poucas partições.

Habilitar clustering líquido

Você pode habilitar o clustering líquido em uma tabela existente ou durante a criação da tabela. O clustering não é compatível com particionamento ou ZORDER, e requer que você use o Azure Databricks para gerenciar todas as operações de layout e otimização para dados em sua tabela. Depois que o clustering líquido estiver habilitado, execute OPTIMIZE trabalhos como de costume para agrupar dados incrementalmente. Consulte Como acionar clustering.

Para habilitar o agrupamento líquido, adicione a CLUSTER BY frase a uma instrução de criação de tabela, como nos exemplos abaixo:

Nota

No Databricks Runtime 14.2 e superior, você pode usar APIs DataFrame e API DeltaTable em Python ou Scala para habilitar clustering líquido.

SQL

-- Create an empty table
CREATE TABLE table1(col0 int, col1 string) CLUSTER BY (col0);

-- Using a CTAS statement
CREATE EXTERNAL TABLE table2 CLUSTER BY (col0)  -- specify clustering after table name, not in subquery
LOCATION 'table_location'
AS SELECT * FROM table1;

-- Using a LIKE statement to copy configurations
CREATE TABLE table3 LIKE table1;

Python

# Create an empty table
(DeltaTable.create()
  .tableName("table1")
  .addColumn("col0", dataType = "INT")
  .addColumn("col1", dataType = "STRING")
  .clusterBy("col0")
  .execute())

# Using a CTAS statement
df = spark.read.table("table1")
df.write.clusterBy("col0").saveAsTable("table2")

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

Scala

// Create an empty table
DeltaTable.create()
  .tableName("table1")
  .addColumn("col0", dataType = "INT")
  .addColumn("col1", dataType = "STRING")
  .clusterBy("col0")
  .execute()

// Using a CTAS statement
val df = spark.read.table("table1")
df.write.clusterBy("col0").saveAsTable("table2")

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

Aviso

As tabelas criadas com clustering líquido habilitado têm vários recursos de tabela Delta habilitados na criação e usam o gravador Delta versão 7 e leitor versão 3. Você pode substituir a ativação de alguns desses recursos. Consulte Substituir ativação de recurso padrão (opcional).

As versões de protocolo de tabela não podem ser rebaixadas e as tabelas com clustering habilitado não são legíveis por clientes Delta Lake que não suportam todos os recursos de tabela de protocolo de leitor Delta habilitados. Consulte Como o Azure Databricks gere a compatibilidade de funcionalidades do Delta Lake?.

Você pode habilitar o clustering líquido em uma tabela Delta não particionada existente usando a seguinte sintaxe:

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

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

Você pode substituir o comportamento padrão que habilita os recursos da tabela Delta durante a ativação do cluster líquido. Isso impede que os protocolos de leitor e gravador associados a esses recursos de tabela sejam atualizados. Você deve ter uma tabela existente para concluir as seguintes etapas:

  1. Use ALTER TABLE para definir a propriedade table que desabilita um ou mais recursos. Por exemplo, para desativar vetores de exclusão, execute o seguinte:

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

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

A tabela a seguir fornece informações sobre os recursos Delta que você pode substituir 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 Impacto da incapacidade no agrupamento de líquidos
Vetores de exclusão As leituras e gravações requerem o Databricks Runtime 12.2 lTS e superior. 'delta.enableDeletionVectors' = false A simultaneidade em nível de linha é desabilitada, tornando as transações e as operações de cluster mais propensas a conflitos. Consulte Conflitos de gravação com simultaneidade em nível de linha.

DELETE, MERGEe UPDATE os comandos podem ser executados mais lentamente.
Rastreamento de linha 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 A simultaneidade em nível de linha é desabilitada, tornando as transações e as operações de cluster mais propensas a conflitos. Consulte Conflitos de gravação com simultaneidade em nível de linha.
Pontos de verificação V2 As leituras e gravações requerem o Databricks Runtime 13.3 LTS e superior. 'delta.checkpointPolicy' = 'classic' Sem impacto no comportamento de agrupamento de líquidos.

Escolher chaves de clustering

O Databricks recomenda escolher chaves de clustering com base em filtros de consulta comumente usados. As chaves de agrupamento podem ser definidas em qualquer ordem. Se duas colunas estiverem correlacionadas, você só precisará adicionar uma delas como uma chave de clustering.

Pode especificar até 4 colunas como chaves de clustering. Só pode especificar colunas com estatísticas recolhidas para chaves de clustering. Por predefinição, as primeiras 32 colunas numa tabela Delta têm estatísticas recolhidas. Consulte Especificar colunas de estatísticas delta.

O clustering suporta os seguintes tipos de dados para chaves de clustering:

  • Date
  • Carimbo de Data/Hora
  • TimestampNTZ (requer Databricks Runtime 14.3 LTS ou superior)
  • String
  • Número inteiro
  • Longo
  • Curto
  • Float
  • Duplo
  • Decimal
  • Byte

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 clustering
Particionamento estilo colmeia Use colunas de partição como chaves de clustering.
Indexação de ordem Z Use as ZORDER BY colunas como chaves de clustering.
Particionamento estilo colmeia e ordem Z Use colunas de partição e ZORDER BY colunas como chaves de clustering.
Colunas geradas para reduzir a cardinalidade (por exemplo, data de um carimbo de data/hora) Use a coluna original como uma chave de clustering e não crie uma coluna gerada.

Gravar dados em uma tabela clusterizada

Você deve usar um cliente de gravador Delta que ofereça suporte a todos os recursos de tabela de protocolo de gravação Delta usados pelo cluster líquido. No Azure Databricks, você deve usar o Databricks Runtime 13.3 LTS e superior.

As operações que se agrupam na gravação incluem o seguinte:

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

As gravações de Streaming estruturado nunca acionam clustering na gravação. Aplicam-se limitações adicionais. Consulte Limitações.

O clustering na gravação só é acionado quando os dados na transação atingem um limite de tamanho. Esses limites variam de acordo com o número de colunas de clustering e são menores para tabelas gerenciadas do Unity Catalog do que outras tabelas Delta.

Número de colunas de agrupamento Tamanho limite para tabelas gerenciadas do Unity Catalog Tamanho do limite para outras tabelas Delta
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 clustering líquido, o Databricks recomenda a execução OPTIMIZE frequente para garantir que todos os dados sejam agrupados de forma eficiente.

Como acionar o clustering

A otimização preditiva executa OPTIMIZE automaticamente comandos para tabelas ativadas. Consulte Otimização preditiva para tabelas gerenciadas do Unity Catalog.

Para acionar o clustering, você deve usar o Databricks Runtime 13.3 LTS ou superior. Use o OPTIMIZE comando em sua tabela, como no exemplo a seguir:

OPTIMIZE table_name;

O clustering líquido é incremental, o que significa que os dados só são reescritos conforme necessário para acomodar os dados que precisam ser agrupados. Os arquivos de dados com chaves de clustering que não correspondem aos dados a serem agrupados não são regravados.

Para obter o melhor desempenho, o Databricks recomenda o agendamento de trabalhos regulares OPTIMIZE para dados de cluster. Para tabelas com muitas atualizações ou inserções, o Databricks recomenda agendar um OPTIMIZE trabalho a cada uma ou duas horas. Como o clustering líquido é incremental, a maioria dos trabalhos para tabelas clusterizadas é executada OPTIMIZE rapidamente.

Ler dados de uma tabela agrupada

Você pode ler dados em uma tabela clusterizada usando qualquer cliente Delta Lake que ofereça suporte a vetores de exclusão de leitura. Para obter melhores resultados de consulta, inclua chaves de clustering em seus filtros de consulta, como no exemplo a seguir:

SELECT * FROM table_name WHERE cluster_key_column_name = "some_value";

Alterar chaves de clustering

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 você altera chaves de clustering, as operações subsequentes OPTIMIZE e de gravação usam a nova abordagem de clustering, mas os dados existentes não são reescritos.

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 que já foram clusterizados, mas impede que operações futuras OPTIMIZE usem chaves de clustering.

Veja como a tabela está 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;

Compatibilidade para tabelas com agrupamento líquido

As tabelas criadas com clustering líquido no Databricks Runtime 14.1 e superior usam pontos de verificação v2 por padrão. Você pode ler e escrever tabelas com pontos de verificação v2 no Databricks Runtime 13.3 LTS e superior.

Você pode desabilitar os pontos de verificação v2 e os protocolos de tabela de downgrade para ler tabelas com clustering líquido no Databricks Runtime 12.2 LTS e superior. Consulte Recursos da tabela Drop Delta.

Limitações

As seguintes limitações existem:

  • No Databricks Runtime 15.1 e inferior, o clustering na gravação não oferece suporte a consultas de origem que incluem filtros, junções ou agregações.
  • As cargas de trabalho de Transmissão em Fluxo Estruturada não suportam clustering-on-write.
  • Não é possível criar uma tabela com clustering líquido habilitado usando uma gravação de Streaming Estruturado. Você pode usar o Streaming Estruturado para gravar dados em uma tabela existente com clustering líquido habilitado.