Freigeben über


approx_top_k-Aggregatfunktion

Gilt für: Häkchen ja Databricks SQL Häkchen gesetzt ja 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. Wenn k nicht angegeben ist, wird standardmäßig 5 verwendet.
  • maxItemsTracked: Ein optionales INTEGER-Literal, das größer als oder gleich k ist. Wenn maxItemsTracked nicht angegeben ist, wird standardmäßig 10000 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}]