Use a fragmentação de variantes para otimizar o desempenho

A fragmentação de variantes melhora o desempenho das consultas em colunas VARIANT ao armazenar campos que ocorrem com frequência como colunas separadas nos arquivos Parquet subjacentes. A fragmentação reduz a E/S necessária para ler campos e melhora a compactação usando um formato columnar em vez de um blob binário.

Consulte VARIANTtipo, suporte ao tipo de variante no Apache Iceberg e no Delta Lake e Consultar dados de variante.

Requirements

O Databricks Runtime 17.3 ou superior é necessário para ler e gravar tabelas VARIANT fragmentadas. Para obter o melhor desempenho de consulta com coleta de estatísticas de variantes e eliminação de dados, o Databricks recomenda o Databricks Runtime 18.1 ou posterior.

Habilitar fragmentação

A partir do Databricks Runtime 17.3, a fragmentação é habilitada automaticamente quando você cria uma nova tabela com uma ou mais VARIANT colunas usando CREATE TABLE.

CREATE OR REPLACE TABLE e ALTER TABLE não habilitam a fragmentação automaticamente. Isso evita alterar o comportamento de fragmentação de tabelas e cargas de trabalho existentes.

Para tabelas existentes, você pode ativar manualmente o shredding definindo a propriedade da tabela enableVariantShredding como TRUE e desativá-lo definindo a propriedade como FALSE:

Lago Delta

ALTER TABLE my_table SET TBLPROPERTIES ('delta.enableVariantShredding' = 'true');

Tabela do Iceberg

ALTER TABLE my_table SET TBLPROPERTIES ('iceberg.enableVariantShredding' = 'true');

Verifique se a fragmentação está habilitada verificando se a propriedade enableVariantShredding da tabela está definida como true.

Recusar a fragmentação de uma tabela específica

Para excluir uma tabela específica da fragmentação em gravações futuras, defina a propriedade da enableVariantShredding tabela como FALSE:

Lago Delta

ALTER TABLE my_table SET TBLPROPERTIES ('delta.enableVariantShredding' = 'false');

Tabela do Iceberg

ALTER TABLE my_table SET TBLPROPERTIES ('iceberg.enableVariantShredding' = 'false');

Remover a fragmentação de uma tabela existente

Para remover a fragmentação em uma tabela existente, use o comando ALTER TABLE para soltar o recurso. Essa operação também regrava dados fragmentados VARIANT no local no formato não fragmentado VARIANT e define a propriedade da tabela enableVariantShredding como falsa.

ALTER TABLE my_table DROP FEATURE "variantShredding";

Limitations

  • Introduzir a fragmentação de dados gera alguma sobrecarga nas operações de gravação.
  • Habilitar a fragmentação não converte automaticamente dados existentes VARIANT em uma tabela. Ele só se aplica aos dados gravados depois que o recurso é habilitado. Para reescrever dados existentes VARIANT, use REORG TABLE my_table APPLY (SHRED VARIANT).
  • A fragmentação se aplica a colunas de alto nível VARIANT ou campos VARIANT em structs, exceto dados armazenados VARIANT dentro de arrays ou mapas.