Как и в примере, приведенном ниже, я хочу различить счет по массивам BigQuery: Отличить счет по массивам Bigquery
Однако у меня есть несколько дополнительных требований, которые делают решение, представленное в этомсообщение выполнимо для меня:
- Решение должно не использовать UDF ( слишком медленно )
- Решение должно не использовать функцию HLL ( должен быть точным)
- Решение должно не использовать шаблон ВЫБРАТЬ из ВЫБРАТЬ, отображаемый в связанном решении, для агрегирования по гибкой группе измерений, выбранной конечным пользователем с помощью инструмента BI
Итак, пока этот расширенный пример (содержит пользователя как измерение группировки) работает с использованием HLL:
#standardSQL
WITH
test AS (
SELECT
'A' AS User, DATE('2018-01-01') AS ReportDate, 2 AS value, [1,2,3] AS key
UNION ALL
SELECT
'A' AS User, DATE('2018-01-02') AS ReportDate, 3 AS value, [1,4,5] AS key
UNION ALL
SELECT
'B' AS User, DATE('2018-01-02') AS ReportDate, 4 AS value, [4,5,6,7,8] AS key
UNION ALL
SELECT
'B' AS User, DATE('2018-01-02') AS ReportDate, 5 AS value, [3,4,5,6,7] AS key )
SELECT
User,
SUM(value) total_value,
HLL_COUNT.MERGE((
SELECT
HLL_COUNT.INIT(key)
FROM
UNNEST(key) key)) AS unique_key_count
FROM
test
GROUP BY
user
Мне нужна версия, которая выполняет этот отдельный агрегатный подсчет массивов с требованиями, упомянутыми выше.
Опять же, это означает, что он также должен работать должным образом, если я группирую только по ReportDate , комбинации User / ReportDate или сценарию, в котором этот пример расширен дополнительнымиразмеры.