Агрегатная функция 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}]