HyperLogLog++-Funktionen in Standard-SQL

BigQuery unterstützt die folgenden ungefähren Aggregatfunktionen mithilfe des Algorithmus HyperLogLog++. Eine Erläuterung der Arbeitsweise ungefährer Aggregatfunktionen finden Sie unter Ungefähre Aggregation.

HLL_COUNT.INIT

HLL_COUNT.INIT(input [, precision])

Beschreibung

Eine Aggregatfunktion, die einen oder mehrere input-Werte annimmt und in eine HyperLogLog ++-Skizze aggregiert. Jede Skizze wird mithilfe des Datentyps BYTES dargestellt. Anschließend können Sie Skizzen mit HLL_COUNT.MERGE oder HLL_COUNT.MERGE_PARTIAL zusammenführen. Wenn keine Zusammenführung erforderlich ist, können Sie mithilfe von HLL_COUNT.EXTRACT die endgültige Anzahl unterschiedlicher Werte aus der Skizze extrahieren.

Diese Funktion unterstützt den optionalen Parameter precision. Dieser Parameter definiert die Genauigkeit der Schätzung, wobei jedoch für die Verarbeitung der Skizzen oder für deren Sicherung auf einem Laufwerk zusätzlicher Speicher in Anspruch genommen wird. Die folgende Tabelle zeigt die zulässigen Genauigkeitswerte, die maximale Skizzengröße pro Gruppe und das Konfidenzintervall (CI) typischer Genauigkeiten:

Genauigkeit Max. Skizzengröße (KiB) CI CI CI
10 1 ±1,63 % ±3,25 % ±6,50 %
11 2 ±1,15 % ±2,30 % ±4,60 %
12 4 ±0,81 % ±1,63 % ±3,25 %
13 8 ±0,57 % ±1,15 % ±1,72 %
14 16 ±0,41 % ±0,81 % ±1,22 %
15 (Standard) 32 ±0,29 % ±0,57 % ±0,86 %
16 64 ±0,20 % ±0,41 % ±0,61 %
17 128 ±0,14 % ±0,29 % ±0,43 %
18 256 ±0,10 % ±0,20 % ±0,41 %
19 512 ±0,07 % ±0,14 % ±0,29 %
20 1.024 ±0,05 % ±0,10 % ±0,20 %
21 2.048 ±0,04 % ±0,07 % ±0,14 %
22 4.096 ±0,03 % ±0,05 % ±0,10 %
23 8.192 ±0,02 % ±0,04 % ±0,07 %
24 16.384 ±0,01 % ±0,03 % ±0,05 %

Wenn die Eingabe NULL ist, gibt diese Funktion NULL zurück.

Weitere Informationen finden Sie unter HyperLogLog in der Praxis: Algorithmische Entwicklung eines modernen Algorithmus zur Abschätzung der Kardinalität.

Unterstützte Eingabetypen

INT64, NUMERIC, STRING, BYTES

Rückgabetyp

BYTES

Beispiel

SELECT
  HLL_COUNT.INIT(respondent) AS respondents_hll,
  flavor,
  country
FROM UNNEST([
  STRUCT(1 AS respondent, "Vanilla" AS flavor, "CH" AS country),
  (1, "Chocolate", "CH"),
  (2, "Chocolate", "US"),
  (2, "Strawberry", "US")])
GROUP BY flavor, country;

HLL_COUNT.MERGE

HLL_COUNT.MERGE(sketch)

Beschreibung

Eine Aggregatfunktion, die die Kardinalität mehrerer Skizzen von HyperLogLog++-Sätzen durch Berechnen ihrer Vereinigung zurückgibt.

Jede sketch muss dieselbe Genauigkeit haben und für denselben Typ initialisiert sein. Versuche, Skizzen mit unterschiedlicher Präzision oder für verschiedene Typen zusammenzuführen, führen zu einem Fehler. Beispielsweise können Sie eine aus INT64-Daten initialisierte Skizze nicht mit einer aus STRING-Daten initialisierten Skizze zusammenführen.

Diese Funktion ignoriert beim Zusammenführen von Skizzen die NULL-Werte. Wenn Nullzeilen oder nur NULL-Werte zusammengeführt werden, gibt die Funktion 0 zurück.

Unterstützte Eingabetypen

BYTES

Rückgabetyp

INT64

Beispiel

SELECT HLL_COUNT.MERGE(respondents_hll) AS num_respondents, flavor
FROM (
  SELECT
    HLL_COUNT.INIT(respondent) AS respondents_hll,
    flavor,
    country
  FROM UNNEST([
    STRUCT(1 AS respondent, "Vanilla" AS flavor, "CH" AS country),
    (1, "Chocolate", "CH"),
    (2, "Chocolate", "US"),
    (2, "Strawberry", "US")])
  GROUP BY flavor, country)
GROUP BY flavor;

HLL_COUNT.MERGE_PARTIAL

HLL_COUNT.MERGE_PARTIAL(sketch)

Beschreibung

Eine Aggregatfunktion, die eine oder mehrere HyperLogLog++-sketch-Eingaben annimmt und zu einer neuen Skizze zusammenführt.

Diese Funktion gibt NULL zurück, wenn keine Eingabe vorhanden ist oder alle Eingaben NULL sind.

Unterstützte Eingabetypen

BYTES

Rückgabetyp

BYTES

Beispiel

SELECT HLL_COUNT.MERGE_PARTIAL(respondents_hll) AS num_respondents, flavor
FROM (
  SELECT
    HLL_COUNT.INIT(respondent) AS respondents_hll,
    flavor,
    country
  FROM UNNEST([
    STRUCT(1 AS respondent, "Vanilla" AS flavor, "CH" AS country),
    (1, "Chocolate", "CH"),
    (2, "Chocolate", "US"),
    (2, "Strawberry", "US")])
  GROUP BY flavor, country)
GROUP BY flavor;

HLL_COUNT.EXTRACT

HLL_COUNT.EXTRACT(sketch)

Beschreibung

Eine Skalarfunktion, die eine Kardinalitätsschätzung einer einzelnen HyperLogLog ++-Skizze extrahiert.

Wenn sketch NULL ist, gibt diese Funktion eine Kardinalitätsschätzung von 0 zurück.

Unterstützte Eingabetypen

BYTES

Rückgabetyp

INT64

Beispiel

SELECT
  flavor,
  country,
  HLL_COUNT.EXTRACT(respondents_hll) AS num_respondents
FROM (
  SELECT
    HLL_COUNT.INIT(respondent) AS respondents_hll,
    flavor,
    country
  FROM UNNEST([
    STRUCT(1 AS respondent, "Vanilla" AS flavor, "CH" AS country),
    (1, "Chocolate", "CH"),
    (2, "Chocolate", "US"),
    (2, "Strawberry", "US")])
  GROUP BY flavor, country);

+------------+---------+-----------------+
| flavor     | country | num_respondents |
+------------+---------+-----------------+
| Vanilla    | CH      | 1               |
| Chocolate  | CH      | 1               |
| Chocolate  | US      | 1               |
| Strawberry | US      | 1               |
+------------+---------+-----------------+