Ниже приведено для BigQuery Standard SQL
#standardSQL
WITH test AS
(
SELECT DATE('2018-01-01') AS DATE, 2 AS value, [1,2,3] AS key UNION ALL
SELECT DATE('2018-01-02') AS DATE, 3 AS value, [1,4,5] AS key
)
SELECT
total_value,
COUNT(DISTINCT key) unique_key_count
FROM (
SELECT
SUM(value) AS total_value,
ARRAY_CONCAT_AGG(key) AS all_keys
FROM test
), UNNEST(all_keys) key
GROUP BY total_value
результат:
Row total_value unique_key_count
1 5 5
Если в вашей таблице достаточно строк - вы можете легко добраться до памяти /проблема с ресурсами - в этом случае вы можете попробовать использовать функции HyperLogLog ++ для приблизительной агрегации - см. пример ниже
#standardSQL
WITH test AS
(
SELECT DATE('2018-01-01') AS DATE, 2 AS value, [1,2,3] AS key UNION ALL
SELECT DATE('2018-01-02') AS DATE, 3 AS value, [1,4,5] AS key
)
SELECT
SUM(value) total_value,
HLL_COUNT.MERGE((SELECT HLL_COUNT.INIT(key) FROM UNNEST(key) key)) AS unique_key_count
FROM test
с результатом
Row total_value unique_key_count
1 5 5
Примечание: это приблизительноагрегации - обратите внимание на параметр precision
в функции HLL_COUNT.INIT(input [, precision])