Quatro novas funções de sketch no Databricks aceleram percentis, contagens distintas e consultas top-K em ordens de magnitude
por Daniel Tenedorio, Kent Marten, Gengliang Wang e Chenhao Li
Muitas perguntas analíticas são de apoio à decisão, não de auditoria. Se saber "~4,7 milhões de usuários únicos ±1%" leva à mesma decisão que "4.712.389 usuários únicos", a resposta aproximada a uma fração do custo é estritamente melhor.
Todo data warehouse tem um punhado de consultas que consomem mais recursos computacionais: percentis que forçam ordenações globais, contagens de distintos que rastreiam cada valor único, rankings top-K que reorganizam conjuntos de dados inteiros. O Databricks agora suporta quatro novas famílias de funções de sketch, construídas sobre Apache DataSketches, que substituem esses cálculos exatos por aproximações de memória limitada. A troca: erro relativo configurável de 1-2%. O benefício: ordens de magnitude menos computação, além de sketches que você pode armazenar, mesclar e consultar novamente sem tocar nos dados brutos.
Quando você chama PERCENTILE(response_time_ms, 0.99) em uma tabela de bilhões de linhas, o motor precisa ordenar cada valor globalmente. Uma ordenação completa do cluster pode levar minutos e consumir gigabytes de memória. Para um dashboard que atualiza a cada 5 minutos, você paga esse custo repetidamente.
Sketches KLL são resumos compactos e mescláveis, construídos para responder a perguntas de quantil. Eles permitem que você substitua essa ordenação usando a mesma memória limitada, quer você processe mil valores ou um trilhão. O erro relativo típico é de 1-2% e é configurável, bem dentro da faixa acionável para monitoramento de latência, planejamento de capacidade e detecção de anomalias.
A verdadeira vantagem é o fluxo de trabalho que os sketches permitem. Construa-os uma vez durante seu ETL diário. Armazene-os como colunas em tabelas Delta. Quando um dashboard precisa de P50/P90/P99 para qualquer intervalo de tempo, mescle os sketches pré-computados em milissegundos em vez de reanalisar os dados brutos. Extraia múltiplos quantis de um único sketch em uma única passagem com kll_get_quantile_bigint(sketch, ARRAY(0.5, 0.9, 0.99)).
Quantos usuários viram seu anúncio do Super Bowl, mas não sua campanha no Instagram? A análise de sobreposição de público é central para a medição de marketing. Você precisa saber o alcance total (usuários que viram qualquer campanha), a sobreposição (usuários que viram várias campanhas) e o alcance exclusivo (usuários que viram apenas uma campanha). Mas o cálculo exato requer a coleta de cada ID de usuário na memória e a realização de operações de conjunto em potencialmente bilhões de identificadores. Em escala, isso se torna impraticável ou impossível.
Sketches Theta resumem um conjunto de valores distintos em memória limitada e suportam álgebra completa de conjuntos: uniões, interseções e diferenças. Construa um sketch por campanha, depois combine-os matematicamente:
A abordagem exata exigiria uma UNION para deduplicar, depois um JOIN para encontrar a sobreposição, possivelmente embaralhando IDs de usuário brutos duas vezes em seu cluster. Com sketches Theta, você gera objetos binários compactos medidos em kilobytes, e as operações de conjunto acontecem localmente em microssegundos. Isso torna viáveis curvas de alcance diárias, medição de incrementalidade e deduplicação entre canais.
O que está em alta agora? É uma pergunta simples com uma resposta exata cara: conte cada valor distinto, armazene todas essas contagens, embaralhe-as pelo seu cluster, ordene globalmente. Para fluxos de eventos de alta cardinalidade, como logs de pesquisa ou clickstreams, isso é um trabalho em lote, não uma consulta ao vivo.
Sketches Approximate top-K rastreiam seus itens mais frequentes em memória limitada e permitem que você mescle partições e janelas de tempo para extrair resultados instantaneamente. Itens raros podem ser descartados, o que não importa, pois não é isso que você está procurando.
Com approx_top_k_combine, seu dashboard "em alta esta semana" se torna uma mesclagem de 168 sketches pré-computados em vez de uma análise de bilhões de eventos brutos. Para cargas de trabalho de streaming, mescle o sketch de cada micro-lote em um total acumulado e exiba os resultados em tempo real. O que antes era um trabalho em lote se torna um leaderboard ao vivo.
Contar clientes distintos é uma consulta. Somar a receita deles é outra. Fazer ambos corretamente, sem contar duas vezes os clientes que aparecem em vários períodos, é o desafio.
Considere uma pergunta analítica comum: “Quantos clientes únicos fizeram uma compra este mês e qual foi a receita total por região?” Normalmente, você começaria com um grande GROUP BY, deduplicando IDs de clientes enquanto soma as compras em bilhões de transações. E você não pode simplesmente adicionar resultados anteriores, clientes que aparecem em ambos os períodos são contados duas vezes e sua receita é exagerada.
Sketches Tuple resolvem isso combinando contagem de distintos e agregação de métricas em uma única estrutura mesclável.
Cada sketch mapeia um cliente distinto para seu gasto agregado. Quando você mescla entre dias, contagens de clientes deduplicam automaticamente e somas de receita se acumulam. O cálculo incremental exato exigiria que você reprocessasse os dados brutos toda vez que o intervalo de dados mudasse.
Família de Funções | Casos de Uso |
Sketches de Quantil KLL | Percentis (P50, P90, P99) |
Sketches Theta | Operações de conjunto em valores distintos |
Approximate Top-K | Itens mais frequentes |
Sketches Tuple | Contagens de distintos e agregações de métricas |
Quando usar sketches: Dashboards, análise de tendências, monitoramento, atribuição de marketing -- qualquer consulta onde respostas aproximadas sejam aceitáveis. Quanto maior o seu conjunto de dados, melhor. Se você não tem certeza de qual sketch usar, peça ao Genie Code para ajudar você a saber a escolha certa.
Quando manter a precisão: Auditoria financeira, relatórios de conformidade ou qualquer caso de uso onde requisitos regulatórios ou de negócios exijam valores precisos.
Essas quatro famílias de funções transformam consultas de longa duração nas mais baratas do seu data warehouse. Crie sketches uma vez durante o ETL, armazene-os no Delta, mescle-os na leitura. Os dados brutos ainda estarão lá quando os auditores perguntarem. Para todo o resto, uma margem de erro de 1% e uma aceleração de 1000x são um trade-off bem-vindo.
Todas as funções funcionam em pipelines SQL, DataFrame e Structured Streaming. Sketches criados no Spark são interoperáveis com outros sistemas no ecossistema Apache DataSketches. Veja a documentação (1, 2, 3, 4) para assinaturas de funções e exemplos e comece hoje mesmo com sketches.
Menção especial a Christopher Boumalhab (cboumalh no GitHub) por implementar e contribuir com as famílias de funções Theta sketch e Tuple sketch no Apache Spark.
(Esta publicação no blog foi traduzida utilizando ferramentas baseadas em inteligência artificial) Publicação original
Assine nosso blog e receba os posts mais recentes diretamente na sua caixa de entrada.