Стандартный вопрос BigQuery Unnest и JOIN

У меня есть основной вопрос о Unnesting Join в BigQuery

У меня есть таблица событий сеанса и таблица событий настройки. Таблица событий настройки имеет вложенный столбец, называемый «данные».

Как только я сглаживаю setting_event.data (также известный как unnest), столбец из него должен присоединиться к столбцу из таблицы событий сеанса.

Есть ли способ напрямую ПРИСОЕДИНЯТЬСЯ к таблице событий сеанса к невложенным файлам Setting_event.data? Я пробовал делать:

ВЫБРАТЬ .... ИЗ SESSION_EVENTS LEFT JOIN UNNEST ([setting_event.data])

Однако я получаю сообщение setting_event not found.

Как мне сделать это в Standard BQ SQL?


person aslbj15    schedule 24.01.2020    source источник
comment
с JOIN конечно - не хотите ли оставить больше деталей для более конкретного ответа?   -  person Felipe Hoffa    schedule 24.01.2020
comment
@FelipeHoffa: lol обновлено   -  person aslbj15    schedule 24.01.2020


Ответы (2)


Ты можешь сделать:

SELECT <FIELDS> FROM `<session_events>` 
LEFT JOIN
(SELECT <FIELDS> FROM `<setting_events>`, UNNEST(data)
)
ON <JOIN_CONDITION>

Or:

SELECT <FIELDS> FROM `<session_events>` 
LEFT JOIN
(SELECT <FIELDS> FROM `<setting_events>` t, t.data d
)
ON <JOIN_CONDITION>

Во втором варианте вы должны обозначать поля внутри t.data как d. Я надеюсь, что это помогает

person rmesteves    schedule 24.01.2020

Это должно делать то, что вы хотите:

SELECT ....
FROM SESSION_EVENTS sese LEFT JOIN 
     (SETTING_EVENT sete CROSS JOIN
      UNNEST(se.data) se_data
     ) 
     ON sese.? = se_data

Это решение, при котором вам не нужно иметь вложенный SELECT (и, следовательно, список столбцов, которые вам нужны).

Если бы вы использовали внутренние объединения, я бы не использовал круглые скобки, а вместо этого изменил бы порядок ссылок на таблицы:

SELECT ....
FROM SETTING_EVENT sete CROSS JOIN
     UNNEST(se.data) se_data JOIN
     SESSION_EVENTS sese
     ON sese.? = se_data
person Gordon Linoff    schedule 24.01.2020