Ниже приведено описание BigQuery Standard SQL и просто для демонстрации подхода к повороту данных.
Если вы заранее знаете, сколько у вас различных активных_идентификаторов и их число небольшое, например три, какв вашем примере - вы сделали бы так просто, как показано ниже
#standardSQL
SELECT
user_id,
event_date,
COUNTIF(activity_id = 1) act_1,
COUNTIF(activity_id = 2) act_2,
COUNTIF(activity_id = 3) act_3
FROM `project.dataset.table1` t1
JOIN `project.dataset.table2` t2
USING(user_id)
GROUP BY user_id, event_date
ORDER BY user_id, event_date
, если применить к образцу данных, как в вашем вопросе - результат будет
Row user_id event_date act_1 act_2 act_3
1 A 2019-02-01 2 1 0
2 B 2019-02-10 0 1 1
3 C 2019-01-15 1 0 0
Но, как вы упомянули
Количество различных активность_ид в таблице 2 может меняться со временем.Итак, я не знаю заранее, сколько столбцов будет создано в выходной таблице
Итак, вам нужно сгенерировать запрос выше динамически - ниже приведен пример такого
#standardSQL
WITH activities AS (
SELECT DISTINCT activity_id
FROM `project.dataset.table2`
), generate_query AS (
SELECT CONCAT(
'SELECT user_id, event_date',
STRING_AGG(CONCAT(',COUNTIF(activity_id = ', CAST(activity_id AS STRING), ') act_', CAST(activity_id AS STRING)), ''),
' FROM `project.dataset.table1` t1 JOIN `project.dataset.table2` t2 USING(user_id) GROUP BY user_id, event_date ORDER BY user_id, event_date'
) AS query
FROM activities
)
SELECT query FROM generate_query
Опять же, если применить к вашим образцам данных - результат будет
SELECT user_id, event_date,COUNTIF(activity_id = 1) act_1,COUNTIF(activity_id = 2) act_2,COUNTIF(activity_id = 3) act_3 FROM `project.dataset.table1` t1 JOIN `project.dataset.table2` t2 USING(user_id) GROUP BY user_id, event_date ORDER BY user_id, event_date
, если посмотреть ближе к приведенному выше результату - вы можете видеть - это именно тот запрос, который мы изначально написали вручную - но сейчасон был сгенерирован для нас - и независимо от того, сколько у вас есть отдельных activity_id (очевидно, ограничения по количеству столбцов все еще применяются) - он будет запрашивать необходимый продукт
Итак, теперь вам просто нужно скопировать текст запроса изприведенный выше результат и просто запустите его - что даст желаемый результат
Row user_id event_date act_1 act_2 act_3
1 A 2019-02-01 2 1 0
2 B 2019-02-10 0 1 1
3 C 2019-01-15 1 0 0
Как вы можете видеть, это двухэтапный процесс - но вы можете написать его, используя клиент по вашему выбору
Примечание: я сфокусировался на сути вопроса и вообще не обращался к теме, связанной с 90 днями, - мне кажется, это была второстепенная деталь в вашем вопросе