Partilhar via


Suporte de agrupamento para Delta Lake

Você pode especificar o agrupamento para campos de cadeia de caracteres em tabelas Delta no Databricks Runtime 16.1 e superior.

Habilitar o agrupamento para uma tabela adiciona o recurso de tabela do gravador de collations-preview. Você pode ler tabelas com agrupamento habilitado no Databricks Runtime 15.4 e superior. Consulte Como o Azure Databricks gerencia a compatibilidade de recursos do Delta Lake?.

Observação

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

Criar uma tabela com cotejamento no nível da coluna

Você pode criar uma nova tabela com agrupamento no nível da coluna usando o seguinte comando:

CREATE TABLE $tableName (
 nonCollatedColName STRING,
 collatedColName STRING COLLATE UNICODE,
 structColName STRUCT<nestedFieldName: STRING COLLATE UNICODE>,
 mapColName MAP<STRING, STRING COLLATE UNICODE>,
 arrayColName ARRAY<STRING COLLATE UNICODE>
) USING delta

Alterar uma coluna de tabela para especificar o agrupamento

Você pode atualizar uma coluna existente para usar o agrupamento usando os seguintes comandos:

ALTER TABLE tableName ALTER COLUMN columnName TYPE newType

Para remover um agrupamento não padrão (se houver um):

ALTER TABLE tableName ALTER COLUMN columnName TYPE STRING COLLATE UTF8_BINARY

Para alterar o agrupamento de colunas para utf8_lcase:

ALTER TABLE tableName ALTER COLUMN columnName TYPE STRING COLLATE UTF8_LCASE

Alterar o agrupamento de uma tabela não atualiza automaticamente as estatísticas ou o layout de dados para dados gravados anteriormente. Para melhorar o arquivo ignorando dados históricos sob o novo agrupamento, o Databricks recomenda o seguinte:

  • Execute ANALYZE table_name COMPUTE DELTA STATISTICS para atualizar estatísticas de ignoramento de arquivo para arquivos de dados existentes.
  • Para tabelas com agrupamento líquido habilitado, execute OPTIMIZE FULL table_name para atualizar o agrupamento líquido.
  • Para tabelas que usam ZORDER, faça o seguinte:
    • Desative a otimização incremental na Sessão do Spark substituindo a configuração padrão do Spark pelo seguinte comando:

      SET spark.databricks.optimize.incremental=false
      
    • Execute OPTIMIZE table_name ZORDER BY zorder_column para reescrever todos os arquivos de dados existentes.

O agrupamento sempre será respeitado pelo Azure Databricks nos resultados da consulta.

Desativar agrupamento para uma tabela

Você deve desabilitar explicitamente o agrupamento para cada coluna de cadeia de caracteres em uma tabela antes de descartar o recurso de agrupamento.

Use a sintaxe a seguir para definir o agrupamento de uma coluna como UTF8_BINARY:

ALTER TABLE table_name
ALTER COLUMN column_name
TYPE STRING
COLLATE UTF8_BINARY

Para soltar o recurso de tabela, execute o seguinte comando:

ALTER TABLE table_name
DROP FEATURE collations-preview

Veja os recursos da tabela Drop Delta .

Evolução e agrupamento do esquema

A colação interage com a evolução do esquema usando as seguintes regras:

  • Se já existir uma coluna de origem na tabela de destino, o agrupamento da coluna na tabela de destino permanecerá inalterado.
  • Se uma coluna de origem tiver agrupamento especificado, a coluna adicionada à tabela de destino usará o agrupamento especificado.
  • Se a tabela de destino não tiver o agrupamento habilitado quando uma coluna com agrupamento for adicionada, o recurso collations-preview tabela será habilitado.

Limitações

Existem as seguintes limitações para tabelas com agrupamento habilitado:

  • As tabelas delta criadas externamente com um agrupamento não reconhecido pelo Databricks Runtime lançam uma exceção quando consultadas.
  • Não há suporte para Delta Sharing.
  • As colunas agrupadas não podem ser usadas com restrições CHECK.
  • As colunas geradas não podem usar agrupamento.
  • As colunas agrupadas não podem ser usadas com colunas de índice de filtro bloom.
  • Não há suporte para agrupamento em APIs OSS Delta Lake para Scala ou Python. Você deve usar APIs do Spark SQL ou DataFrame para habilitar o agrupamento.
  • Não há suporte para a substituição dinâmica de partições em colunas agrupadas.
  • As colunas agrupadas não podem ser referenciadas em consultas com estado de Streaming Estruturado.
  • Leitores externos que não respeitam o recurso de tabela collations-preview recorrem ao agrupamento padrão de UTF8_BINARY.
  • Um MAP não pode ter uma chave que seja uma cadeia de caracteres agrupada.
  • O UniForm não funciona com agrupamentos.