Disegni

GoogleSQL per BigQuery supporta gli schizzi di dati. Uno schizzo dei dati è un riepilogo compatto di un'aggregazione dei dati. Cattura tutte le informazioni necessarie per estrarre un risultato dell'aggregazione, continuare un'aggregazione dei dati o unirli con un altro schizzo, consentendo la riaggregazione.

Il calcolo di una metrica mediante uno schizzo è sostanzialmente meno costoso del 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 di query.

Inoltre, le cardinalità di calcolo, come il numero di utenti distinti, o i quantili, come la durata mediana della visita, senza schizzi sono di solito possibili solo eseguendo i 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 consiste nell'archiviare gli schizzi nella tabella. Ogni schizzo è una rappresentazione approssimativa e compatta di una determinata proprietà di input, ad esempio cardinalità, che puoi archiviare, unire (o riaggregare) 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 (riaggregando) gli schizzi per ogni prodotto. Puoi anche stimare la durata mediana della visita con schizzi quantilici che puoi anche unire ed eseguire query.

Poiché uno schizzo ha una compressione con perdita dei dati originali, introduce un errore statistico rappresentato da un limite di errore o un intervallo di confidenza (CI). Per la maggior parte delle applicazioni, questo tipo di incertezza è minimo. Ad esempio, un tipico disegno di conteggio della cardinalità ha un errore relativo di circa l'1% nel 95% di tutti i casi. Uno schizzo deve avere un certo grado di precisione, o precisione, per calcoli più rapidi e meno costosi e con minore spazio di archiviazione.

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

  • Rappresentano un valore aggregato approssimativo per una metrica specifica
  • È compatto
  • È una forma serializzata di una struttura di dati sublineare in memoria
  • In genere ha una dimensione fissa e asintoticamente minore rispetto all'input
  • Può introdurre un errore statistico da determinare con un livello di precisione,
  • Possono essere uniti ad altri schizzi per riepilogare l'unione dei set di dati sottostanti

Riaggregazione con unione di schizzi

Gli schizzi ti consentono di archiviare e unire i dati per una riaggregazione efficiente. Ciò rende gli schemi particolarmente utili per le viste materializzate dei set di dati. Puoi unire gli schemi per creare un riepilogo di più stream di dati sulla base di schemi 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. Riaggregando gli schizzi giornalieri uniti puoi evitare di leggere l'input completo del set di dati.

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

Integrazione di Sketch

Puoi integrare gli schizzi con altri sistemi. Ad esempio, puoi creare schemi 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 hai bisogno di stimare la cardinalità e non hai bisogno della 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 determinato mese (metriche MAU o 28DAU), utilizza uno schizzo HLL++.

Disegni HLL++

HyperLogLog++ (HLL++) è un algoritmo di disegno per la stima della cardinalità. HLL++ si basa sull'articolo HyperLogLog in Practice, in cui ++ 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à piccole e una correzione empirica del bias per le stime di cardinalità piccole.

Precisione

Gli schizzi HLL++ supportano una precisione personalizzata. La seguente tabella mostra i valori di precisione supportati, la dimensione massima dell'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 (predefinita) 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 schizzo in formato HLL++ quando lo inizializzi con la funzione HLL_COUNT.INIT.

Eliminazione

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

Ulteriori dettagli

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

Funzioni di aggregazione approssimativa

In alternativa a funzioni di approssimazione basate su schizzi specifiche, 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 gli schizzi per riaggregarli come altri tipi di schizzi. Le funzioni aggregate approssimative sono progettate per eseguire query rapide basate su schizzi senza configurazione dettagliata.

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