Usar clustering líquido para tabelas
clustering líquido é uma técnica de otimização de disposição de dados que substitui o particionamento de tabela e ZORDER. Simplifica o gerenciamento de tabelas e otimiza o desempenho das consultas, organizando automaticamente os dados com base em uma chave clustering .
Ao contrário do particionamento tradicional, você pode redefinir a chave clustering sem sobrescrever os dados existentes. Isso permite que sua disposição de dados evolua juntamente com as necessidades analíticas em constante mudança. clustering líquido se aplica tanto a tabelas de transmissão quanto a visões materializadas.
O cluster líquido está disponível de forma geral para tabelas Delta e em Versão Preliminar Pública para tabelas Apache Iceberg gerenciadas. Para tabelas Delta, o suporte de GA está disponível com o Databricks Runtime 15.2 e acima. A Databricks recomenda usar a versão mais recente do Databricks Runtime para o melhor desempenho. Para tabelas Apache Iceberg gerenciadas, Databricks Runtime 16.4 LTS ou superior é exigido.
As tabelas gerenciadas Apache Iceberg v3 também suportam vetores de exclusão, acompanhamento de linha, simultaneidade em nível de linha e clusters líquido automático. Essas funcionalidades exigem Databricks Runtime 18.0 e acima. Veja Usar recursos v3 do Apache Iceberg.
Quando usar clusteringlíquida
Databricks recomenda o uso clustering líquido para todas as novas tabelas, incluindo tabelas de transmissão e visões materializadas. Os seguintes cenários se beneficiam particularmente do clustering:
- Consultas que filtram colunas de alta cardinalidade.
- Tabelas com grande distorção de dados.
- Mesas de crescimento rápido que exigem manutenção e ajustes constantes.
- Tabelas com requisitos de gravação concorrente.
- Tabelas com padrões de acesso variados ou variáveis.
- Tabelas onde uma key de partição típica pode retornar resultados de um número excessivo ou insuficiente de partições.
Habilitar líquido clustering
Você pode habilitar clustering líquido em uma tabela não particionada existente ou durante a criação da tabela. O agrupamento não é compatível com o particionamento ou ZORDER. Databricks recomenda permitir que a plataforma gerencie todas as operações de otimização e organização dos dados em sua tabela. Após habilitar clustering líquido, execute OPTIMIZE Job para cluster dados incrementalmente. Consulte Como ativar clustering.
Criar tabelas com 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. No Databricks Runtime 14.2 e acima, você pode usar as APIs DataFrame e a API DeltaTable em Python ou Scala para habilitar o clustering líquido para tabelas Delta.
- SQL
- Python
- Scala
Para criar uma tabela vazia com agrupamento:
CREATE TABLE table1 (col0 INT, col1 STRING) CLUSTER BY (col0);
Para criar uma tabela a partir de dados existentes com clusters, CLUSTER BY deve aparecer após o nome da tabela, e não na cláusula SELECT:
CREATE TABLE table2 CLUSTER BY (col0)
AS SELECT * FROM table1;
Para copiar a estrutura de uma tabela, incluindo sua configuração de agrupamento:
CREATE TABLE table3 LIKE table1;
Para criar uma tabela vazia com clusterização usando a API DeltaTable:
(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 API DataFrameWriterV2 (disponível no Databricks Runtime 14.2 e acima):
df = spark.read.table("table1")
df.writeTo("table1").using("delta").clusterBy("col0").create()
Para criar uma tabela vazia com clusterização usando a API DeltaTable:
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 API DataFrameWriterV2 (disponível no Databricks Runtime 14.2 e acima):
val df = spark.read.table("table1")
df.writeTo("table1").using("delta").clusterBy("col0").create()
Ao usar APIs DataFrame para definir a chave clustering , você só pode especificar colunas clustering durante a criação da tabela ou ao usar o modo overwrite (como com operações CREATE OR REPLACE TABLE ). Não é possível alterar a chave clustering ao usar o modo append .
Para alterar a chave clustering em uma tabela existente enquanto adiciona dados, use o comando SQL ALTER TABLE para modificar a configuração clustering separadamente das suas operações de gravação de dados. Consulte Alterar chave clustering.
No Databricks Runtime 16.0 e versões superiores, você pode criar tabelas com clustering líquido habilitado usando gravações de transmissão estruturada. Databricks recomenda o uso Databricks Runtime 16.4 ou superior para obter o melhor desempenho, como nos exemplos a seguir:
- SQL
- Python
- Scala
CREATE TABLE table1 (
col0 STRING,
col1 DATE,
col2 BIGINT
)
CLUSTER BY (col0, col1);
(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")
As tabelas Delta com clustering líquido ativado usam o gravador Delta versão 7 e o leitor versão 3. Os clientes Delta que não suportam esses protocolos não podem ler essas tabelas. Não é possível fazer downgrade da versão do protocolo da tabela. Consulte a compatibilidade e os protocolos de recursosDelta Lake.
Para substituir a ativação default de recursos (como vetores de exclusão), consulte Substituir a ativação default de recursos (opcional).
Habilitar em tabelas existentes
Para ativar o clustering líquido em uma tabela Delta não particionada existente, faça o seguinte:
ALTER TABLE <table_name>
CLUSTER BY (<clustering_columns>)
Para tabelas gerenciadas do Apache Iceberg, considere o seguinte:
- Para tabelas com a especificação v2, é preciso desativar explicitamente os vetores de exclusão e o acompanhamento de linhas ao habilitar o clustering líquido em uma tabela existente.
- Para tabelas com a especificação v3, não é necessário desativar esses recursos porque os vetores de exclusão e o acompanhamento de linhas são suportados. Veja Usar recursos v3 do Apache Iceberg.
O comportamento default não aplica clustering a dados gravados anteriormente. Para forçar o reagrupamento, use OPTIMIZE FULL ou OPTIMIZE FULL WHERE <predicate>. Consulte Forçar reagrupamento.
Converter uma tabela particionada para clustering líquido
No Databricks Runtime 18.1 e acima, para converter uma tabela Delta Lake particionada existente em clustering líquido, use REPLACE PARTITIONED BY WITH CLUSTER BY em uma instrução ALTER TABLE. A conversão minimiza o tempo de inatividade do leitor e do gravador e oferece suporte a tabelas externas e gerenciadas. Após a conversão, a tabela oferece suporte a leituras com o Databricks Runtime 13.3 LTS e acima.
Para tabelas Iceberg gerenciadas, a conversão não é necessária porque essas tabelas usam definições de partição como chaves de clustering líquido. A execução do comando de conversão gera um erro.
Os benefícios da conversão de tabelas particionadas para cluster líquido incluem:
- Melhorias de desempenho para tabelas que sofrem com salto de dados insuficiente ou superparticionamento.
- Melhorias automáticas de desempenho, usando
CLUSTER BY AUTO, para tabelas com padrões de query que mudam com frequência. - Colunas de clusterização são flexíveis e fáceis de alterar, enquanto o particionamento é rígido e difícil de alterar.
- Conflitos de gravação reduzidos porque as tabelas com clustering líquido permitem simultaneidade em nível de linha. Consulte Simultaneidade em nível de linha.
Sintaxe
ALTER TABLE <table_name>
REPLACE PARTITIONED BY WITH CLUSTER BY [( <clustering_columns> ) | AUTO]
A cláusula CLUSTER BY oferece suporte às seguintes opções:
( <clustering_columns> ): Especifica novas colunas de clustering. A Databricks recomenda manter as novas colunas de cluster semelhantes às colunas de partição originais. O uso de colunas muito diferentes aciona uma grande operação de re-clusterização na primeira execuçãoOPTIMIZE.AUTO: Utiliza as colunas de partição atuais como as colunas de agrupamento iniciais e permite que a otimização preditiva se adapte ao longo do tempo. Disponível apenas para tabelas gerenciadas do Unity Catalog. Consulte clusters líquidos automáticos.- Nenhuma opção especificada : Utiliza as colunas de partição atuais como as novas colunas de agrupamento.
Para obter orientação sobre como escolher chaves de clustering ao migrar de tabelas particionadas, consulte Como migrar de particionamento ou Z-order.
Exemplos
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;
Para se beneficiar da alteração das colunas de clustering, você deve executar OPTIMIZE.
Para utilizar o clustering líquido automático e começar com as 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 gravações concorrentes durante a conversão
Após a conversão, o Databricks Runtime 13.3 LTS e acima é compatível com leituras e gravações. O Databricks recomenda o Databricks Runtime 15.4 LTS e superior para cargas de trabalho que leem ou gravam na tabela durante a conversão.
Consulte a seguinte tabela para saber como lidar com cargas de trabalho de leitura e gravação concorrentes durante a conversão:
Tipo de carga de trabalho | Lê durante a conversão | Gravações durante a conversão |
|---|---|---|
Batch | Sem tempo de inatividade. Todas as versões do Databricks Runtime podem ler a tabela durante a conversão. | Sem tempo de inatividade no Databricks Runtime 15.4 e acima. Para Databricks Runtime 15.3 e inferior, a Databricks recomenda que você pause as cargas de trabalho antes de converter e, em seguida, reinicie as cargas de trabalho depois que a conversão for concluída. |
Transmissão | Com acompanhamento de esquema e mapeamento de colunas : Reinicie a transmissão sem perder nenhum commit. Sem acompanhamento de esquema e mapeamento de colunas : A transmissão gera uma exceção. Para reiniciar com uma nova localização de ponto de verificação e versão inicial. Commits não estão perdidos. | Reiniciar a transmissão sem perder commits. |
Verificar ou reverter uma conversão
Para confirmar a conversão, execute DESCRIBE EXTENDED para ver as novas colunas de clustering. Execute DESCRIBE HISTORY para ver uma série de operações de REORG, uma operação de UPGRADE PROTOCOL e uma operação de REPLACE PARTITIONED BY WITH CLUSTER BY.
Para reverter uma conversão, use RESTORE para retornar à versão anterior. Alternativamente, você pode reescrever a tabela utilizando REPLACE TABLE ... PARTITIONED BY (...) AS SELECT * FROM ....
Para reverter usando RESTORE, execute os comandos a seguir:
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>;
See RESTORE.
Converter uma tabela particionada por uma coluna de timestamp
Para converter uma tabela (t1) que é particionada por uma coluna de timestamp (timestamp_col) e usar a coluna de timestamp como uma chave de agrupamento, você 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 você tentar converter uma coluna de partição de timestamp em uma coluna de agrupamento sem essas 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
Aplicam-se as seguintes limitações ao comando REPLACE PARTITIONED BY WITH CLUSTER BY de conversão:
- Tabelas de transmissão e views materializadas criadas a partir de um pipeline de Lakeflow Spark Declarative Pipelines não são suportadas. Para usar o cluster líquido, é necessário atualizar a definição do pipeline para usar
CLUSTER BYem vez dePARTITIONED BY. - Tabelas que utilizam Delta Sharing com filtragem de partição não são compatíveis. Para obter informações sobre filtragem de partição para Delta Sharing, consulte Especificar partições de tabela para compartilhar.
Remover chave clustering
Para remover a chave clustering, use a seguinte sintaxe:
ALTER TABLE table_name CLUSTER BY NONE;
Escolha a tecla clustering
Databricks recomenda o uso clustering líquido automático para tabelas compatíveis, que seleciona de forma inteligente a chave clustering com base nos seus padrões de consulta. Veja clusteringautomático de líquidos.
diretrizes de seleção principais
Ao especificar manualmente a chave clustering , escolha as colunas com base nas colunas mais frequentemente usadas nos filtros de consulta. Você pode definir a chave clustering em qualquer ordem. Se duas colunas estiverem altamente correlacionadas, você só precisa incluir uma delas como key clustering .
Você pode especificar até quatro chaves clustering . Para tabelas menores (menos de 10 TB), usar mais chaves clustering pode degradar o desempenho ao filtrar em uma única coluna. Por exemplo, a filtragem com quatro chaves tem um desempenho pior do que a filtragem com duas chaves. No entanto, à medida que o tamanho da tabela aumenta, essa diferença de desempenho torna-se insignificante para consultas de coluna única.
A chave de agrupamento deve ser composta por colunas que contenham estatísticas coletadas. Por default, as estatísticas são coletadas nas primeiras 32 colunas de uma tabela Delta . Consulte Especificar colunas de estatísticas.
Tipos de dados suportados
O agrupamento suporta estes tipos de dados para a chave clustering :
- Data
- Carimbo de data/hora
- TimestampNTZ (Databricks Runtime 14.3 LTS e versões superiores)
- String
- Inteiro, Longo, Curto, Byte
- Número de ponto flutuante, número de ponto flutuante duplo, decimal
Migrando de particionamento ou Z-order
A Databricks recomenda usar a conversão automática com o comando REPLACE PARTITIONED BY WITH CLUSTER BY. Consulte Converter uma tabela particionada para clustering 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 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) | Use a coluna original como clustering key, e não crie uma coluna gerada. |
Líquido automático clustering
No Databricks Runtime 15.4 LTS e acima, é possível habilitar o clustering líquido automático para tabelas Delta gerenciadas pelo Unity Catalog. Para tabelas Apache Iceberg v3 gerenciadas pelo Unity Catalog, o clustering líquido automático requer Databricks Runtime 18.0 e acima. O liquid clustering automático permite ao Databricks escolher inteligentemente chaves de clustering para otimizar o desempenho da consulta, utilizando a cláusula CLUSTER BY AUTO.
O clustering líquido automático também é suportado para visualizações materializadas e tabelas de transmissão, incluindo LakeFlow Spark Declarative Pipelines e pipelines autônomos. Especifique CLUSTER BY AUTO em sua definição de pipeline ou SQL.
Como funciona o clustering automático de líquidos
clustering automático de líquidos proporciona otimização inteligente com base nos seus padrões de utilização:
- Requer otimização preditiva : seleção automática key e execução de operações clustering de forma assíncrona como operações de manutenção. Consulte Otimização preditiva para Unity Catalog gerenciar tabelas.
- Analisa a carga de trabalho de consultas : Databricks analisa o histórico de carga de trabalho de consultas da tabela e identifica as melhores colunas candidatas para clustering.
- Adapta-se às mudanças : Se os seus padrões de consulta ou distribuições de dados mudarem ao longo do tempo, clustering líquido automático seleciona uma nova chave para otimizar o desempenho.
- Seleção com foco em custos : Databricks altera a chave clustering somente quando a economia de custos prevista com as melhorias no descarte de dados supera o custo do clustering de dados.
clustering automático de líquidos pode não selecionar a chave pelos seguintes motivos:
- A tabela é muito pequena para se beneficiar do clustering líquido.
- A tabela já possui um esquema clustering eficaz, seja por meio de chave manual anterior ou por ordem de inserção natural que corresponde aos padrões de consulta.
- A tabela não tem consultas frequentes.
- O senhor não está usando Databricks Runtime 15.4 LTS ou acima.
Você pode aplicar clustering líquido automático a todas as tabelas Unity Catalog , independentemente das características dos dados e da consulta. A heurística decide se é economicamente vantajoso selecionar a chave de clustering .
Compatibilidade de versão do Databricks Runtime
Você pode ler ou gravar tabelas com clustering automático ativado em todas as versões Databricks Runtime que suportam clustering líquido. No entanto, a seleção inteligente key depende dos metadados introduzidos no Databricks Runtime 15.4 LTS.
Utilize Databricks Runtime 15.4 LTS ou superior para garantir que a chave selecionada automaticamente beneficie todas as suas cargas de trabalho e que essas cargas de trabalho sejam consideradas ao selecionar uma nova chave.
Ativar ou desativar clusteringautomático de líquidos
- SQL
- Python
Para criar uma tabela com liquid clustering automático:
CREATE OR REPLACE TABLE table1 (column01 int, column02 string) CLUSTER BY AUTO;
Para ativar o liquid clustering automático em uma tabela existente, incluindo tabelas com chaves especificadas manualmente:
ALTER TABLE table1 CLUSTER BY AUTO;
SQL não oferece suporte a dicas de coluna de clustering inicial ao ativar o clustering líquido automático. Para fornecer dicas para a seleção inicial de chaves, use a API do Python.
Para desativar a clusterização líquida automática:
ALTER TABLE table1 CLUSTER BY NONE;
Para desativar a clusterização líquida automática e especificar as colunas de clusterização:
ALTER TABLE table1 CLUSTER BY (column01, column02);
Se uma tabela existente tiver o clustering líquido automático ativado, executar CREATE OR REPLACE table_name sem CLUSTER BY AUTO desativa o clustering automático e não preserva as colunas de clustering. Para preservar o liquid clustering automático e quaisquer colunas selecionadas anteriormente, inclua CLUSTER BY AUTO na instrução de substituição. Com CLUSTER BY AUTO, a otimização preditiva usa a carga de trabalho de consulta histórica da tabela para identificar as melhores chaves de clustering.
A API Python está disponível no Databricks Runtime 16.4 e acima. Você pode usar Python apenas ao criar ou substituir uma tabela. Use SQL para alterar o status clusterByAuto de uma tabela existente.
Para criar uma tabela com cluster líquido automático usando DataFrameWriter:
df = spark.read.table("table1")
df.write
.format("delta")
.option("clusterByAuto", "true")
.saveAsTable(...)
Para fornecer dicas de colunas de agrupamento iniciais para seleção de chave usando DataFrameWriter:
df.write
.format("delta")
.clusterBy("clusteringColumn1", "clusteringColumn2")
.option("clusterByAuto", "true")
.saveAsTable(...)
Para criar uma tabela com cluster líquido automático usando DataFrameWriterV2:
df.writeTo(...).using("delta")
.option("clusterByAuto", "true")
.create()
Para fornecer dicas de colunas de agrupamento iniciais para seleção de chave usando DataFrameWriterV2:
df.writeTo(...).using("delta")
.clusterBy("clusteringColumn1", "clusteringColumn2")
.option("clusterByAuto", "true")
.create()
Para criar uma tabela de transmissão com clustering líquido automático:
spark.readStream.table("source_table")
.writeStream
.option("clusterByAuto", "true")
.option("checkpointLocation", checkpointPath)
.toTable("target_table")
Para fornecer sugestões iniciais de coluna de cluster para seleção de key em uma tabela de transmissão:
spark.readStream.table("source_table")
.writeStream
.clusterBy("column1", "column2")
.option("clusterByAuto", "true")
.option("checkpointLocation", checkpointPath)
.toTable("target_table")
Quando você usa .clusterBy para dicas de seleção de chave de cluster juntamente com .option('clusterByAuto', 'true'), o comportamento é o seguinte:
- Se isso configurar o liquid clustering automático pela primeira vez, as colunas de clustering são definidas como as colunas especificadas em
.clusterBy. - Se esta for uma tabela existente com clustering líquido automático ativado, uma dica
.clusterByé aceita apenas uma vez. Por exemplo, as colunas especificadas por.clusterBysão definidas apenas se a tabela não tiver colunas de clustering definidas.
Ao usar as APIs do DataFrame, a opção clusterByAuto só pode ser definida ao usar o modo overwrite. Não é possível definir clusterByAuto ao usar o modo append. Esta restrição é a mesma de quando se definem colunas de clusters manualmente. Você só pode configurar as configurações de clustering durante a criação da tabela ou operações de substituição usando o modo overwrite.
Como solução alternativa, se você quiser alterar o status clusterByAuto em uma tabela existente enquanto adiciona uso de dados SQL ALTER TABLE comando para modificar a configuração 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 clustering líquido automático ativado, use DESCRIBE TABLE ou SHOW TBLPROPERTIES.
Se o líquido automático clustering estiver ativado, a propriedade clusterByAuto será definida como true. A propriedade clusteringColumns mostra as colunas de clustering atuais que foram selecionadas automática ou manualmente.
Limitações
O cluster líquido automático não está disponível para tabelas Apache Iceberg v2 gerenciadas. Tem suporte para tabelas Apache Iceberg v3 gerenciadas no Databricks Runtime 18.0 e acima.
Gravar dados em uma tabela em cluster
Para gravar em uma tabela Delta em cluster, é necessário utilizar um cliente gravador Delta que suporte todos os recursos da tabela de protocolo de gravação Delta utilizados pelo liquid clustering. Para gravar em uma tabela Iceberg em cluster, é possível utilizar a API REST do Catálogo Iceberg do Unity Catalog. Em Databricks, é necessário utilizar Databricks Runtime 13.3 LTS e acima.
operações que suportam clustering em gravação
As operações que se agrupam na gravação incluem o seguinte:
INSERT INTOoperaçõesCTASeRTASdeclaraçõesCOPY INTOdo formato Parquetspark.write.mode("append")
Limite de tamanho para clustering
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.
transmitir cargas de trabalho
spark.databricks.delta.liquid.eagerClustering.streaming.enabled As cargas de trabalho de transmissão estruturada suportam o recurso “ clustering ” (exclusão ao escrever) quando você define a configuração “ Spark ” (exclusão ao escrever) em “ true”. O agrupamento para essas cargas de trabalho só é acionado se pelo menos uma das últimas cinco atualizações de transmissão exceder um limite de tamanho da tabela acima.
Como acionar o clustering
Otimização preditiva executada automaticamente OPTIMIZE comando para tabelas habilitadas. Consulte Otimização preditiva para Unity Catalog gerenciar tabelas. Ao usar a otimização preditiva, o site Databricks recomenda desativar qualquer trabalho agendado do OPTIMIZE.
Para ativar clustering, você precisa usar Databricks Runtime 13.3 LTS ou superior. Databricks recomenda Databricks Runtime 17.2 ou superior para um desempenho OPTIMIZE mais rápido em tabelas grandes. Use o comando OPTIMIZE na sua tabela:
OPTIMIZE table_name;
clustering líquido é incremental , o que significa que OPTIMIZE apenas reescreve os dados conforme necessário para acomodar os dados que precisam clustering. OPTIMIZE não reescreve arquivos de dados com chave clustering que não correspondem aos dados que estão sendo agrupados. Consulte Forçar reagrupamento.
Se o senhor não estiver usando a otimização preditiva, o site Databricks recomenda programar regularmente o OPTIMIZE Job para clusterizar os dados. Para tabelas com muitas atualizações ou inserções, o site Databricks recomenda programar um Job OPTIMIZE a cada uma ou duas horas. Como o clustering líquido é incremental, a maioria dos OPTIMIZE Job para tabelas em cluster é executada rapidamente.
Reagrupamento forçado
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;
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 você habilita clustering pela primeira vez ou altera a chave clustering . Se você já executou OPTIMIZE FULL anteriormente e não houve alteração na chave clustering , a execução OPTIMIZE FULL é a mesma que a de OPTIMIZE. Neste cenário, OPTIMIZE usa uma abordagem incremental e reescreve apenas os arquivos que não foram compactados anteriormente. Use sempre OPTIMIZE FULL para garantir que a disposição dos dados reflita a chave de clustering atual.
Reagrupamento parcial
No Databricks Runtime 18.1 e versões superiores, você pode forçar o reagrupamento de um subconjunto de registros usando OPTIMIZE FULL WHERE <predicate>. Um arquivo é incluído se qualquer parte de seu intervalo se sobrepuser ao predicado. Consulte os parâmetros.
OPTIMIZE events FULL WHERE event_date >= '2025-01-01';
Leia dados de uma tabela em cluster
Você pode ler dados em uma tabela Delta agrupada usando qualquer cliente Delta Lake que suporte a leitura de vetores de exclusão. Utilizando a API REST Catalog do Iceberg, você pode ler dados em uma tabela clusterizada do Iceberg. clustering líquido melhora o desempenho das consultas através da omissão automática de dados ao filtrar pela chave de clustering .
SELECT * FROM table_name WHERE cluster_key_column_name = "some_value";
gerenciar chave clustering
Veja como uma tabela é agrupada.
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;
Alterar a chave 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);
Ao alterar a chave clustering , as operações subsequentes de OPTIMIZE e de gravação usarão a nova abordagem clustering , mas os dados existentes não serão reescritos. Para reescrever os dados existentes com a chave clustering atualizada, consulte Forçar reagrupamento.
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 a chave cluster como NONE não reescreve os dados agrupados, mas impede que futuras operações OPTIMIZE usem a chave clustering .
Utilize clustering de líquidos a partir de um mecanismo externo.
O senhor pode ativar o clustering líquido para gerenciar tabelas do Iceberg a partir de mecanismos externos do Iceberg. Para ativar o clustering líquido, especifique colunas de partição ao criar uma tabela. Unity Catalog interpreta as partições como clustering key. Por exemplo, executar o comando abaixo no OSS Spark:
CREATE OR REPLACE TABLE main.schema.icebergTable
PARTITIONED BY c1;
Para desativar clustering de líquidos:
ALTER TABLE main.schema.icebergTable DROP PARTITION FIELD c2;
Para alterar a chave clustering usando a evolução da partição Iceberg :
ALTER TABLE main.schema.icebergTable ADD PARTITION FIELD c2;
Se você especificar uma partição usando uma transformação de bucket, Unity Catalog descarta a expressão e usa a coluna como key clustering :
CREATE OR REPLACE TABLE main.schema.icebergTable
PARTITIONED BY (bucket(c1, 10));
Compatibilidade para tabelas com clustering líquido
O cluster líquido utiliza recursos de tabelas Delta que exigem versões específicas do Databricks Runtime para leitura e gravação. As tabelas criadas com liquid clustering no Databricks Runtime 14.1 e acima usam o checkpoint V2 por padrão. Você pode ler e gravar tabelas com pontos de verificação V2 no Databricks Runtime 13.3 LTS e acima. Consulte Ponto de Verificação V2.
Para dar suporte a leitores que utilizam o Databricks Runtime 12.2 LTS a 13.2, desative o checkpoint V2 e faça o downgrade do protocolo da tabela. Veja Fazer downgrade para a versão clássica.
Substituir default recurso enablement (opcional)
Você pode substituir a ativação default do recurso da tabela Delta durante a ativação clustering líquido. Isso impede atualizações dos protocolos de leitura e gravação associados a esses recursos de tabela. Você precisa ter uma tabela existente para concluir os seguintes passos:
-
Use
ALTER TABLEpara definir a propriedade da tabela que desativa um ou mais recursos. Por exemplo, para desativar os vetores de exclusão, execute o seguinte:SQLALTER TABLE table_name SET TBLPROPERTIES ('delta.enableDeletionVectors' = false); -
Ative o clustering líquido na tabela executando o seguinte:
SQLALTER 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 no clustering de líquidos se desativado |
|---|---|---|---|
Vetores de deleção | Leituras e gravações requerem Databricks Runtime 12.2 LTS ou acima. |
| Desativar vetores de exclusão desativa a concorrência em nível de linha, tornando as transações e as operações clustering mais propensas a entrar em conflito. Consulte Concorrência 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. |
| Desativar o acompanhamento de linhas desativa a concorrência em nível de linha, tornando as transações e as operações clustering mais propensas a entrar em conflito. Consulte Concorrência em nível de linha. |
Ponto de verificação V2 | Leituras e gravações exigem o Databricks Runtime 13.3 LTS e superior. |
| Não há impacto no comportamento clustering do líquido. Consulte o Ponto de Verificação V2. |
Limitações
- Databricks Runtime 15.1 e versões anteriores : o agrupamento na gravação não oferece suporte a consultas de origem que incluam filtros, junções ou agregações.
- Databricks Runtime 15.4 LTS e versões anteriores : Não é possível criar uma tabela com clustering líquido ativado usando uma transmissão estruturada de gravação. Você pode usar a transmissão estruturada para gravar dados em uma tabela existente com clustering líquido ativado.
- Apache Iceberg v2 : A concorrência em nível de linha não é suportada em tabelas gerenciadas Apache Iceberg v2 porque os vetores de exclusão e o acompanhamento de linha não são suportados.
- A simultaneidade em nível de linha é suportada em tabelas Apache Iceberg v3 gerenciadas porque a especificação v3 suporta vetores de exclusão e acompanhamento de linha. Veja Usar recursos v3 do Apache Iceberg.