- Kategorien:
Aggregationsfunktionen (Kardinalitätsschätzung), Fensterfunktionen
HLL_ACCUMULATE¶
Gibt am Ende der Aggregation den HyperLogLog-Status zurück.
Weitere Informationen zu HyperLogLog finden Sie unter Schätzen der Anzahl diskreter Werte.
HLL verwirft seinen Zwischenstatus, sobald die endgültige Kardinalitätsschätzung zurückgegeben wird. In fortgeschrittenen Anwendungsfällen, beispielsweise der inkrementellen Kardinalitätsschätzung beim Massenladen, soll der Zwischenstatus möglicherweise beibehalten werden. Der Zwischenstatus kann später mit anderen Zwischenstatus kombiniert (zusammengeführt) oder in externe Tools exportiert werden.
Anders als HLL gibt HLL_ACCUMULATE keine Kardinalitätsschätzung zurück. Stattdessen wird der letzte Schätzungsschritt übersprungen und der algorithmische Status selbst zurückgegeben. Der Status ist ein Binärwert mit höchstens 4.096 Bytes. Weitere Informationen finden Sie unter Schätzen der Anzahl diskreter Werte.
- Siehe auch:
Syntax¶
HLL_ACCUMULATE( [ DISTINCT ] <expr> )
HLL_ACCUMULATE(*)
Argumente¶
expr
Der Ausdruck, für den Sie die Kardinalität (Anzahl verschiedener Werte) schätzen möchten. Dies ist normalerweise ein Spaltenname, kann jedoch ein allgemeinerer Ausdruck sein.
Nutzungshinweise¶
DISTINCT kann als Argument eingefügt werden, hat jedoch keine Auswirkungen.
Beispiele¶
Dieses Beispiel veranschaulicht einen Schritt zur Schätzung der Anzahl verschiedener Postleitzahlen in kanadischen Provinzen. In diesem Schritt berechnen wir die approximierte Anzahl unterschiedlicher Postleitzahlen in Manitoba und speichern eine interne Darstellung des „Status“ der Berechnung, die wir später mit ähnlichen Informationen für andere Provinzen kombinieren können:
CREATE TABLE temporary_hll_state_for_manitoba AS SELECT HLL_ACCUMULATE(postal_code) as h_a_p_c FROM postal_data WHERE province = 'Manitoba' ;
Hier ist ein weiteres Beispiel. In diesem Beispiel wird die Verwendung der drei verwandten Funktionen HLL_ACCUMULATE
, HLL_ESTIMATE
und HLL_COMBINE
veranschaulicht.
Erstellen Sie eine einfache Tabelle und Daten:
-- Create a sequence to use to generate values for the table. CREATE OR REPLACE SEQUENCE seq92; CREATE OR REPLACE TABLE sequence_demo (c1 INTEGER DEFAULT seq92.nextval, dummy SMALLINT); INSERT INTO sequence_demo (dummy) VALUES (0); -- Double the number of rows a few times, until there are 8 rows: INSERT INTO sequence_demo (dummy) SELECT dummy FROM sequence_demo; INSERT INTO sequence_demo (dummy) SELECT dummy FROM sequence_demo; INSERT INTO sequence_demo (dummy) SELECT dummy FROM sequence_demo;Erstellen Sie eine Tabelle, die den „Status“ enthält, der die aktuellen approximierten Kardinalitätsinformationen für die Tabelle namens sequence_demo darstellt:
CREATE OR REPLACE TABLE resultstate1 AS ( SELECT hll_accumulate(c1) AS rs1 FROM sequence_demo);Erstellen Sie nun eine zweite Tabelle, und fügen Sie Daten hinzu. (In einer realistischeren Situation hätte der Benutzer möglicherweise mehr Daten in die erste Tabelle geladen und die Daten anhand der Zeit, zu der die Daten geladen wurden, in nicht überlappende Sätze unterteilt.)
CREATE OR REPLACE TABLE test_table2 (c1 INTEGER); -- Insert data. INSERT INTO test_table2 (c1) SELECT c1 + 4 FROM sequence_demo;Rufen Sie die „Statusinformationen“ nur für die neuen Daten ab.
CREATE OR REPLACE TABLE resultstate2 AS (SELECT hll_accumulate(c1) AS rs1 FROM test_table2);Kombinieren Sie die „Statusinformationen“ für die zwei Mengen von Zeilen:
CREATE OR REPLACE TABLE combined_resultstate (c1) AS SELECT hll_combine(rs1) AS apc1 FROM ( SELECT rs1 FROM resultstate1 UNION ALL SELECT rs1 FROM resultstate2 ) ;Ermitteln Sie die approximierte Kardinalität der kombinierten Zeilenmenge:
SELECT hll_estimate(c1) FROM combined_resultstate;Ausgabe:
+------------------+ | HLL_ESTIMATE(C1) | |------------------| | 12 | +------------------+