Usar cluster líquido para tabelas Delta
Os clusters líquidos do Delta Lake substituem o particionamento de tabelas e ZORDER
para simplificar as decisões de layout de dados e otimizar o desempenho da consulta. Os clusters líquidos proporcionam flexibilidade para redefinir as chaves de clustering sem reescrever os dados existentes, permitindo que o layout dos dados evolua junto com as necessidades analíticas ao longo do tempo.
Importante
A Databricks recomenda o uso do Databricks Runtime 15.2 e superior para todas as tabelas com clustering líquido ativado. O suporte de pré-visualização pública com limitações está disponível no Databricks Runtime 13.3 LTS e superior.
Observação
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á disponível de forma geral 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 Databricks.
Para que são usados os clusters líquidos?
O Databricks recomenda os clusters líquidos para todas as novas tabelas Delta. Veja a seguir alguns exemplos de cenários que se beneficiam do clustering:
Tabelas normalmente filtradas por colunas de alta cardinalidade.
Tabelas com grande distorção na distribuição de dados.
Tabelas que crescem rapidamente e exigem manutenção e ações de ajuste.
Tabelas com requisitos de gravação concorrente.
Tabelas com padrões de acesso que mudam com o tempo.
Tabelas em que uma chave de partição típica poderia deixar a tabela com muitas ou poucas partições.
Ativar clusters líquidos
Você pode ativar 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 exige que você use o Databricks para gerenciar todas as operações de disposição e otimização dos dados em sua tabela. Depois que o clustering líquido estiver ativado, execute jobs OPTIMIZE
normalmente para agrupar dados de forma incremental. Consulte Como acionar o clustering.
Para habilitar os clusters líquidos, adicione a frase CLUSTER BY
a uma instrução para criação de tabela, como nos exemplos abaixo:
Observação
No Databricks Runtime 14.2 e acima, você pode usar as APIs DataFrame e DeltaTable em Python ou Scala para ativar o clustering líquido.
-- 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;
# 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()
// 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()
Em Databricks Runtime 16.0 e acima, o senhor pode criar tabelas com o clustering líquido ativado usando gravações de transmissão estruturada, como nos exemplos a seguir:
(spark.readStream.table("source_table")
.writeStream
.clusterBy("column_name")
.option("checkpointLocation", checkpointPath)
.toTable("target_table")
)
spark.readStream.table("source_table")
.writeStream
.clusterBy("column_name")
.option("checkpointLocation", checkpointPath)
.toTable("target_table")
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. Você pode substituir a ativação de alguns desses recursos. Consulte Substituir ativação de recurso padrão (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 do Delta Lake que não têm compatibilidade com todos os recursos de tabela do protocolo de leitura Delta ativados. Consulte Como o Databricks gerencia a compatibilidade de recursos do Delta Lake?.
Você pode ativar o clustering líquido em uma tabela Delta não particionada existente usando a seguinte sintaxe:
ALTER TABLE <table_name>
CLUSTER BY (<clustering_columns>)
Importante
O comportamento padrão não se aplica clustering aos dados gravados anteriormente. Para forçar o reclustamento de todos os registros, você deve usar OPTIMIZE FULL
. Consulte Force reclustering para todos os registros.
Substituir a ativação de recursos padrão (opcional)
Você pode substituir o comportamento padrão que ativa os recursos da 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. Você deve ter uma tabela existente para concluir as etapas a seguir:
Use
ALTER TABLE
para definir a propriedade da tabela que desativa 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);
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 os recursos Delta que você pode substituir e como a ativação afeta a compatibilidade com as versões do Databricks Runtime.
Recurso do Delta |
Compatibilidade de runtime |
Propriedade de substituir a ativação |
Impacto da desativação no clustering líquido |
---|---|---|---|
Vetores de exclusão |
Leituras e gravações requerem Databricks Runtime 12.2 LTS ou acima. |
|
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.
|
Acompanhamento de linha |
Gravações requerem Databricks Runtime 13.3 LTS ou superior. Pode ser lido de qualquer versão do Databricks Runtime. |
|
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 |
Leituras e gravações exigem o Databricks Runtime 13.3 LTS e superior. |
|
Nenhum impacto no comportamento do clustering líquido. |
Escolha as chaves de clustering
O Databricks recomenda escolher chaves de clustering com base em filtros de consulta comumente usados. As chaves de clustering podem ser definidas em qualquer ordem. Se houver duas colunas correlacionadas, basta adicionar uma delas como chave de clustering.
Você pode especificar até quatro colunas como chaves de clustering. Você só pode especificar colunas com estatísticas coletadas para chaves de clustering. Por padrão, as primeiras 32 colunas em uma tabela Delta têm estatísticas coletadas. Consulte Especificar colunas de estatísticas Delta.
O clustering dá suporte aos seguintes tipos de dados para keys de clustering:
Data
Carimbo de data/hora
TimestampNTZ (requer Databricks Runtime 14.3 LTS ou acima)
String
Integer
Long
Short
Float
Double
Decimal
Byte
Se você estiver convertendo uma tabela, considere as seguintes recomendações:
Técnica atual de otimização de dados |
Recomendação para chaves de clustering |
---|---|
Particionamento no estilo Hive |
Utilizar colunas de partição como chaves de cluster. |
indexação de Z-order |
Utilizar as colunas |
Particionamento no estilo Hive e Z-order |
Utilizar as colunas de partição e as colunas |
Colunas geradas para reduzir a cardinalidade (por exemplo, data para um registro de data e hora) |
Utilizar a coluna original como chave de clustering e não criar uma coluna gerada. |
Gravar dados em uma tabela de clusters
Você deve usar um cliente de gravação Delta que ofereça suporte a todos os recursos da tabela do protocolo de escrita Delta usados pelo liquid clustering. No Databricks, você deve usar o Databricks Runtime 13.3 LTS e acima.
As operações que realizam clustering na gravação incluem as seguintes:
INSERT INTO
operaçõesCTAS
eRTAS
declaraçõesCOPY INTO
do formato Parquetspark.write.mode("append")
As gravações de transmissão estruturada nunca acionam o 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 atendem a um limite de tamanho. Esses limites variam de acordo com o número de colunas de clustering e são mais baixos para tabelas gerenciadas pelo Unity Catalog do que para outras tabelas Delta.
Número de colunas de clustering |
Tamanho do limite para tabelas gerenciadas do Unity Catalog |
Tamanho limite para outras tabelas Delta |
---|---|---|
1 |
64 MB |
256 MB |
2 |
256 MB |
1 GB |
3 |
512 MB |
2 GB |
4 |
1 GB |
4 GB |
Como nem todas as operações aplicam clustering líquido, a Databricks recomenda a execução frequente de OPTIMIZE
para garantir que todos os dados sejam agrupados de forma eficiente.
Como acionar o clustering
A otimização preditiva executa automaticamente os comandos OPTIMIZE
para tabelas habilitadas. Consulte Otimização preditiva para tabelas gerenciadas do Unity Catalog.
Para acionar o clustering, 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;
Os clusters líquidos são progressivos, o que significa que os dados são reescritos apenas quando necessário para acomodar os dados que precisam ser colocados em clusters. Arquivos de dados com chaves de clustering que não correspondem aos dados a serem colocados em clusters não são reescritos.
Para ter o melhor desempenho, o Databricks recomenda programar jobs OPTIMIZE
regulares para clustering de dados. Para tabelas com muitas atualizações ou inserções, o Databricks recomenda agendar um job OPTIMIZE
a cada uma ou duas horas. Como os clusters líquidos são progressivos, a maioria dos jobs OPTIMIZE
para tabelas com clusters são executados rapidamente.
Forçar o reclustamento para todos os registros
Em Databricks Runtime 16.0 e acima, é possível forçar o reclustering de todos os registros em uma tabela com a seguinte sintaxe:
OPTIMIZE table_name FULL;
Importante
A execução do OPTIMIZE FULL
reagrupa todos os dados existentes conforme necessário. No caso de tabelas grandes que não tenham sido agrupadas anteriormente na chave especificada, essa operação pode levar horas.
execução OPTIMIZE FULL
quando o senhor ativar o clustering pela primeira vez ou alterar a chave clustering. Se o senhor tiver executado OPTIMIZE FULL
anteriormente e não tiver havido alteração na tecla clustering, OPTIMIZE FULL
executará o mesmo que OPTIMIZE
. Sempre use OPTIMIZE FULL
para garantir que a disposição dos dados reflita a chave clustering atual.
Leia dados de uma tabela com clusters
Você pode ler dados de uma tabela com clusters utilizando qualquer cliente Delta Lake que permita a leitura de vetores de exclusão. Para ter melhores resultados na consulta, inclua chaves de clustering nos 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 das tabelas quando quiser, basta executar um comando ALTER TABLE
, como no exemplo a seguir:
ALTER TABLE table_name CLUSTER BY (new_column1, new_column2);
Quando você altera as chaves de clustering, as operações OPTIMIZE
e de gravação subsequentes utilizam a nova abordagem de clustering, mas os dados existentes não são reescritos.
Você pode também desativar o clustering definindo as chaves como NONE
, como no exemplo a seguir:
ALTER TABLE table_name CLUSTER BY NONE;
Definir chaves de clustering como NONE
não regrava dados que já foram colocados em clusters, mas impede que futuras operações OPTIMIZE
utilizem chaves de clustering.
Veja como a tabela é colocada em clusters
Você pode utilizar comandos DESCRIBE
para ver as chaves de clustering da tabela, como nos exemplos a seguir:
DESCRIBE TABLE table_name;
DESCRIBE DETAIL table_name;
Compatibilidade para tabelas com liquid clustering
As tabelas criadas com liquid clustering no Databricks Runtime 14.1 e acima usam pontos de verificação v2 por padrão. Você pode ler e gravar tabelas com pontos de verificação v2 no Databricks Runtime 13.3 LTS e acima.
Você pode desativar checkpoints v2 e fazer downgrade dos protocolos de tabela para ler tabelas com liquid clustering no Databricks Runtime 12.2 LTS ou acima. Consulte Remover recursos de tabela Delta.
Limitações
Aplicam-se as seguintes limitações:
No Databricks Runtime 15.1 e versões inferiores, o clustering na gravação não é compatível com consultas de origem que incluam filtros, uniões ou agregações.
Cargas de trabalho de transmissão estruturada não permitem clustering na gravação.
Em Databricks Runtime 15.4 LTS e abaixo, o senhor não pode criar uma tabela com o líquido clustering ativado usando uma gravação de transmissão estruturada. O senhor pode usar a transmissão estruturada para gravar dados em uma tabela existente com o líquido clustering ativado.