Usar o clustering líquido para tabelas Delta
Delta Lake liquid clustering substitui o particionamento de tabela e ZORDER
para simplificar as decisões de disposição de dados e otimizar o desempenho da consulta. O Liquid clustering oferece flexibilidade para redefinir a chave clustering sem reescrever os dados existentes, permitindo que a disposição dos dados evolua junto com as necessidades analíticas ao longo do tempo. O Liquid clustering se aplica tanto às tabelas de transmissão quanto à visualização materializada.
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.
As tabelas com o Liquid clustering habilitado suportam a simultaneidade em nível de linha em Databricks Runtime 13.3 LTS e acima. A simultaneidade em nível de linha está geralmente disponível em Databricks Runtime 14.2 e acima para todas as tabelas com vetores de exclusão ativados. Consulte Níveis de isolamento e conflitos de gravação em Databricks.
Para que é usado o clustering líquido?
Databricks recomenda o site clustering líquido para todas as novas tabelas Delta, o que inclui tabelas de transmissão (STs) e visualizações materializadas (MVs). A seguir, 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.
Habilitar líquido clustering
O senhor pode ativar o clustering líquido em uma tabela existente ou durante a criação da tabela. O clustering não é compatível com o particionamento ou ZORDER
e exige que o senhor use o site Databricks para gerenciar todas as operações de disposição e otimização dos dados na tabela. Depois que o Liquid clustering for ativado, execute OPTIMIZE
Job como de costume para clusterizar os 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:
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.
- SQL
- Python
- Scala
-- 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:
- Python
- Scala
(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 criadas com o clustering líquido ativado têm vários recursos da tabela Delta ativados na criação e usam o Delta writer versão 7 e o reader versão 3. O senhor pode substituir a ativação de alguns desses recursos. Consulte Override default recurso enablement (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 de protocolo de leitura Delta ativados. Consulte Como Databricks o Delta Lake senhor pode gerenciar a compatibilidade do recurso?
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>)
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.
Para remover a chave clustering, use a seguinte sintaxe:
ALTER TABLE table_name CLUSTER BY NONE;
Líquido automático clustering
Visualização
O líquido automático clustering está em visualização pública.
Em Databricks Runtime 15.4 LTS e acima, o senhor pode ativar o líquido automático clustering para Unity Catalog gerenciar tabelas. Com o clustering líquido automático ativado, o Databricks escolhe de forma inteligente a chave clustering para otimizar o desempenho da consulta. O senhor ativa o clustering líquido automático usando a cláusula CLUSTER BY AUTO
.
Quando ativadas, a seleção automática do key e as operações do clustering são executadas de forma assíncrona como operações de manutenção e exigem que a otimização preditiva esteja ativada para a tabela. Consulte Otimização preditiva para Unity Catalog gerenciar tabelas.
Para identificar a chave clustering, o site Databricks analisa a carga de trabalho de consulta histórica da tabela e identifica as melhores colunas candidatas. são alteradas quando a economia de custos prevista com as melhorias na omissão de dados supera o custo de clustering os dados.
Se a forma como o senhor consulta seus dados mudar ao longo do tempo ou se o desempenho da consulta indicar mudanças na distribuição dos dados, o clustering líquido automático seleciona uma nova chave para otimizar o desempenho.
O senhor pode ler ou gravar tabelas com o clustering automático ativado em todas as versões do Databricks Runtime que suportam o clustering líquido, mas a seleção inteligente do key depende dos metadados introduzidos no Databricks Runtime 15.4 LTS. Use o site Databricks Runtime 15.4 LTS ou acima 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.
Habilitar ou desabilitar a função automática clustering
Para criar uma nova tabela com o clustering líquido automático ativado, use a seguinte sintaxe:
CREATE OR REPLACE TABLE table_name CLUSTER BY AUTO;
O senhor também pode ativar o clustering líquido automático em uma tabela existente, incluindo tabelas que anteriormente tinham uma chave especificada manualmente, conforme mostrado no exemplo a seguir:
ALTER TABLE table_name CLUSTER BY AUTO;
O senhor também pode alterar tabelas com o clustering líquido automático ativado para usar a chave especificada manualmente.
A propriedade clusterByAuto
é definida como true
quando o senhor ativa o líquido automático clustering.
A propriedade clusteringColumns
mostra as colunas atuais do site clustering selecionadas pela seleção automática do site key. execução DESCRIBE EXTENDED table_name
para ver a lista completa de propriedades da tabela.
Substituir default recurso enablement (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: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 da desativação no clustering líquido |
---|---|---|---|
Vetores de deleçã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 a tecla clustering
A Databricks recomenda o clustering líquido automático para as tabelas compatíveis. Consulte Líquido automático clustering.
Databricks recomenda escolher a chave clustering com base nas colunas usadas com mais frequência nos filtros de consulta. A chave de agrupamento pode ser definida em qualquer ordem. Se duas colunas estiverem altamente correlacionadas, o senhor só precisará incluir uma delas como clustering key.
O senhor pode especificar até quatro chaves clustering. Para tabelas menores (com menos de 10 TB), o uso de mais clustering chaves (por exemplo, quatro) pode degradar o desempenho ao filtrar em uma única coluna em comparação com o uso de menos clustering chaves (por exemplo, duas). No entanto, à medida que o tamanho da tabela aumenta, a diferença de desempenho com o uso de mais clustering chaves para consultas de coluna única se torna insignificante.
O senhor só pode especificar colunas que tenham estatísticas coletadas como clustering key. Em default, 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 em cluster
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 se agrupam na gravação incluem o seguinte:
INSERT INTO
operaçõesCTAS
eRTAS
declaraçõesCOPY INTO
do formato Parquetspark.write.mode("append")
As gravações de transmissão estruturada nunca acionam clustering on write. Limitações adicionais se aplicam. 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
Otimização preditiva executada automaticamente OPTIMIZE
comando para tabelas habilitadas. Consulte Otimização preditiva para Unity Catalog gerenciar tabelas.
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;
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 em cluster
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 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);
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 é 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;
Compatibilidade para tabelas com clustering líquido
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.
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
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.