Pulo de dados para Delta Lake
Nota
No Databricks Runtime 13.3 e superior, o Databricks recomenda o uso de clustering líquido para layout de tabela Delta. O clustering não é compatível com a ordem Z. Veja Utilizar clustering líquido para tabelas Delta.
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
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. Quando a otimização preditiva está ativada, as estatísticas de pulo de arquivo são escolhidas de forma inteligente e não se limitam às primeiras 32 colunas. A otimização preditiva executa ANALYZE
automaticamente , um comando para coletar estatísticas, em tabelas gerenciadas pelo Unity Catalog. 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.
Importante
Otimização preditiva com ANALYZE
está em Visualização Pública. Inclui a recolha inteligente de estatísticas durante as gravações. Use este formulário para se inscrever no Visualização Pública.
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 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 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.
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 BY
data 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 doOPTIMIZE
trabalho sejam distorcidas, bem como os tamanhos de arquivo resultantes. No entanto, isso é apenas um problema para oOPTIMIZE
comando em si, não deve ter qualquer impacto negativo nas consultas subsequentes.