- Kategorien:
Aggregatfunktionen (Cardinality Estimation) , Fensterfunktionen
DATASKETCHES_HLL¶
Gibt eine Approximation an die spezifische Kardinalität der Eingabe zurück (das heißt, DATASKETCHES_HLL(col1)
gibt eine Approximation an COUNT(DISTINCT col1)
zurück).
Diese Funktion ist eine Version der Funktion HLL HyperLogLog, die binäre Skizzen in dem von Apache DataSketches verwendeten Format lesen kann. Weitere Informationen finden Sie in der Dokumentation zu Apache DataSketches.
Syntax¶
Aggregatfunktion
DATASKETCHES_HLL( [ DISTINCT ] <expr1> [ , <max_log_k> ] )
Fensterfunktionen
DATASKETCHES_HLL( [ DISTINCT ] <expr1> [ , <max_log_k> ] )
OVER ( [ PARTITION BY <expr2> ] )
Erforderliche Argumente¶
expr1
Der Ausdruck, für den Sie die Anzahl der unterschiedlichen Werte wissen möchten.
Optionale Argumente¶
max_log_k
Der maximale Wert von K in log2, um das Objekt „datasketches HLL“ zu initialisieren. Geben Sie einen INTEGER-Wert zwischen 4 und 21 ein. Weitere Informationen finden Sie in der Dokumentation zu Apache DataSketches.
Standardeinstellung: 12
expr2
Der optionale Ausdruck, der verwendet wird, um Zeilen in Partitionen zu gruppieren.
Rückgabewerte¶
Die Funktion gibt einen Wert vom Typ DOUBLE zurück.
Wenn die Eingabe leer ist, lautet die Ausgabe 0.0
.
Nutzungshinweise¶
DISTINCT wird unterstützt, hat aber keine Auswirkungen.
Die Funktion unterstützt Argumente, die Werte der folgenden Datentypen sind:
Zeichenfolgen- und Binärdatentypen (zum Beispiel VARCHAR und BINARY).
Die folgenden Funktionsaufrufe werden zum Beispiel unterstützt:
SELECT DATASKETCHES_HLL_ACCUMULATE(1::TEXT);
SELECT DATASKETCHES_HLL_ACCUMULATE(TO_BINARY(HEX_ENCODE(1), 'HEX'));
Datentypen für Fließkommazahlen (zum Beispiel FLOAT und DOUBLE)
Die DataSketches-Bibliothek wandelt diese Werte in DOUBLE-Werte um.
Datentypen für Festkommazahlen (zum Beispiel INTEGER und NUMERIC).
Die Funktion unterstützt nur numerische Typen mit der Skala 0. Sie können jedoch numerische Werte mit einer anderen Skala als 0 in einen Datentyp für eine Gleitkommazahl übertragen.
Die DataSketches-Bibliothek wandelt diese Werte im Bereich eines 64-Bit-INTEGER-Werts in einen 64-Bit-INTEGER-Wert um.
Die DataSketches-Bibliothek wandelt INTEGER-Werte nicht direkt um, die den 64-Bit-INTEGER-Bereich überschreiten (z. B. 128-Bit-Ganzzahl-Werte). Snowflake unterstützt diese Werte jedoch weiterhin, indem sie automatisch in DOUBLE-Werte umgewandelt werden, die DataSketches unterstützt. Diese Verhaltensweise ist identisch mit der Verhaltensweise der
datasketches-python
-Bibliothek.
Werte von anderen Datentypen werden nicht unterstützt. Zum Beispiel werden die Werte VARIANT und ARRAY nicht unterstützt.
Weitere Informationen zu NULL-Werten und Aggregatfunktionen finden Sie unter Aggregatfunktionen und NULL-Werte.
Wenn diese Funktion als Fensterfunktion aufgerufen wird, wird Folgendes nicht unterstützt:
Eine ORDER BY-Klausel innerhalb der OVER-Klausel.
Explizite Fensterrahmen.
Beispiele¶
Erstellen Sie eine Tabelle, und fügen Sie Zeilen ein:
CREATE OR REPLACE TABLE datasketches_demo(v INT, g INT);
INSERT INTO datasketches_demo SELECT 1, 1;
INSERT INTO datasketches_demo SELECT 2, 1;
INSERT INTO datasketches_demo SELECT 2, 1;
INSERT INTO datasketches_demo SELECT 2, 1;
INSERT INTO datasketches_demo SELECT 1, 2;
INSERT INTO datasketches_demo SELECT 1, 2;
INSERT INTO datasketches_demo SELECT 4, 2;
INSERT INTO datasketches_demo SELECT 4, 2;
INSERT INTO datasketches_demo SELECT 5, 2;
Die folgenden Beispiele verwenden die Daten aus der Tabelle.
Geschätzte Kardinalität der gruppierten Daten in einer Spalte liefern¶
Verwenden Sie die Funktion DATASKETCHES_HLL, um die spezifische Kardinalität der Daten in Spalte v
gruppiert nach den Werten in Spalte g
zu approximieren.
SELECT g,
DATASKETCHES_HLL(v),
COUNT(DISTINCT v)
FROM datasketches_demo GROUP BY g;
+---+---------------------+-------------------+
| G | DATASKETCHES_HLL(V) | COUNT(DISTINCT V) |
|---+---------------------+-------------------|
| 1 | 2.000000005 | 2 |
| 2 | 3.000000015 | 3 |
+---+---------------------+-------------------+
Die Ausgabe zeigt, dass es für den Wert 1
in der Spalte g
etwa zwei verschiedene Werte in der Spalte v
gibt (d. h. 1
und 2
). Für den Wert 2
in der Spalte g
gibt es etwa drei verschiedene Werte in der Spalte v
(d. h. 1
, 4
und 5
). Der Aufruf COUNT(DISTINCT v))
gibt die genaue Anzahl der unterschiedlichen Werte zurück, anstatt einer Schätzung.
Wenn Sie die Funktion DATASKETCHES_HLL_ACCUMULATE verwenden, um aus den gruppierten Daten binäre Skizzen zu erstellen, gibt die Funktion DATASKETCHES_HLL_ESTIMATE die gleichen Ergebnisse für die kumulierten Skizzen zurück. Ein Beispiel dazu finden Sie unter Kardinalitätsschätzung für kumulierte binäre Skizzen zurückgeben.
Geschätzte Kardinalität aller Daten in einer Spalte liefern¶
Verwenden Sie die Funktion DATASKETCHES_HLL, um die spezifische Kardinalität aller Daten in der Spalte v
zu approximieren.
SELECT DATASKETCHES_HLL(v),
COUNT(DISTINCT v)
FROM datasketches_demo;
+---------------------+-------------------+
| DATASKETCHES_HLL(V) | COUNT(DISTINCT V) |
|---------------------+-------------------|
| 4.00000003 | 4 |
+---------------------+-------------------+
Die Ausgabe zeigt, dass es etwa vier verschiedene Werte in der Spalte v
gibt (d. h. 1
, 2
, 4
und 5
). Der Aufruf COUNT(DISTINCT v))
gibt die genaue Anzahl der unterschiedlichen Werte zurück, anstatt einer Schätzung.
Wenn Sie die Funktion DATASKETCHES_HLL_ACCUMULATE verwenden, um binäre Skizzen aus den gruppierten Daten zu erstellen, und dann die Funktion DATASKETCHES_HLL_COMBINE verwenden, um die Skizzen zu einer einheitlichen Skizze zusammenzufassen, gibt die Funktion DATASKETCHES_HLL_ESTIMATE die gleichen Ergebnisse für die einheitliche Skizze zurück. Ein Beispiel dazu finden Sie unter Kardinalitätsschätzung für kombinierte binäre Skizzen zurückgeben.