Pular para o conteúdo principal

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.

importante

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:

SQL
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
nota

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:

SQL
-- 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:

  1. Atualizar estatísticas de omissão de arquivos para a coluna:
SQL
   ANALYZE TABLE my_table COMPUTE DELTA STATISTICS
  1. Se sua tabela usa clustering líquido, reescreva o clustering :
SQL
   OPTIMIZE FULL my_table
  1. Se sua tabela usa ZORDER, desative a otimização incremental e reescreva todos os arquivos:
SQL
   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:

SQL
-- Repeat for each collated column
ALTER TABLE my_table ALTER COLUMN name TYPE STRING COLLATE UTF8_BINARY

Em seguida, remova o recurso de tabela:

SQL
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 collations ativado, 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 collations recorrem a UTF8_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 MAP não pode ser uma string agrupada. Apenas os valores MAP suportam ordenação.

Relacionado