Partilhar via


Ignoração de dados para Delta Lake

Nota

No Databricks Runtime 13.3 ou mais, a Databricks recomenda o uso de clustering líquido para o layout de tabelas Delta. O clustering não é compatível com a ordem Z. Veja Utilizar clustering líquido para tabelas.

As informações de pulo de dados são coletadas automaticamente quando você grava dados em uma tabela Delta. O Delta Lake no Azure Databricks aproveita essas informações (valores mínimos e máximos, contagens nulas e registros totais por arquivo) no momento da consulta para fornecer consultas mais rápidas.

Você deve ter estatísticas coletadas para colunas que são usadas em ZORDER declarações. Consulte O que é Z-ordering?.

Especificar colunas de estatísticas delta

Para tabelas externas do Unity Catalog, o Delta Lake coleta estatísticas sobre as primeiras 32 colunas definidas no esquema da tabela por padrão. Para tabelas gerenciadas pelo Unity Catalog, o Delta Lake escolhe estatísticas de pulo de arquivo de forma inteligente usando otimização preditiva e não tem um limite de 32 colunas. A otimização preditiva executa ANALYZEautomaticamente , um comando para coletar estatísticas. A Databricks recomenda habilitar a otimização preditiva para todas as tabelas gerenciadas pelo Unity Catalog para simplificar a manutenção de dados e reduzir os custos de armazenamento. Consulte Otimização preditiva para tabelas gerenciadas do Unity Catalog.

Se você não estiver usando a otimização preditiva, poderá modificar o comportamento que limita as coleções de estatísticas a 32 colunas definindo uma das seguintes propriedades de tabela:

Propriedade da Tabela Databricks Runtime suportado Descrição
delta.dataSkippingNumIndexedCols Todas as versões suportadas do Databricks Runtime Aumente ou diminua o número de colunas nas quais a Delta coleta estatísticas. Depende da ordem das colunas.
delta.dataSkippingStatsColumns Databricks Runtime 13.3 LTS ou superior Especifique uma lista de nomes de colunas para os quais o Delta Lake coleta estatísticas. Substitui dataSkippingNumIndexedCols.

As propriedades da tabela podem ser definidas na criação da tabela ou através de instruções ALTER TABLE. Consulte Referência de propriedades da Tabela Delta. O exemplo a seguir substitui o comportamento padrão de coleta de estatísticas para definir a coleta de estatísticas em colunas nomeadas:

ALTER TABLE table_name SET TBLPROPERTIES('delta.dataSkippingStatsColumns' = 'col1, col2, col3')

A atualização dessas propriedades não recalcula automaticamente as estatísticas dos dados existentes. Em vez disso, afeta o comportamento da coleta de estatísticas futuras ao adicionar ou atualizar dados na tabela. O Delta Lake não aproveita as estatísticas para colunas não incluídas na lista atual de colunas de estatísticas.

No Databricks Runtime 14.3 LTS e superior, se você tiver alterado as propriedades da tabela ou alterado as colunas especificadas para estatísticas, poderá acionar manualmente o recálculo de estatísticas para uma tabela Delta usando o seguinte comando:

ANALYZE TABLE table_name COMPUTE DELTA STATISTICS

Nota

Cadeias de caracteres longas são truncadas durante a coleta de estatísticas. Você pode optar por excluir colunas longas de cadeia de caracteres da coleção de estatísticas, especialmente se as colunas não forem usadas com frequência para filtrar consultas.

O que é Z-ordering?

Nota

O Databricks recomenda o uso de clustering líquido para todas as novas tabelas Delta. Não é possível utilizar ZORDER em combinação com aglomeração de líquidos. Veja Utilizar clustering líquido para tabelas.

Z-ordering é uma técnica para agrupar informações relacionadas no mesmo conjunto de arquivos. Essa colocalidade é usada automaticamente pelo Delta Lake em algoritmos de pulo de dados do Azure Databricks. Esse comportamento reduz drasticamente a quantidade de dados que o Delta Lake no Azure Databricks precisa ler. Para dados de ordem Z, especifique as colunas a serem ordenadas na ZORDER BY cláusula:

OPTIMIZE events
WHERE date >= current_timestamp() - INTERVAL 1 day
ZORDER BY (eventType)

Se você espera que uma coluna seja comumente usada em predicados de consulta e se essa coluna tiver alta cardinalidade (ou seja, um grande número de valores distintos), use ZORDER BY.

Você pode especificar várias colunas para ZORDER BY como uma lista separada por vírgula. No entanto, a eficácia do enfoque local diminui com cada coluna adicional. O ordenamento Z em colunas que não possuem estatísticas recolhidas seria ineficaz e um desperdício de recursos. Isso ocorre porque o salto de dados requer estatísticas locais de coluna, como min, max e count. Você pode configurar a coleta de estatísticas em determinadas colunas reordenando colunas no esquema ou pode aumentar o número de colunas nas quais coletar estatísticas.

Nota

  • A ordenação Z não é idempotente, mas pretende ser uma operação incremental. Não é garantido que o tempo necessário para a ordenação Z diminua em várias execuções. No entanto, se nenhum novo dado foi adicionado a uma partição que foi apenas ordenada por Z, outra ordem Z dessa partição não terá qualquer efeito.

  • A ordenação Z visa produzir arquivos de dados equilibrados em relação ao número de tuplas, mas não necessariamente o tamanho dos dados no disco. As duas medidas são mais frequentemente correlacionadas, mas pode haver situações em que esse não é o caso, levando a distorções nos tempos de tarefa otimizados.

    Por exemplo, se você ZORDER BYdata e seus registros mais recentes são todos muito mais amplos (por exemplo, matrizes mais longas ou valores de cadeia de caracteres) do que os do passado, espera-se que as durações de tarefas do OPTIMIZE trabalho sejam distorcidas, bem como os tamanhos de arquivo resultantes. No entanto, isso é apenas um problema para o OPTIMIZE comando em si, não deve ter qualquer impacto negativo nas consultas subsequentes.