Suporte de agrupamento para Delta Lake
Você pode especificar o agrupamento para campos de cadeia de caracteres em tabelas Delta no Databricks Runtime 16.1 e superior.
Habilitar o agrupamento para uma tabela adiciona o recurso de tabela do gravador de collations-preview
. Você pode ler tabelas com agrupamento habilitado no Databricks Runtime 15.4 e superior. Consulte Como o Azure Databricks gerencia a compatibilidade de recursos do Delta Lake?.
Observação
Por padrão, o Delta Lake define o agrupamento para campos de cadeia de caracteres como UTF8_BINARY
.
Criar uma tabela com cotejamento no nível da coluna
Você pode criar uma nova tabela com agrupamento no nível da coluna usando o seguinte comando:
CREATE TABLE $tableName (
nonCollatedColName STRING,
collatedColName STRING COLLATE UNICODE,
structColName STRUCT<nestedFieldName: STRING COLLATE UNICODE>,
mapColName MAP<STRING, STRING COLLATE UNICODE>,
arrayColName ARRAY<STRING COLLATE UNICODE>
) USING delta
Alterar uma coluna de tabela para especificar o agrupamento
Você pode atualizar uma coluna existente para usar o agrupamento usando os seguintes comandos:
ALTER TABLE tableName ALTER COLUMN columnName TYPE newType
Para remover um agrupamento não padrão (se houver um):
ALTER TABLE tableName ALTER COLUMN columnName TYPE STRING COLLATE UTF8_BINARY
Para alterar o agrupamento de colunas para utf8_lcase
:
ALTER TABLE tableName ALTER COLUMN columnName TYPE STRING COLLATE UTF8_LCASE
Alterar o agrupamento de uma tabela não atualiza automaticamente as estatísticas ou o layout de dados para dados gravados anteriormente. Para melhorar o arquivo ignorando dados históricos sob o novo agrupamento, o Databricks recomenda o seguinte:
- Execute
ANALYZE table_name COMPUTE DELTA STATISTICS
para atualizar estatísticas de ignoramento de arquivo para arquivos de dados existentes. - Para tabelas com agrupamento líquido habilitado, execute
OPTIMIZE FULL table_name
para atualizar o agrupamento líquido. - Para tabelas que usam
ZORDER
, faça o seguinte:Desative a otimização incremental na Sessão do Spark substituindo a configuração padrão do Spark pelo seguinte comando:
SET spark.databricks.optimize.incremental=false
Execute
OPTIMIZE table_name ZORDER BY zorder_column
para reescrever todos os arquivos de dados existentes.
O agrupamento sempre será respeitado pelo Azure Databricks nos resultados da consulta.
Desativar agrupamento para uma tabela
Você deve desabilitar explicitamente o agrupamento para cada coluna de cadeia de caracteres em uma tabela antes de descartar o recurso de agrupamento.
Use a sintaxe a seguir para definir o agrupamento de uma coluna como UTF8_BINARY
:
ALTER TABLE table_name
ALTER COLUMN column_name
TYPE STRING
COLLATE UTF8_BINARY
Para soltar o recurso de tabela, execute o seguinte comando:
ALTER TABLE table_name
DROP FEATURE collations-preview
Veja os recursos da tabela Drop Delta .
Evolução e agrupamento do esquema
A colação interage com a evolução do esquema usando as seguintes regras:
- Se já existir uma coluna de origem na tabela de destino, o agrupamento da coluna na tabela de destino permanecerá inalterado.
- Se uma coluna de origem tiver agrupamento especificado, a coluna adicionada à tabela de destino usará o agrupamento especificado.
- Se a tabela de destino não tiver o agrupamento habilitado quando uma coluna com agrupamento for adicionada, o recurso
collations-preview
tabela será habilitado.
Limitações
Existem as seguintes limitações para tabelas com agrupamento habilitado:
- As tabelas delta criadas externamente com um agrupamento não reconhecido pelo Databricks Runtime lançam uma exceção quando consultadas.
- Não há suporte para Delta Sharing.
- As colunas agrupadas não podem ser usadas com restrições
CHECK
. - As colunas geradas não podem usar agrupamento.
- As colunas agrupadas não podem ser usadas com colunas de índice de filtro bloom.
- Não há suporte para agrupamento em APIs OSS Delta Lake para Scala ou Python. Você deve usar APIs do Spark SQL ou DataFrame para habilitar o agrupamento.
- Não há suporte para a substituição dinâmica de partições em colunas agrupadas.
- As colunas agrupadas não podem ser referenciadas em consultas com estado de Streaming Estruturado.
- Leitores externos que não respeitam o recurso de tabela
collations-preview
recorrem ao agrupamento padrão deUTF8_BINARY
. - Um
MAP
não pode ter uma chave que seja uma cadeia de caracteres agrupada. - O UniForm não funciona com agrupamentos.