Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
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:
- Atualize as estatísticas de salto de ficheiros para a coluna:
ANALYZE TABLE my_table COMPUTE DELTA STATISTICS
- Se a tua tabela usa clustering líquido, reescreve o layout do clustering:
OPTIMIZE FULL my_table
- 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
collationsfuncionalidade 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
collationsfuncionalidade da tabela recorrem aUTF8_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
CHECKrestriçõ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
MAPtecla não pode ser uma corda colada. Apenas os valoresMAPsuportam a colação