Schizzi

GoogleSQL per BigQuery supporta gli sketch di dati. Uno schizzo di dati è un riepilogo compatto di un'aggregazione di dati. Acquisisce tutte le informazioni necessarie per estrarre un risultato di aggregazione, continuare un'aggregazione dei dati o unire un altro schizzo, consentendo la riaggregazione.

Il calcolo di una metrica utilizzando uno schizzo è molto meno costoso del calcolo di un valore esatto. Se il calcolo è troppo lento o richiede troppo spazio di archiviazione temporaneo, utilizza gli sketch per ridurre il tempo e le risorse di query.

Inoltre, l'elaborazione di cardinali, come il numero di utenti distinti, o di quantili, come la durata media della visita, senza gli sketch è in genere possibile solo eseguendo job sui dati non elaborati, perché i dati già aggregati non possono più essere combinati.

Considera una tabella con i seguenti dati:

Prodotto Numero di utenti Durata mediana della visita
Prodotto A 500 milioni 10 minuti
Prodotto B 20 milioni 2 minuti

Non è possibile calcolare il numero totale di utenti per entrambi i prodotti perché non sappiamo quanti utenti hanno utilizzato entrambi i prodotti nella tabella.

Una soluzione è archiviare gli schizzi nella tabella. Ogni sketch è una rappresentazione approssimativa e compatta di una determinata proprietà di input, ad esempio la cardinalità, che puoi memorizzare, unire (o aggregare di nuovo) ed eseguire query per ottenere risultati quasi esatti. Nell'esempio precedente, puoi stimare il numero di utenti distinti per il prodotto A e il prodotto B creando e unendo (aggregandole di nuovo) le bozze per ciascun prodotto. Puoi anche stimare la durata mediana della visita con gli sketch di quantili, che puoi anche unire e sottoporre a query.

Poiché uno schizzo presenta una compressione con perdita dei dati originali, introduce un errore statistico rappresentato da un limite di errore o da un intervallo di confidenza (CI). Per la maggior parte delle applicazioni, questa incertezza è ridotta. Ad esempio, uno sketch tipico per il conteggio della cardinalità ha un errore relativo di circa l'1% nel 95% dei casi. Uno schizzo sacrifica un po' di accuratezza, o precisione, in cambio di calcoli più rapidi e meno costosi e di meno spazio di archiviazione.

In sintesi, uno schizzo ha le seguenti proprietà principali:

  • Rappresenta un valore aggregato approssimativo per una metrica specifica
  • È compatto
  • È una forma serializzata di una struttura di dati in-memory sublineare
  • È in genere di dimensioni fisse e asintoticamente inferiore all'input
  • Può introdurre un errore statistico che puoi determinare con un livello di precisione
  • Può essere unito ad altri sketch per riepilogare l'unione dei set di dati sottostanti

Riaggregazione con l'unione di schizzi

Gli sketch ti consentono di archiviare e unire i dati per una ricoaggregazione efficiente. Questo rende gli sketch particolarmente utili per le viste materializzate dei set di dati. Puoi unire gli schizzi per creare un riepilogo di più stream di dati in base a schizzi parziali creati per ogni stream.

Ad esempio, se crei uno schizzo per il numero stimato di utenti distinti ogni giorno, puoi ottenere il numero di utenti distinti negli ultimi sette giorni unendo gli schizzi giornalieri. La riaggregazione degli schizzi giornalieri uniti ti aiuta a evitare di leggere l'input completo del set di dati.

La ricoaggregazione degli sketch è utile anche nell'elaborazione analitica online (OLAP). Puoi unire gli sketch per creare un aggregato di un cubo OLAP, in cui lo sketch riassume i dati in base a una o più dimensioni specifiche del cubo. I raggruppamenti OLAP non sono possibili con conteggi distinti veri.

Integrazione di Sketch

Puoi integrare gli schizzi con altri sistemi. Ad esempio, puoi creare sketch in applicazioni esterne, come Dataflow, Apache Spark e ZetaSketch, per poi utilizzarli in GoogleSQL o viceversa.

Oltre a GoogleSQL, puoi utilizzare gli sketch con i seguenti linguaggi di programmazione:

  • C++
  • Vai
  • Java
  • Python

Stimare la cardinalità senza eliminazioni

Se devi stimare la cardinalità e non hai bisogno di eliminare elementi dallo schizzo, utilizza uno schizzo HLL++.

Ad esempio, per ottenere il numero di utenti unici che hanno utilizzato attivamente un prodotto in un determinato mese (metriche MAU o 28DAU), utilizza uno sketch HLL++.

Sketch HLL++

HyperLogLog++ (HLL++) è un algoritmo di sketching per la stima della cardinalità. HLL++ si basa sul documento HyperLogLog in Practice, dove il simbolo ++ indica le modifiche apportate all'algoritmo HyperLogLog.

La cardinalità è il numero di elementi distinti nell'input per uno schizzo. Ad esempio, puoi utilizzare uno sketch HLL++ per ottenere il numero di utenti unici che hanno aperto un'applicazione.

HLL++ stima cardinalità molto piccole e molto grandi. HLL++ include una funzione di hashing a 64 bit, una rappresentazione sparse per ridurre i requisiti di memoria per le stime di cardinalità ridotte e una correzione del bias empirico per le stime di cardinalità ridotte.

Precisione

Gli sketch HLL++ supportano la precisione personalizzata. La tabella seguente mostra i valori di precisione supportati, le dimensioni massime dello spazio di archiviazione e l'intervallo di confidenza (CI) dei livelli di precisione tipici:

Precisione Dimensioni massime dello spazio di archiviazione CI 65% CI 95% CI 99%
10 1 KiB + 28 B ±3,25% ±6,50% ±9,75%
11 2 KiB + 28 B ±2,30% ±4,60% ±6,89%
12 4 KiB + 28 B ±1,63% ±3,25% ±4,88%
13 8 KiB + 28 B ±1,15% ±2,30% ±3,45%
14 16 KiB + 30 B ±0,81% ±1,63% ±2,44%
15 (valore predefinito) 32 KiB + 30 B ±0,57% ±1,15% ±1,72%
16 64 KiB + 30 B ±0,41% ±0,81% ±1,22%
17 128 KiB + 30 B ±0,29% ±0,57% ±0,86%
18 256 KiB + 30 B ±0,20% ±0,41% ±0,61%
19 512 KiB + 30 B ±0,14% ±0,29% ±0,43%
20 1024 KiB + 30 B ±0,10% ±0,20% ±0,30%
21 2048 KiB + 32 B ±0,07% ±0,14% ±0,22%
22 4096 KiB + 32 B ±0,05% ±0,10% ±0,15%
23 8192 KiB + 32 B ±0,04% ±0,07% ±0,11%
24 16384 KiB + 32 B ±0,03% ±0,05% ±0,08%

Puoi definire la precisione per uno sketch HLL++ quando lo inizializzi con la funzione HLL_COUNT.INIT.

Eliminazione

Non puoi eliminare i valori da uno sketch HLL++.

Ulteriori dettagli

Per un elenco delle funzioni che puoi utilizzare con gli sketch HLL++, consulta Funzioni HLL++.

Funzioni di aggregazione approssimativa

Come alternativa alle funzioni di approssimazione specifiche basate su sketch, GoogleSQL fornisce funzioni di aggregazione approssimativa predefinite. Queste funzioni aggregate approssimative supportano gli sketch per le stime comuni come il conteggio distinto, i quantili e il conteggio superiore, ma non consentono una precisione personalizzata. Inoltre, non espongono e non memorizzano lo sketch per la reaggregazione come altri tipi di sketch. Le funzioni di aggregazione approssimativa sono progettate per eseguire query rapide basate su sketch senza configurazione dettagliata.

Per un elenco delle funzioni di aggregazione approssimativa che puoi utilizzare con l'approssimazione basata su schizzi, consulta Funzioni di aggregazione approssimativa.