Pulo de dados para Delta Lake

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.

Nota

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

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

Especificar colunas de estatísticas delta

Por padrão, o Delta Lake coleta estatísticas sobre as primeiras 32 colunas definidas no esquema da tabela. Para esta coleção, cada campo em uma coluna aninhada é considerado uma coluna individual. Você pode modificar esse comportamento definindo uma das seguintes propriedades de tabela:

Propriedade Table Databricks Runtime suportado Description
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 e 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 com ALTER TABLE instruções. Consulte Referência de propriedades da tabela delta.

A atualização dessa propriedade 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, você pode 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?

Z-ordering é uma técnica para colocalizar 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 da localidade cai a cada coluna extra. Ordenar Z em colunas que não têm estatísticas coletadas sobre elas 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.