Pular para o conteúdo principal

Suporte a collations para Delta Lake

Você pode especificar agrupamentos em campos de strings em tabelas Delta Lake para controlar como as comparações e classificações de strings se comportam, como habilitar a correspondência que não diferencia maiúsculas de minúsculas ou a ordenação com reconhecimento de localidade. Isso requer Databricks Runtime 16.4 LTS ou acima.

Para obter uma explicação completa sobre os tipos de agrupamento, convenções de nomenclatura e regras de precedência, consulte Agrupamento.

Por padrão, o Delta Lake define a ordenação para campos de strings como UTF8_BINARY.

importante

Habilitar a ordenação adiciona o recurso de tabela de gravação collations à sua tabela Delta Lake, o que afeta a compatibilidade com leitores externos e outros recursos da plataforma. Consulte a seção de Limitações antes de habilitar o agrupamento em tabelas de produção.

Criar uma tabela com agrupamento

É possível especificar o agrupamento no nível da coluna ao criar uma nova tabela. Agrupamento pode ser aplicado 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 Chaves não podem usar agrupamento. Somente valores MAP aceitam strings agrupadas.

Alterar agrupamento em uma coluna existente

É possível alterar o agrupamento 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 dos dados após alterar a collation

A alteração da collation de uma coluna não reescreve dados existentes nem atualiza estatísticas. Consultas retornam resultados corretos sob o novo agrupamento imediatamente, mas ignorar arquivos e clustering podem ser menos eficazes até que os passos a seguir sejam tomados:

  1. Atualizar as estatísticas de salto de arquivo para a coluna:
SQL
   ANALYZE TABLE my_table COMPUTE DELTA STATISTICS
  1. Se sua tabela usa clusters líquidos, reescreva a disposição dos clusters:
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 estes os passos não causará resultados incorretos, mas poderá reduzir o desempenho da consulta em dados históricos até a próxima reescrita completa.

A ordenação é sempre respeitada pela Databricks nos resultados da consulta.

Desabilitar colação para uma tabela

Para remover o recurso de tabela de agrupamento, primeiro defina cada coluna agrupada de volta para UTF8_BINARY:

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

Então descarte o recurso da tabela:

SQL
ALTER TABLE my_table DROP FEATURE collations

Consulte Remover um recurso de tabela do Delta Lake e fazer downgrade do protocolo da tabela para obter mais detalhes.

Evolução do esquema e agrupamento

Quando a evolução do esquema adiciona ou merge colunas que têm intercalação especificada, as seguintes regras se aplicam:

  • Se uma coluna de origem já existe na tabela de destino, a ordenação da tabela de destino para essa coluna é preservada. O agrupamento da coluna de origem é ignorado.
  • Se uma coluna de origem for nova e tiver uma ordenação especificada, a tabela de destino adota essa ordenação para a nova coluna.
  • Se a tabela de destino ainda não tiver o recurso de tabela collations habilitado, adicionar uma coluna agrupada o habilita automaticamente.

Limitações

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

Compatibilidade e interoperabilidade:

  • Leitores externos que não reconhecem o recurso de tabela collations recorrem a UTF8_BINARY, o que pode produzir ordenações ou comparações incorretas.
  • O OpenSharing não oferece suporte ao compartilhamento de partições individuais em colunas com agrupamento não padrão. Compartilhe a tabela em vez disso.
  • O UniForm não é suportado para tabelas com collation.
  • Tabelas Delta Lake criadas externamente com um agrupamento não reconhecido pelo Databricks Runtime lançam uma exceção quando consultadas.
  • As APIs open source do Delta Lake para Scala ou Python não oferecem suporte a agrupamento. É possível usar o Spark SQL ou as APIs do DataFrame.

Restrições de query e recurso:

  • Colunas com agrupamentos não podem ser usadas em restrições de 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 (obsoleto)
  • Colunas agrupadas não podem ser referenciadas em consultas com estado de transmissão estructurada (agregações, joins, deduplicação)
  • Uma MAP key não pode ser uma string com colação. Apenas os valores MAP suportam agrupamento

Relacionado