Partilhar via


Suporte de agrupamento para Delta Lake

Pode especificar colações em campos de texto em tabelas Delta para controlar como as comparações e ordenações de cadeias se comportam, tal como permitir correspondência que não distingue maiúsculas de minúsculas ou ordenação sensível à localidade. Isto requer Databricks Runtime 16.4 LTS e versões posteriores.

Para uma explicação completa dos tipos de colação, convenções de nomenclatura e regras de precedência, veja Collação.

Por padrão, o Delta Lake define o agrupamento para campos de cadeia de caracteres como UTF8_BINARY.

Importante

Ativar a ordenação adiciona a funcionalidade de tabela de gravação collations à sua tabela Delta, o que afeta a compatibilidade com leitores externos e outras funcionalidades da plataforma. Consulte a secção de Limitações antes de ativar a compilação nas tabelas de produção.

Crie uma tabela com colação

Pode especificar a colação ao nível da coluna ao criar uma nova tabela. A ordenação pode ser aplicada a colunas de texto de nível superior e campos de texto 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

Observação

MAP As chaves não podem usar a ordenação. Apenas MAP valores suportam strings agrupadas.

Alter collation numa coluna existente

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 estrutura dos dados após alterar a colação

Alterar a colação de uma coluna não reescreve dados existentes nem atualiza estatísticas. As consultas retornam imediatamente os resultados corretos na nova compilação, mas o salto de ficheiros e o agrupamento podem ser menos eficazes até tomar os seguintes passos:

  1. Atualize as estatísticas de salto de ficheiros para a coluna:
   ANALYZE TABLE my_table COMPUTE DELTA STATISTICS
  1. Se a tua tabela usa clustering líquido, reescreve o layout do clustering:
   OPTIMIZE FULL my_table
  1. Se a sua tabela usar ZORDER, desative a otimização incremental e reescreva todos os ficheiros:
   SET spark.databricks.optimize.incremental = false;
   OPTIMIZE my_table ZORDER BY zorder_column;

Saltar estes passos não causa resultados incorretos, mas pode reduzir o desempenho da consulta sobre dados históricos até à próxima reescrita completa.

A colação é sempre respeitada pelo Azure Databricks nos resultados das consultas.

Desativar a ordenação para uma tabela

Para remover a funcionalidade da tabela de colação, primeiro defina cada coluna colada de volta para UTF8_BINARY:

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

Depois remova a funcionalidade da tabela.

ALTER TABLE my_table DROP FEATURE collations

Consulte a funcionalidade Drop a tabela Delta Lake e o protocolo de tabela de downgrade para mais detalhes.

Evolução e colação de esquemas

Quando a evolução do esquema adiciona ou integra colunas que têm a ordenação colacional especificada, aplicam-se as seguintes regras:

  • Se uma coluna de origem já existir na tabela de destino, a colação dessa tabela de destino para essa coluna é preservada. A colação da coluna de origem é ignorada.
  • Se uma coluna de origem for nova e tiver uma colação especificada, a tabela alvo adota essa colação para a nova coluna.
  • Se a tabela alvo ainda não tiver a collations funcionalidade de tabela ativada, adicionar uma coluna agrupada ativa-a automaticamente.

Limitações

As seguintes limitações aplicam-se às tabelas Delta com a colação ativada:

Compatibilidade e interoperabilidade:

  • Leitores externos que não reconhecem a collations funcionalidade da tabela recorrem a UTF8_BINARY, o que pode produzir ordens de ordenação ou comparações incorretas.
  • O Delta Sharing não suporta a partilha de partições individuais em colunas de ordenação com ordenação não padrão. Partilha a mesa em vez disso.
  • O UniForm não é suportado para tabelas com colação.
  • Tabelas Delta criadas externamente com uma colação não reconhecida pelo Databricks Runtime lançam uma exceção quando consultadas.
  • As APIs OSS Delta Lake para Scala ou Python não suportam colação. Usa APIs SQL ou DataFrame do Spark.

Restrições de consultas e funcionalidades:

  • Colunas coladas não podem ser usadas em CHECK restrições
  • Colunas agrupadas não podem ser referenciadas em expressões de coluna geradas
  • Colunas ordenadas não podem ser usadas com índices de filtros de Bloom
  • Colunas ordenadas não podem ser referenciadas em consultas com estado no Structured Streaming (agregações, joins, deduplicação)
  • Uma MAP tecla não pode ser uma corda colada. Apenas os valores MAP suportam a colação