Schizzi

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

Il calcolo di una metrica mediante uno schizzo è notevolmente meno costoso rispetto al calcolo di un valore esatto. Se il calcolo è troppo lento o richiede troppo spazio di archiviazione temporaneo, utilizza gli schizzi per ridurre il tempo e le risorse delle query.

Inoltre, il calcolo delle cardinalità, come il numero di utenti distinti o i quantili, come la durata mediana della visita, senza schizzi è di solito possibile solo eseguendo i job sui dati non elaborati, perché non è più possibile combinare i dati già aggregati.

Considera una tabella con i seguenti dati:

Prodotto Numero di utenti Durata mediana delle visite
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 schizzo è una rappresentazione approssimativa e compatta di una determinata proprietà di input, come la cardinalità, che puoi archiviare, unire (o riaggregare) e interrogare 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 (riaggregando) gli schizzi di ciascun prodotto. Puoi anche stimare la durata mediana della visita con bozze dei quantili che puoi unire ed eseguire query allo stesso modo.

Poiché uno schizzo ha 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 è minima. Ad esempio, un tipico schizzo con il conteggio delle cardinalità ha un errore relativo di circa l'1% nel 95% di tutti i casi. Uno schizzo scambia un po' di accuratezza, o precisione, per calcoli più veloci e meno costosi e meno spazio di archiviazione.

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

  • Rappresenta un aggregato approssimativo per una metrica specifica
  • È compatto
  • È una forma serializzata di una struttura di dati sublineare in memoria
  • In genere è una dimensione fissa e asintoticamente più piccola dell'input
  • Può introdurre un errore statistico che determini con un livello di precisione
  • Può essere unito ad altri schizzi per riepilogare l'unione dei set di dati sottostanti

Riaggregazione con unione degli schizzi

Gli schizzi ti consentono di archiviare e unire i dati per una riaggregazione efficiente. Questo rende gli schizzi 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 agli schizzi parziali creati per ogni flusso.

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. Riaggregare i disegni giornalieri uniti aiuta a evitare di leggere l'input completo del set di dati.

La riaggregazione di uno schizzo è utile anche nell'elaborazione analitica online (OLAP). Puoi unire gli schizzi per creare una proprietà di aggregazione di un cubo OLAP, in cui lo schizzo riassume i dati lungo una o più dimensioni specifiche del cubo. I raggruppamenti OLAP non sono possibili con conteggi distinti reali.

Integrazione schizzo

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

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

  • C++
  • Go
  • Java
  • Python

Stima la cardinalità senza eliminazioni

Se devi stimare la cardinalità e non ti serve la possibilità 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 dato mese (metriche MAU o 28DAU), utilizza uno schizzo HLL++.

Schizzi HLL++

HyperLogLog++ (HLL++) è un algoritmo di disegno per stimare la cardinalità. HLL++ si basa sull'articolo HyperLogLog in Practice, dove ++ indica le modifiche apportate all'algoritmo HyperLogLog.

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

HLL++ stima le cardinalità molto piccole e molto grandi. HLL++ include una funzione hash a 64 bit, una rappresentazione sparsa per ridurre i requisiti di memoria per le stime di cardinalità ridotta e la correzione della distorsione empirica per le stime di cardinalità ridotte.

Precisione

Gli schizzi HLL++ supportano la precisione personalizzata. La tabella seguente mostra i valori di precisione supportati, la dimensione massima di archiviazione e l'intervallo di confidenza (CI) dei livelli di precisione tipici:

Precisione Dimensione massima 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 di uno schizzo HLL++ quando lo inizializza con la funzione HLL_COUNT.INIT.

Eliminazione

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

Ulteriori dettagli

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

Funzioni di aggregazione approssimativa

In alternativa alle funzioni di approssimazione specifiche basate su schizzi, GoogleSQL fornisce funzioni aggregate approssimative predefinite. Queste funzioni aggregate approssimative supportano gli schizzi per stime comuni, come conteggio distinto, quantili e conteggio massimo, ma non consentono una precisione personalizzata. Inoltre, non espongono né archiviano lo schizzo per riaggregarlo, come accade per altri tipi di schizzi. Le funzioni aggregate approssimative sono progettate per eseguire rapidamente query basate su schizzi senza una configurazione dettagliata.

Per un elenco di funzioni di aggregazione approssimate che puoi utilizzare con l'approssimazione basata su schizzo, consulta Funzioni di aggregazione approssimate.