Kategorien:

Aggregatfunktionen (Cardinality Estimation) , Fensterfunktionen

APPROX_COUNT_DISTINCT

Verwendet HyperLogLog, um eine Approximation der spezifischen Kardinalität der Eingabe zurückzugeben (d. h. HLL(col1, col2, ... ) gibt eine Approximation von COUNT(DISTINCT col1, col2, ... ) zurück).

Weitere Informationen zu HyperLogLog finden Sie unter Schätzen der Anzahl diskreter Werte.

Aliasse:

HLL.

Siehe auch:

HLL_ACCUMULATE, HLL_COMBINE, HLL_ESTIMATE

Syntax

Aggregatfunktion

APPROX_COUNT_DISTINCT( [ DISTINCT ] <expr1>  [ , ... ] )

APPROX_COUNT_DISTINCT(*)
Copy

Fensterfunktionen

APPROX_COUNT_DISTINCT( [ DISTINCT ] <expr1>  [ , ... ] ) OVER ( [ PARTITION BY <expr2> ] )

APPROX_COUNT_DISTINCT(*) OVER ( [ PARTITION BY <expr2> ] )
Copy

Argumente

expr1

Dies ist der Ausdruck, für den Sie die Anzahl der unterschiedlichen Werte wissen möchten.

expr2

Dies ist der optionale Ausdruck zum Gruppieren von Zeilen in Partitionen.

*

Gibt einen Näherungswert für die Gesamtzahl der Datensätze zurück, wobei Datensätze mit den NULL-Werten ausgeschlossen werden.

Wenn Sie einen Platzhalter an die Funktion übergeben, können Sie den Platzhalter mit dem Namen oder Alias für die Tabelle qualifizieren. Um beispielsweise alle Spalten aus der Tabelle mytable zu übergeben, geben Sie Folgendes ein:

(mytable.*)
Copy

Sie können auch die Schlüsselwörter ILIKE und EXCLUDE zum Filtern verwenden:

  • ILIKE filtert nach Spaltennamen, die dem angegebenen Muster entsprechen. Es ist nur ein Muster erlaubt. Beispiel:

    (* ILIKE 'col1%')
    
    Copy
  • EXCLUDE filtert Spaltennamen heraus, die nicht mit der angegebenen Spalte oder den angegebenen Spalten übereinstimmen. Beispiel:

    (* EXCLUDE col1)
    
    (* EXCLUDE (col1, col2))
    
    Copy

Qualifizierer sind gültig, wenn Sie diese Schlüsselwörter verwenden. Das folgende Beispiel verwendet das Schlüsselwort ILIKE, um nach allen Spalten zu filtern, die dem Muster col1% in der Tabelle mytable entsprechen:

(mytable.* ILIKE 'col1%')
Copy

Die Schlüsselwörter ILIKE und EXCLUDE können nicht in einem einzigen Funktionsaufruf kombiniert werden.

Für diese Funktion sind die Schlüsselwörter ILIKE und EXCLUDE nur in einer SELECT-Liste oder GROUP BY-Klausel gültig.

Weitere Informationen zu den Schlüsselwörtern ILIKE und EXCLUDE finden Sie im Abschnitt „Parameter“ unter SELECT.

Rückgabewerte

Der Datentyp des zurückgegebenen Werts ist INTEGER.

Nutzungshinweise

  • Obwohl die Berechnung eine Approximation ist, ist sie deterministisch. Wenn diese Funktion mit den gleichen Eingabedaten aufgerufen wird, gibt diese Funktion die gleichen Ergebnisse zurück.

  • Weitere Informationen zu NULL-Werten und Aggregatfunktionen finden Sie unter Aggregatfunktionen und NULL-Werte.

  • Wenn diese Funktion als Fensterfunktion aufgerufen wird, wird sie nicht unterstützt:

    • Eine ORDER BY-Klausel innerhalb der OVER-Klausel.

    • Explizite Fensterrahmen.

Beispiele

Im folgenden Beispiel wird die Verwendung von APPROX_COUNT_DISTINCT und HLL veranschaulicht: Im folgenden Beispiel werden sowohl COUNT(DISTINCT i) als auch APPROX_COUNT_DISTINCT(i) aufgerufen, um zu betonen, dass die Ergebnisse nicht immer genau übereinstimmen.

Die genaue Ausgabe der folgenden Abfrage kann variieren, da APPROX_COUNT_DISTINCT eine Approximation (Näherungswert) und keinen exakten Wert zurückgibt.

SELECT COUNT(i), COUNT(DISTINCT i), APPROX_COUNT_DISTINCT(i), HLL(i)
  FROM sequence_demo;
Copy
+----------+-------------------+--------------------------+--------+
| COUNT(I) | COUNT(DISTINCT I) | APPROX_COUNT_DISTINCT(I) | HLL(I) |
|----------+-------------------+--------------------------+--------|
|     1024 |              1024 |                     1007 |   1007 |
+----------+-------------------+--------------------------+--------+