Kategorien:

Aggregatfunktionen (Kardinalitätsschätzung), Fensterfunktionen

HLL_ESTIMATE

Gibt die Kardinalitätsschätzung für den angegebenen HyperLogLog-Status zurück.

Ein von HLL_ACCUMULATE und HLL_COMBINE erzeugter HyperLogLog-Status kann verwendet werden, um mit der HLL_ESTIMATE-Funktion eine Kardinalitätsschätzung zu berechnen.

HLL_ESTIMATE(HLL_ACCUMULATE(…)) ist somit äquivalent zu HLL(…).

Siehe auch:

HLL , HLL_ACCUMULATE , HLL_COMBINE

Syntax

HLL_ESTIMATE( <state> )

Argumente

Status

Ein Ausdruck, der Statusinformationen enthält, die durch einen Aufruf von HLL_ACCUMULATE oder HLL_COMBINE generiert wurden.

Beispiele

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 |
+------------------+