Use clusters líquidos para tabelas Delta

Importante

Delta Lake O líquido clustering está disponível em Public Preview no Databricks Runtime 13.3 e no acima. Existe algum suporte para o clustering líquido em Databricks Runtime 12.2 LTS e acima. Consulte Compatibilidade para tabelas com clustering líquido.

clusters líquidos do Delta Lake substituem o particionamento de tabelas e ZORDER para simplificar as decisões de provisão de dados e otimizar o desempenho query . clusters líquidos fornecem flexibilidade para redefinir key clusters sem reescrever os dados existentes, permitindo que a disposição dos dados evolua junto com as necessidades analíticas ao longo do tempo.

Aviso

O Databricks Runtime 13.3 LTS e acima é necessário para criar, gravar ou OPTIMIZE tabelas Delta com clusters líquidos habilitados.

Observação

Tabelas com clusters líquidos habilitados suportam simultaneidade em nível de linha no Databricks Runtime 13.3 LTS e acima. A simultaneidade ao nível da linha está geralmente disponível no Databricks Runtime 14.2 e acima para todas as tabelas com vetores de eliminação ativados. Consulte Níveis de isolamento e conflitos de gravação em Databricks.

Para que servem clusters líquidos?

Databricks recomenda clusters líquidos para todas as novas tabelas Delta. Veja a seguir exemplos de cenários que se beneficiam dos clusters:

  • As tabelas geralmente são filtradas por colunas de alta cardinalidade.

  • Tabelas com desvio significativo na distribuição de dados.

  • Tabelas que crescem rapidamente e exigem esforço de manutenção e ajuste.

  • Tabelas com requisitos de gravação concorrentes.

  • Tabelas com padrões de acesso que mudam com o tempo.

  • Tabelas em que uma key de partição típica pode deixar a tabela com muitas ou poucas partições.

Ativar clusters líquidos

O senhor pode ativar o liquid cluster em uma tabela existente ou durante a criação da tabela. O clustering não é compatível com particionamento ou ZORDER e exige que o cliente Databricks gerencie todas as operações de disposição e otimização dos dados em sua tabela. Uma vez ativado, execute OPTIMIZE Job normalmente para fazer o cluster de dados de forma incremental. Consulte Como acionar o clustering.

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

Observação

No Databricks Runtime 14.2 e acima, o senhor pode usar APIs DataFrame e DeltaTable API em Python ou Scala para habilitar clusters líquidos.

-- Create an empty table
CREATE TABLE table1(col0 int, col1 string) USING DELTA 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;
# 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.format("delta").clusterBy("col0").saveAsTable("table2")

# CTAS using DataFrameWriterV2
df = spark.read.table("table1")
df.writeTo("table1").using("delta").clusterBy("col0").create()
// 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.format("delta").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 o clustering líquido ativado têm vários recursos de tabela Delta ativados na criação e usam o gravador Delta versão 7 e o leitor versão 3. O senhor pode substituir a ativação de alguns desses recursos. Consulte Substituir default ativação do recurso (opcional).

Não é possível fazer downgrade das versões do protocolo de tabela, e as tabelas com clustering ativado não podem ser lidas por clientes Delta Lake que não suportam todos os recursos de tabela do protocolo de leitura Delta ativados. Consulte Como a Databricks gerencia a compatibilidade de recursos do Delta Lake?

No Databricks Runtime 13.3 LTS e acima, o senhor pode ativar clusters líquidos em uma tabela Delta existente e não particionada usando a seguinte sintaxe:

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

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

O senhor pode substituir o comportamento do site default que ativa o recurso de tabela Delta durante a ativação do clustering líquido. Isso impede que os protocolos de leitura e gravação associados a esses recursos de tabela sejam atualizados. O senhor deve ter uma tabela existente para concluir os seguintes passos:

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

    ALTER TABLE table_name SET TBLPROPERTIES ('delta.enableDeletionVectors' = false);
    
  2. Ative 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 o recurso Delta que o senhor pode substituir e como a ativação afeta a compatibilidade com as versões do Databricks Runtime.

Delta recurso

Runtime compatibilidade

Propriedade para substituir a habilitação

Impacto da incapacidade sobre o líquido clustering

Vetores de deleção

As leituras e gravações requerem Databricks Runtime 12.2 lTS e acima.

'delta.enableDeletionVectors' = false

A simultaneidade em nível de linha é desativada, tornando as transações e as operações de clustering mais propensas a entrar em conflito. Consulte Conflitos de gravação com simultaneidade em nível de linha.

DELETEMERGE, UPDATE e podem tornar a execução mais lenta.

Envio de linha

As gravações exigem Databricks Runtime 13.3 LTS e acima. Pode ser lido em qualquer versão do Databricks Runtime.

'delta.enableRowTracking' = false

A simultaneidade em nível de linha é desativada, tornando as transações e as operações de clustering mais propensas a entrar em conflito. Consulte Conflitos de gravação com simultaneidade em nível de linha.

Pontos de verificação V2

As leituras e gravações exigem o Databricks Runtime 13.3 LTS e o acima.

'delta.checkpointPolicy' = 'classic'

Nenhum impacto no líquido clustering comportamento.

Escolha as chaves clusters

Databricks recomenda escolher key clusters com base em filtros query comumente usados. key clusters pode ser definida em qualquer ordem. Se duas colunas estiverem correlacionadas, você só precisará adicionar uma delas como uma key clusters.

clustering é compatível com os seguintes tipos de dados para a chave clustering:

  • Data

  • Carimbo de data/hora

  • TimestampNTZ (requer Databricks Runtime 14.3 LTS ou acima)

  • String

  • Inteiro

  • Long

  • Curto

  • Flutuante

  • double

  • Decimal

  • Byte

  • Boolean

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

Técnica atual de otimização de dados

Recomendação para key clusters

Particionamento no estilo Hive

Use colunas de partição como key clusters.

indexação de Z-order

Use as colunas ZORDER BY como key clusters.

Particionamento no estilo Hive e ordem Z

Use colunas de partição e colunas ZORDER BY como key clusters.

Colunas geradas para reduzir a cardinalidade (por exemplo, data para um timestamp)

Use a coluna original como uma key clusters e não crie uma coluna gerada.

Gravar dados em uma tabela clusterizada

Você deve usar um cliente gravador Delta que suporte todos os recursos da tabela de protocolo de gravação Delta usados por clusters líquidos. No Databricks, você deve usar o Databricks Runtime 13.3 LTS e acima.

A maioria das operações não clusters dados automaticamente na gravação. As operações que clusters na gravação incluem o seguinte:

  • INSERT INTO operações

  • CTAS declarações

  • COPY INTO do formato Parquet

  • spark.write.format("delta").mode("append")

Observação

clusters na gravação é um aplicativo de melhor esforço e não é aplicado nas seguintes situações:

  • Se uma operação de gravação exceder 512 GB de dados.

  • Se a subconsulta SELECT contiver transformações, filtros ou join.

  • Se as colunas projetadas não forem iguais à tabela de origem.

Como nem todas as operações aplicam clusters líquidos, a Databricks recomenda executar OPTIMIZE frequentemente para garantir que todos os dados sejam clusterizados de forma eficiente.

Como acionar clusters

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

OPTIMIZE table_name;

clusters líquidos são incrementais, o que significa que os dados são reescritos apenas conforme necessário para acomodar os dados que precisam ser agrupados. Arquivos de dados com key clusters que não correspondem aos dados a serem agrupados não são regravados.

Para obter o melhor desempenho, o Databricks recomenda programar o Job OPTIMIZE regular para clusters dados. Para tabelas com muitas atualizações ou inserções, o Databricks recomenda programar um Job OPTIMIZE a cada uma ou duas horas. Como clusters líquidos são incrementais, a maioria dos OPTIMIZE Job para execução de tabelas clusterizadas é rápida.

Ler dados de uma tabela em cluster

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

SELECT * FROM table_name WHERE cluster_key_column_name = "some_value";

Alterar chaves clusters

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

ALTER TABLE table_name CLUSTER BY (new_column1, new_column2);

Quando você altera key clusters, OPTIMIZE subseqüentes e operações de gravação usam a nova abordagem clusters , mas os dados existentes não são regravados.

Você também pode desativar clusters definindo a key como NONE, como no exemplo a seguir:

ALTER TABLE table_name CLUSTER BY NONE;

Definir key clusters como NONE não reescreve os dados que já foram clusters , mas evita que futuras OPTIMIZE operações usem a keyclusters s.

Veja como a tabela é agrupada

Você pode usar comandos DESCRIBE para ver a key clusters de uma tabela, como nos exemplos a seguir:

DESCRIBE TABLE table_name;

DESCRIBE DETAIL table_name;

Compatibilidade para tabelas com clusterslíquidos

A Databricks recomenda a utilização do Databricks Runtime 13.3 LTS ou acima para todas as cargas de trabalho que leem ou escrevem a partir de tabelas com clusters líquidos ativados.

As tabelas criadas com clusters líquidos no Databricks Runtime 14.1 e acima usam pontos de verificação v2 por default. Você pode ler e escrever tabelas com pontos de verificação v2 no Databricks Runtime 13.3 LTS e acima.

O senhor pode desativar os pontos de verificação v2 e fazer o downgrade dos protocolos de tabela para ler tabelas com o líquido clustering em Databricks Runtime 12.2 LTS e acima. Consulte Drop Delta table recurso.

Limitações

Existem as seguintes limitações:

  • Você só pode especificar colunas com estatísticas coletadas para key clusters. Por default, as primeiras 32 colunas em uma tabela Delta possuem estatísticas coletadas.

  • Você pode especificar até 4 colunas como key clusters.

  • cargas de trabalho estruturadas de transmissão não suportam clusters-on-write.