Я пытаюсь объединить данные из двух плоских связанных представлений BigQuery в архитектуру с одной вложенной таблицей, используя стандартный SQL
У меня есть две аналогичные таблицы:
Данные аналитики: Одна строка для каждой минуты в глобальном временном интервале
-------------------------------------------------------------------
minute_index | users | users_new | ...
-------------------------------------------------------------------
1312017 | 8 | 3 | ...
1312018 | 9 | 2 | ...
1312019 | 5 | 1 | ...
1312020 | 3 | 0 | ...
1312021 | 5 | 2 | ...
1312023 | 4 | 3 | ...
1312024 | 7 | 4 | ...
1312025 | 6 | 3 | ...
1312026 | 9 | 4 | ...
Данные события: Одна строка для каждого внешнего события, которое произошло
----------------------------------------
minute_index | event |
----------------------------------------
1312019 | "TV Spot Broadcast" |
1312023 | "Radio Spot Broadcast" |
1312026 | "Radio Spot Broadcast" |
I'mпытаясь объединить их в одну таблицу, где каждая строка в новой таблице содержит подмножество таблицы Analytics, которое охватывает это и некоторое количество следующих минут (назовем это 5):
-----------------------------------------------------------------------------
minute_index | event | window_treated |
-----------------------------------------------------------------------------
1312019 | "TV Spot Broadcast" | minute_index | users | users_new |
|------------------------------------
| 1312019 | 5 | 1 |
| 1312020 | 3 | 0 |
| 1312021 | 5 | 2 |
| 1312023 | 4 | 3 |
| 1312024 | 7 | 4 |
-----------------------------------------------------------------------------
1312023 | "Radio Spot Broadcast" | minute_index | users | users_new |
|------------------------------------
| 1312023 | 4 | 3 |
| 1312020 | 3 | 0 |
| 1312021 | 5 | 2 |
| 1312023 | 4 | 3 |
| 1312024 | 7 | 4 |
Iна самом деле удалось построить вложенные таблицы, как это, но только путем создания и объединения извилистых наборов промежуточных таблиц, которые явно намного сложнее, чем они должны быть, если я могу только выяснить, как это сделатьчто-то вроде одного запроса.
Это всего лишь один пример различных подходов, которые я пробовал ...
SELECT
ed.timestamp AS timestamp,
ed.minute_index AS minute_index,
(SELECT AS STRUCT
ad.minute_index, ad.users, ad.users_new
FROM `my_project.my_dataset.analytics_data` ad
WHERE (ad.minute_index >= ed.minute_index)
AND (ad.minute_index < (ed.minute_index + 5))
ORDER BY
ed.minute_index) AS units_treated
FROM
`my_project.my_dataset.event_data` ed
, но это также один из нескольких, которые казались закрыть , но все приводят к одной и той же ошибке валидатора:
Correlated subqueries that reference other tables are not supported unless they can be de-correlated, such as by transforming them into an efficient JOIN.