Suporte de coleta para o Delta Lake
É possível especificar agrupamentos em campos de strings em tabelas Delta para controlar o comportamento das comparações e da classificação de strings, como habilitar a correspondência sem distinção entre maiúsculas e minúsculas ou a ordenação com reconhecimento de localidade. Isso requer Databricks Runtime 16.4 LTS ou superior.
Para uma explicação completa dos tipos de ordenação, convenções de nomenclatura e regras de precedência, consulte Ordenação.
Em default, Delta Lake define o agrupamento dos campos de cadeias de caracteres como UTF8_BINARY.
Habilitar a ordenação adiciona o recurso de tabela de escritor collations à sua tabela Delta , o que afeta a compatibilidade com leitores externos e outros recursos de plataforma. Consulte a seção Limitações antes de ativar a ordenação em tabelas de produção.
Criar uma tabela com ordenação
Você pode especificar a ordenação no nível da coluna ao criar uma nova tabela. A ordenação pode ser aplicada a colunas de strings de nível superior e a campos de strings dentro de tipos aninhados:
CREATE TABLE catalog.schema.my_table (
id BIGINT,
name STRING COLLATE UTF8_LCASE,
metadata STRUCT<label: STRING COLLATE UNICODE>,
tags ARRAY<STRING COLLATE UTF8_LCASE>,
properties MAP<STRING, STRING COLLATE UTF8_LCASE>
) USING delta
MAP A chave não pode usar agrupamento. Somente os valores MAP suportam strings agrupadas.
Alterar a ordenação em uma coluna existente
Você pode alterar a ordenação de uma coluna existente usando ALTER TABLE:
-- Set a column to case-insensitive collation
ALTER TABLE my_table ALTER COLUMN name TYPE STRING COLLATE UTF8_LCASE
-- Revert a column to the default binary collation
ALTER TABLE my_table ALTER COLUMN name TYPE STRING COLLATE UTF8_BINARY
Atualizar estatísticas e disposição de dados após alterar agrupamento
Alterar a ordenação de uma coluna não sobrescreve os dados existentes nem atualiza as estatísticas. As consultas retornam resultados corretos imediatamente sob a nova ordenação, mas o recurso de ignorar arquivos e clustering podem ser menos eficazes até que você siga os seguintes passos:
- Atualizar estatísticas de omissão de arquivos para a coluna:
ANALYZE TABLE my_table COMPUTE DELTA STATISTICS
- Se sua tabela usa clustering líquido, reescreva o clustering :
OPTIMIZE FULL my_table
- Se sua tabela usa ZORDER, desative a otimização incremental e reescreva todos os arquivos:
SET spark.databricks.optimize.incremental = false;
OPTIMIZE my_table ZORDER BY zorder_column;
Ignorar essas etapas não causará resultados incorretos, mas poderá reduzir o desempenho das consultas em dados históricos até a próxima reescrita completa.
O Databricks sempre respeita a ordenação (collation) nos resultados das consultas.
Desativar a ordenação para uma tabela
Para remover o recurso de tabela de ordenação, primeiro defina todas as colunas ordenadas de volta para UTF8_BINARY:
-- Repeat for each collated column
ALTER TABLE my_table ALTER COLUMN name TYPE STRING COLLATE UTF8_BINARY
Em seguida, remova o recurso de tabela:
ALTER TABLE my_table DROP FEATURE collations
Consulte "Drop a Delta Lake table recurso" e "downgrade table protocol" para obter mais detalhes.
evolução do esquema e colação
Quando a evolução do esquema adiciona ou mescla colunas que possuem ordenação especificada, aplicam-se as seguintes regras:
- Se uma coluna de origem já existir na tabela de destino, a ordenação dessa coluna na tabela de destino será preservada. A ordenação da coluna de origem é ignorada.
- Se uma coluna de origem for nova e tiver uma ordenação especificada, a tabela de destino adotará essa ordenação para a nova coluna.
- Se a tabela de destino ainda não tiver o recurso de tabela
collationsativado, adicionar uma coluna agrupada o ativa automaticamente.
Limitações
As seguintes limitações se aplicam às tabelas Delta com agrupamento ativado:
Compatibilidade e interoperabilidade:
- Leitores externos que não reconhecem o recurso de tabela
collationsrecorrem aUTF8_BINARY, o que pode produzir ordens de classificação ou comparações incorretas. - Delta Sharing não suporta o compartilhamento de partições individuais em colunas de ordenação não padrão. Em vez disso, compartilhe a mesa.
- O formato UniForm não é compatível com tabelas que possuem ordenação (collation).
- Tabelas Delta criadas externamente com uma ordenação não reconhecida pelo Databricks Runtime geram uma exceção quando consultadas.
- As APIs OSS Delta Lake para Scala ou Python não suportam ordenação (collation). Utilize as APIs Spark SQL ou DataFrame.
Restrições de consulta e de recursos:
- Colunas agrupadas não podem ser usadas em restrições
CHECK - Colunas agrupadas não podem ser referenciadas em expressões de coluna geradas.
- Colunas agrupadas não podem ser usadas com índices de filtro de Bloom.
- Colunas agrupadas não podem ser referenciadas em transmissões estruturadas com estado (agregações, junções, deduplicação).
- Uma key
MAPnão pode ser uma string agrupada. Apenas os valoresMAPsuportam ordenação.