Skizzen

GoogleSQL for BigQuery unterstützt Daten-Skizzen. Eine Daten-Skizze ist eine kompakte Zusammenfassung einer Datenaggregation. Darin werden alle notwendigen Informationen erfasst, um entweder ein Aggregationsergebnis zu extrahieren, eine Datenaggregation fortzusetzen oder die Skizze mit einer anderen Skizze zusammenzuführen und damit eine neue Aggregation zu ermöglichen.

Die Berechnung eines Messwerts mit einer Skizze ist wesentlich kostengünstiger als die Berechnung eines genauen Werts. Wenn eine Berechnung zu langsam ist oder zu viel temporären Speicher erfordert, können Sie mit Skizzen die Abfragezeit und -ressourcen reduzieren.

Darüber hinaus ist die Berechnung von Kardinalitäten wie der Anzahl eindeutiger Nutzer oder Quantile wie der Medianwert für Besuchsdauer ohne Skizzen in der Regel nur möglich, wenn Jobs für die Rohdaten ausgeführt werden, da bereits aggregierte Daten nicht mehr kombiniert werden können.

Nehmen wir eine Tabelle mit den folgenden Daten:

Produkt Anzahl der Nutzer Medianwert für die Besuchsdauer
Produkt A 500 Millionen 10 Minuten
Produkt B 20 Millionen 2 Minuten

Die Gesamtzahl der Nutzer für beide Produkte kann nicht berechnet werden, da wir nicht wissen, wie viele Nutzer beide Produkte in der Tabelle verwendet haben.

Eine Lösung besteht darin, Skizzen in der Tabelle zu speichern. Jede Skizze ist eine ungefähre und kompakte Darstellung eines bestimmten Eingabeattributs (z. B. Kardinalität), die Sie speichern, zusammenführen (neu aggregieren) und für nahezu genaue Ergebnisse abfragen können. Im vorherigen Beispiel können Sie die Anzahl eindeutiger Nutzer für Produkt A und Produkt B schätzen, indem Sie die Skizzen für jedes Produkt erstellen und wieder zusammenführen. Sie können auch den Medianwert der Besuchsdauer mit Quantilskizzen schätzen, die Sie ebenfalls zusammenführen und abfragen können.

Da eine Skizze eine verlustbehaftete Komprimierung der ursprünglichen Daten aufweist, führt sie zu einem statistischen Fehler, der durch ein Fehlerlimit oder Konfidenzintervall (Confidence Interval, CI) dargestellt wird. Bei den meisten Anwendungen ist diese Unsicherheit klein. Eine typische Skizze mit Kardinalitätszählung hat beispielsweise einen relativen Fehler von etwa 1 % in 95 % aller Fälle. Skizzen weisen ein geringeres Maß an Accuracy bzw. Precision zugunsten schnellerer und kostengünstigere Berechnungen auf.

Eine Skizze hat die folgenden wesentlichen Eigenschaften:

  • Sie stellt eine ungefähre Zusammenfassung für einen bestimmten Messwert dar.
  • Sie ist kompakt.
  • Sie ist eine serialisierte Form einer sublinearen Datenstruktur im Speicher.
  • Sie ist in der Regel eine feste Größe und asymptotisch kleiner als die Eingabe.
  • Sie kann einen statistischen Fehler verursachen, den Sie mit einer Precision-Stufe ermitteln.
  • Sie kann mit anderen Skizzen zusammengeführt werden, um die Vereinigung der zugrunde liegenden Datasets zusammenzufassen.

Neuaggregation mit Skizzenzusammenführung

Skizzen ermöglichen das Speichern und Zusammenführen von Daten für eine effiziente Neuaggregation. Dadurch sind Skizzen insbesondere für materialisierte Ansichten von Datasets nützlich. Sie können Skizzen zusammenführen, um eine Zusammenfassung mehrerer Datenstreams basierend auf partiellen Skizzen zu erstellen, die für jeden Stream erstellt wurden.

Wenn Sie beispielsweise eine Skizze für die geschätzte Anzahl eindeutiger Nutzer pro Tag erstellen, können Sie die Anzahl der eindeutigen Nutzer in den letzten sieben Tagen abrufen, indem Sie die täglichen Skizzen zusammenführen. Durch das erneute Zusammenfassen der zusammengeführten täglichen Skizzen müssen Sie nicht die gesamte Eingabe des Datasets lesen.

Die Neuaggregation von Skizzen ist auch bei der analytischen Onlineverarbeitung (OLAP) nützlich. Sie können Skizzen zusammenführen, um ein Rollup eines OLAP-Cube zu erstellen, wobei die Skizze Daten zusammen mit einer oder mehreren bestimmten Dimensionen des Cube zusammenfasst. OLAP-Rollups sind nicht mit echter unterschiedlicher Anzahl möglich.

Einbindung von Skizzen

Sie können Skizzen in andere Systeme integrieren. Beispielsweise können Sie Skizzen in externen Anwendungen wie Dataflow oder Apache Spark erstellen und in GoogleSQL verwenden oder umgekehrt.

Neben GoogleSQL können Sie Skizzen in den folgenden Programmiersprachen verwenden:

  • C++
  • Go
  • Java
  • Python

Kardinalität ohne Löschungen schätzen

Wenn Sie die Kardinalität schätzen möchten und keine Notwendigkeit besteht, Elemente aus der Skizze zu löschen, verwenden Sie eine HLL++-Skizze.

Verwenden Sie beispielsweise eine HLL++-Skizze, um die Anzahl einzelner Nutzer zu erhalten, die ein Produkt in einem bestimmten Monat aktiv genutzt haben (MAU- oder 28DAU-Messwerte).

HLL++-Skizzen

HyperLogLog++ (HLL++) ist ein Skizzenalgorithmus für die Schätzung der Kardinalität. HLL++ basiert auf dem Artikel HyperLogLog in der Praxis, wobei ++ die Erweiterungen angibt, die am HyperLogLog-Algorithmus vorgenommen wurden.

Die Kardinalität ist die Anzahl einzelner Elemente in der Eingabe für eine Skizze. Sie können beispielsweise eine HLL++-Skizze verwenden, um die Anzahl der einzelnen Nutzer abzurufen, die eine Anwendung geöffnet haben.

HLL++ schätzt sehr kleine und sehr große Kardinalitäten. HLL++ umfasst eine 64-Bit-Hash-Funktion, eine dünnbesetzte Darstellung, um die Arbeitsspeicheranforderungen für kleine Kardinalitätsprognosen zu verringern, und eine empirische Verzerrungskorrektur für kleine Kardinalitätsschätzungen.

HLL++-Skizzen unterstützen benutzerdefinierte Genauigkeit. Die folgende Tabelle zeigt die unterstützten Precision-Werte, die maximale Speichergröße und das Konfidenzintervall (CI) typischer Precision-Stufen:

Precision Max. Speichergröße 65 % CI 95 % CI 99 % CI
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 (Standard) 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 1.024 KiB + 30 B ±0,10 % ±0,20 % ±0,30%
21 2.048 KiB + 32 B ±0,07 % ±0,14 % ±0,22%
22 4.096 KiB + 32 B ±0,05 % ±0,10 % ±0,15%
23 8.192 KiB + 32 B ±0,04 % ±0,07 % ±0,11%
24 16.384 KiB + 32 B ±0,03 % ±0,05 % ±0,08%

Sie können die Precision für eine HLL++-Skizze definieren, wenn Sie sie mit der Funktion HLL_COUNT.INIT initialisieren.

Sie können keine Werte aus einer HLL++-Skizze löschen.

Eine Liste der Funktionen, die Sie mit HLL++-Skizzen verwenden können, finden Sie unter HLL++-Funktionen.

Ungefähre Aggregatfunktionen

Als Alternative zu bestimmten HLL++-, D3A- oder KLL-Funktionen für skizzenbasierte Näherung bietet GoogleSQL vordefinierte ungefähre Aggregatfunktionen. Diese ungefähren Aggregatfunktionen unterstützen Skizzen für häufige Schätzungen wie eindeutige Anzahl, Quantile und höchste Anzahl, lassen aber keine benutzerdefinierte Precision zu. Außerdem wird die Skizze nicht für eine Neuaggregation wie anderen Arten von Skizzen freigegeben und gespeichert. Mit den ungefähren Aggregatfunktionen können schnelle skizzenbasierte Abfragen ohne detaillierte Konfiguration ausgeführt werden.

Eine Liste der ungefähren Aggregatfunktionen, die Sie mit skizzenbasierter Näherung verwenden können, finden Sie unter Ungefähre Aggregatfunktionen.