Quattro nuove funzioni sketch in Databricks accelerano le query percentili, di conteggi distinti e top-K di ordini di grandezza
di Daniel Tenedorio, Kent Marten, Gengliang Wang e Chenhao Li
Molte domande analitiche sono di supporto alle decisioni, non di controllo. Se sapere "~4,7 milioni di utenti unici ±1%" porta alla stessa decisione di "4.712.389 utenti unici", la risposta approssimativa a una frazione del costo è decisamente migliore.
Ogni data warehouse ha una manciata di query che consumano la maggior parte delle risorse di calcolo: percentili che impongono ordinamenti globali, conteggi distinti che tracciano ogni valore univoco, classifiche top-K che rimescolano interi set di dati. Databricks ora supporta quattro nuove famiglie di funzioni sketch, basate su Apache DataSketches, che sostituiscono questi calcoli esatti con approssimazioni a memoria limitata. Il compromesso: errore relativo configurabile dell'1-2%. Il vantaggio: ordini di grandezza in meno di calcolo, oltre a sketch che puoi archiviare, unire e ri-interrogare senza toccare i dati grezzi.
Quando chiami PERCENTILE(response_time_ms, 0.99) su una tabella da un miliardo di righe, il motore deve ordinare ogni valore a livello globale. Un'elaborazione completa del cluster potrebbe richiedere minuti e consumare gigabyte di memoria. Per una dashboard che si aggiorna ogni 5 minuti, paghi quel costo più e più volte.
Gli sketch KLL sono riepiloghi compatti e unibili, creati per rispondere a domande sui quantili. Ti consentono di sostituire questo ordinamento utilizzando la stessa memoria limitata, sia che elabori mille valori o un trilione. L'errore relativo tipico è dell'1-2% ed è configurabile, ben all'interno dell'intervallo di azione per il monitoraggio della latenza, la pianificazione della capacità e il rilevamento delle anomalie.
Il vero vantaggio è il flusso di lavoro abilitato dagli sketch. Creali una volta durante il tuo ETL giornaliero. Archiviali come colonne nelle tabelle Delta. Quando una dashboard necessita di P50/P90/P99 per qualsiasi intervallo di tempo, unisci gli sketch precalcolati in millisecondi invece di scansionare nuovamente i dati grezzi. Estrai più quantili da un singolo sketch in un unico passaggio con kll_get_quantile_bigint(sketch, ARRAY(0.5, 0.9, 0.99)).
Quanti utenti hanno visto la tua pubblicità del Super Bowl ma non la tua campagna Instagram? L'analisi della sovrapposizione del pubblico è fondamentale per la misurazione del marketing. Devi conoscere la copertura totale (utenti che hanno visto qualsiasi campagna), la sovrapposizione (utenti che hanno visto più campagne) e la copertura esclusiva (utenti che hanno visto una sola campagna). Ma il calcolo esatto richiede la raccolta di ogni ID utente in memoria ed l'esecuzione di operazioni insiemistiche su potenzialmente miliardi di identificatori. Su larga scala, questo diventa impraticabile o impossibile.
Gli sketch Theta riassumono un insieme di valori distinti in memoria limitata e supportano l'algebra insiemistica completa: unioni, intersezioni e differenze. Crea uno sketch per campagna, quindi combinali matematicamente:
L'approccio esatto richiederebbe un'UNIONE per deduplicare, quindi un JOIN per trovare la sovrapposizione, potenzialmente rimescolando gli ID utente grezzi due volte sul tuo cluster. Con gli sketch Theta, generi oggetti binari compatti misurati in kilobyte, e le operazioni insiemistiche avvengono localmente in microsecondi. Questo rende pratiche le curve di copertura giornaliere, la misurazione dell'incrementalità e la deduplicazione cross-channel.
Cosa è di tendenza in questo momento? È una domanda semplice con una risposta esatta costosa: conta ogni valore distinto, archivia tutti quei conteggi, rimescolali sul tuo cluster, ordina globalmente. Per flussi di eventi ad alta cardinalità come log di ricerca o clickstream, questo è un processo batch, non una query live.
Gli sketch di Approximate top-K tracciano i tuoi elementi più frequenti in memoria limitata e ti consentono di unire partizioni e finestre temporali per estrarre i risultati istantaneamente. Gli elementi rari potrebbero essere scartati, il che va bene, perché non è quello che stai cercando.
Con approx_top_k_combine, la tua dashboard "di tendenza questa settimana" diventa un'unione di 168 sketch precalcolati piuttosto che una scansione di miliardi di eventi grezzi. Per i carichi di lavoro in streaming, unisci lo sketch di ogni micro-batch in un totale corrente e visualizza i risultati in tempo reale. Quello che una volta era un processo batch diventa una classifica live.
Contare i clienti distinti è una query. Sommare le loro entrate è un'altra. Fare entrambe le cose correttamente, senza contare due volte i clienti che appaiono in più periodi, è la sfida.
Considera una domanda analitica comune: "Quanti clienti unici hanno effettuato un acquisto questo mese e qual è stata la loro entrate totale per regione?" Tipicamente, inizieresti con un ampio GROUP BY, deduplicando gli ID cliente mentre sommi gli acquisti su miliardi di transazioni. E non puoi semplicemente aggiungere i risultati precedenti, i clienti che appaiono in entrambi i periodi vengono contati due volte e le loro entrate sovrastimate.
Gli sketch Tuple risolvono questo problema combinando il conteggio dei distinti e l'aggregazione delle metriche in un'unica struttura unibile.
Ogni sketch mappa un cliente distinto alla sua spesa aggregata. Quando unisci i dati tra giorni diversi, i conteggi dei clienti si deduplicano automaticamente e le somme delle entrate si accumulano. Il calcolo incrementale esatto ti richiederebbe di rielaborare i dati grezzi ogni volta che l'intervallo di dati cambia.
Famiglia di funzioni | Casi d'uso |
Sketch di quantili KLL | Percentili (P50, P90, P99) |
Sketch Theta | Operazioni insiemistiche su valori distinti |
Approximate Top-K | Elementi più frequenti |
Sketch Tuple | Conteggi distinti e aggregazioni di metriche |
Quando usare gli sketch: Dashboard, analisi di trend, monitoraggio, attribuzione marketing -- qualsiasi query per cui sono accettabili risposte approssimate. Più grande è il tuo dataset, meglio è. Se non sei sicuro di quale sketch usare, chiedi a Genie Code di aiutarti a scegliere quello giusto.
Quando rimanere esatti: Audit finanziari, reporting di conformità, o qualsiasi caso d'uso in cui i requisiti normativi o aziendali richiedono valori precisi.
Queste quattro famiglie di funzioni trasformano query di lunga durata nelle più economiche nel tuo data warehouse. Crea gli sketch una volta durante l'ETL, memorizzali in Delta, uniscili in lettura. I dati grezzi sono ancora lì quando arrivano gli auditor. Per tutto il resto, un margine di errore dell'1% e un'accelerazione di 1000 volte sono un compromesso benvenuto.
Tutte le funzioni funzionano in pipeline SQL, DataFrame e Structured Streaming. Gli sketch creati in Spark sono interoperabili con altri sistemi nell'ecosistema Apache DataSketches. Vedi la documentazione (1, 2, 3, 4) per le firme delle funzioni e gli esempi e inizia oggi stesso con gli sketch.
Menzione speciale a Christopher Boumalhab (cboumalh su GitHub) per aver implementato e contribuito con le famiglie di funzioni Theta sketch e Tuple sketch in Apache Spark.
(Questo post sul blog è stato tradotto utilizzando strumenti basati sull'intelligenza artificiale) Post originale
Iscriviti al nostro blog e ricevi gli ultimi articoli direttamente nella tua casella di posta.