Поделиться через


approx_top_k_combine Агрегатная функция

Область применения:check помечена да Databricks Runtime 18.1 и выше

Объединяет несколько состояний эскизов, созданных approx_top_k_accumulate в один объединенный эскиз. Используйте эту функцию для объединения эскизов из разных разделов, периодов времени или источников данных.

Синтаксис

approx_top_k_combine ( state [, maxItemsTracked ] )

Аргументы

  • состояние: состояниеSTRUCT эскиза (например, из approx_top_k_accumulate).
  • maxItemsTracked: необязательный положительный INTEGER литерал, указывающий максимальное количество элементов для отслеживания в объединенном эскизе. Должно быть от 1 до 1 000 000 включительно. При указании это значение используется для выходного эскиза. При опущении все входные эскизы должны иметь одно и то же maxItemsTracked значение, и это значение используется для выходных данных.

Возвраты

STRUCT Значение, содержащее объединенное состояние эскиза с той же схемой, что и выходные данные approx_top_k_accumulate.

Примечания.

  • Если maxItemsTracked не указано, все входные эскизы должны иметь одно и то же maxItemsTracked значение; в противном случае возникает ошибка.
  • При maxItemsTracked указании эскизы с различными maxItemsTracked значениями можно объединить.
  • Все входные эскизы должны иметь один и тот же тип данных элемента; в противном случае возникает ошибка.
  • NULL значения сохраняются и объединяются по эскизам.

Распространенные условия ошибки

Примеры

-- Combine sketches from different data sources with explicit maxItemsTracked
> SELECT approx_top_k_estimate(approx_top_k_combine(sketch, 10000), 5) FROM (
    SELECT approx_top_k_accumulate(expr) AS sketch FROM VALUES (0), (0), (1), (1) AS tab(expr)
    UNION ALL
    SELECT approx_top_k_accumulate(expr) AS sketch FROM VALUES (2), (3), (4), (4) AS tab(expr)
  );
[{"item":0,"count":2},{"item":4,"count":2},{"item":1,"count":2},{"item":2,"count":1},{"item":3,"count":1}]

-- Combine sketches with same maxItemsTracked (no explicit size needed)
> SELECT approx_top_k_estimate(approx_top_k_combine(sketch), 3) FROM (
    SELECT approx_top_k_accumulate(expr, 100) AS sketch FROM VALUES ('a'), ('a'), ('b') AS tab(expr)
    UNION ALL
    SELECT approx_top_k_accumulate(expr, 100) AS sketch FROM VALUES ('b'), ('c'), ('c'), ('c') AS tab(expr)
  );
[{"item":"c","count":3},{"item":"a","count":2},{"item":"b","count":2}]