Compartilhar via


Suporte de ordenação para Delta Lake

Você pode especificar ordenações em campos de cadeia de caracteres e ler tabelas Delta que usam ordenações no Databricks Runtime 16.4 LTS e superior.

Habilitar a ordenação de uma tabela adiciona o recurso de tabela de gravação collations-preview. Consulte a compatibilidade de recursos e protocolos do Delta Lake.

Observação

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

Criar uma tabela com ordenação no nível da coluna

Você pode criar uma nova tabela com ordenação 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 ordenação

Você pode atualizar uma coluna existente para usar a ordenação usando os seguintes comandos:

ALTER TABLE tableName ALTER COLUMN columnName TYPE newType

Para remover uma ordenação não padrão (se houver uma):

ALTER TABLE tableName ALTER COLUMN columnName TYPE STRING COLLATE UTF8_BINARY

Para alterar a ordenação de coluna para utf8_lcase:

ALTER TABLE tableName ALTER COLUMN columnName TYPE STRING COLLATE UTF8_LCASE

Alterar a ordenação de uma tabela não atualiza automaticamente estatísticas ou layout de dados para dados gravados anteriormente. Para melhorar o pulo de arquivos em relação a dados históricos com a nova ordenação, Databricks recomenda o seguinte:

  • Execute ANALYZE table_name COMPUTE DELTA STATISTICS para atualizar as estatísticas de pular arquivos para arquivos de dados existentes.

  • Para tabelas com clustering líquido habilitado, execute OPTIMIZE FULL table_name para atualizar o clustering líquido.

  • Para tabelas que usam ZORDER, faça o seguinte:

    • Desabilite a otimização incremental na Sessão do Spark substituindo a configuração padrão do Spark com o seguinte comando:

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

A ordem de classificação sempre será respeitada pelo Azure Databricks nos resultados da consulta.

Desabilitar a ordenação de uma tabela

Você deve desabilitar explicitamente a ordenação para cada coluna de cadeia de caracteres em uma tabela antes de remover o recurso de ordenação.

Use a sintaxe a seguir para definir a ordenação de uma coluna como UTF8_BINARY:

ALTER TABLE table_name
ALTER COLUMN column_name
TYPE STRING
COLLATE UTF8_BINARY

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

ALTER TABLE table_name
DROP FEATURE collations-preview

Confira Remover um recurso de tabela do Delta Lake e fazer downgrade do protocolo de tabela.

Evolução e ordenação de esquema

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

  • Se uma coluna de origem já existir na tabela de destino, a ordenação da coluna na tabela de destino permanecerá inalterada.
  • Se uma coluna de origem tiver a ordenação especificada, a coluna adicionada à tabela de destino usará a ordenação especificada.
  • Se a tabela de destino não tiver classificação ativada quando uma coluna com classificação for adicionada, o recurso de collations-preview tabela será ativado.

Limitações

As seguintes limitações existem para tabelas com ordenação habilitada:

  • Tabelas delta criadas externamente com uma ordenação não reconhecida pelo Databricks Runtime geram uma exceção quando consultadas.
  • Não há suporte para o Compartilhamento Delta.
  • Colunas agrupadas não podem ser usadas com CHECK restrições.
  • Colunas geradas não podem usar ordenação.
  • Colunas agrupadas não podem ser usadas com colunas de índice de filtro de flores.
  • Não há suporte para ordenação em APIs delta lake do OSS para Scala ou Python. Você deve usar APIs do Spark SQL ou DataFrame para habilitar a ordenação.
  • Não há suporte para substituição de partição dinâmica em colunas agrupadas.
  • Colunas agrupadas não podem ser referenciadas em consultas com estado de Streaming Estruturado.
  • Leitores externos que não respeitam a funcionalidade da tabela collations-preview, retornam à ordenação padrão de UTF8_BINARY.
  • Não MAP pode ter uma chave que seja uma cadeia de caracteres ordenada.
  • O UniForm não funciona com colações.