Агрегатная функция approx_top_k
Область применения: Databricks SQL Databricks Runtime 10.4 LTS и выше
Возвращает значения k
наиболее часто встречающихся элементов в выражении expr
и их приблизительное количество.
Синтаксис
approx_top_k(expr[, k[, maxItemsTracked]]) [FILTER ( WHERE cond ) ]
Эту функцию также можно вызвать как функцию окна с помощью OVER
предложения.
Аргументы
expr
: выражение типа STRING, BOOLEAN, DATE, TIMESTAMP или числового типа.k
: необязательный литерал INTEGER больше 0. Если значениеk
не указано, по умолчанию используется значение5
.maxItemsTracked
: необязательный литерал INTEGER не меньшеk
. Если значениеmaxItemsTracked
не указано, по умолчанию используется значение10000
.cond
: необязательное логическое выражение для фильтрации строк, используемых для агрегирования.
Возвраты
Результаты возвращаются в виде массива типа STRUCT, где каждая структура содержит поле item
для значения (исходного типа входных данных) и поле count
(типа LONG) с приблизительным числом вхождений. Массив сортируется по убыванию значения count
.
Агрегатная функция возвращает значения k
наиболее часто встречающихся элементов в выражении expr
вместе с их приблизительным количеством. Погрешность в каждом значении количества может составлять до 2.0 * numRows / maxItemsTracked
, где numRows
— общее число строк. Большие значения maxItemsTracked
обеспечивают лучшую точность за счет увеличения объема используемой памяти.
Для выражений, содержащих менее maxItemsTracked
различных элементов, возвращается точное количество каждого элемента. Результаты содержат значения NULL
в виде отдельного элемента.
Примеры
> 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}]