approx_top_k
-Aggregatfunktion
Gilt für: Databricks SQL Databricks Runtime 10.4 LTS und höher
Gibt die k
häufigsten Elementwerte in einem Ausdruck (expr
) zusammen mit ihrer ungefähren Anzahl zurück.
Syntax
approx_top_k(expr[, k[, maxItemsTracked]]) [FILTER ( WHERE cond ) ]
Diese Funktion kann auch mithilfe der OVER
-Klausel als Fensterfunktion aufgerufen werden.
Argumente
expr
: Ein Ausdruck des STRING-, BOOLEAN-, DATE-, TIMESTAMP- oder numerischen Typs.k
: Ein optionales INTEGER-Literal, das größer als 0 ist. Wennk
nicht angegeben ist, wird standardmäßig5
verwendet.maxItemsTracked
: Ein optionales INTEGER-Literal, das größer als oder gleichk
ist. WennmaxItemsTracked
nicht angegeben ist, wird standardmäßig10000
verwendet.cond
: Ein optionaler boolescher Ausdruck, der die für die Aggregation verwendeten Zeilen filtert.
Gibt zurück
Ergebnisse werden als ARRAY vom Typ STRUCT zurückgegeben, wobei jedes STRUCT-Element ein item
-Feld für den Wert (mit seinem ursprünglichen Eingabetyp) und ein count
-Feld (vom Typ LONG) mit der ungefähren Anzahl von Vorkommen enthält. Das Array ist absteigend nach count
sortiert.
Die Aggregatfunktion gibt die k
am häufigsten vorkommenden Elementwerte in einem Ausdruck expr
zusammen mit ihren ungefähren Werten zurück. Der Fehler in jeder Anzahl kann bis zu 2.0 * numRows / maxItemsTracked
sein, wobei numRows
die Gesamtzahl der Zeilen ist. Höhere Werte von maxItemsTracked
bieten eine bessere Genauigkeit auf Kosten einer erhöhten Speicherauslastung.
Ausdrücke, die weniger als maxItemsTracked
unterschiedliche Elemente enthalten, ergeben eine genaue Elementanzahl. Ergebnisse enthalten NULL
Werte als eigenes Element in den Ergebnissen.
Beispiele
> SELECT approx_top_k(expr) FROM VALUES (0), (0), (1), (1), (2), (3), (4), (4) AS tab(expr);
[{'item':4,'count':2},{'item':1,'count':2},{'item':0,'count':2},{'item':3,'count':1},{'item':2,'count':1}]
> SELECT approx_top_k(expr, 2) FROM VALUES 'a', 'b', 'c', 'c', 'c', 'c', 'd', 'd' AS tab(expr);
[{'item':'c','count',4},{'item':'d','count':2}]
> SELECT approx_top_k(expr, 10, 100) FROM VALUES (0), (1), (1), (2), (2), (2) AS tab(expr);
[{'item':2,'count':3},{'item':1,'count':2},{'item':0,'count':1}]