# #google-bigquery #left-join #window-functions #row-number
Вопрос:
Я пытаюсь выполнить приведенное ниже соединение между BQ-данными и данными из csv-файла в нашей песочнице, но я получаю синтаксическую ошибку «Ожидается «)» но ключевое слово включено в [45:1]», в которой находится строка, в которой происходит включение. Я не могу понять, почему, и это может быть потому, что я написал не так много из них. Возможно, это не функция номера строки, которая все портит. Может ли кто-нибудь поддержать меня в оценке этого?
SELECT
paymentsDB.*,
bq.*
FROM (
SELECT
string_field_0 AS orderId_payments,
string_field_1 as type,
string_field_2 as status
FROM `xxxx-xxxx.xxxx_xxxxxx_1aug2021`
) paymentsDB
LEFT JOIN
( SELECT
(SELECT customDimensions.value FROM UNNEST(t.customDimensions) AS customDimensions WHERE customDimensions.index = 6) as orderId_bq,
hits.eventinfo.eventaction as event_action,
hits.transaction.transactionId as trx_id,
hits.page.pagePath as page,
hitnumber AS hitnumber
FROM (SELECT Row_number()
OVER( PARTITION BY (SELECT customDimensions.value FROM UNNEST(t.customDimensions) AS customDimensions WHERE customDimensions.index = 6)
ORDER BY hitnumber DESC)RN,
(SELECT customDimensions.value FROM UNNEST(t.customDimensions) AS customDimensions WHERE customDimensions.index = 6) as orderId_bq,
hits.eventinfo.eventaction as event_action,
hits.transaction.transactionId as trx_id,
hits.page.pagePath as page,
hitnumber AS hitnumber
FROM `xxxx-xxxxx.ga_sessions_*` t,
UNNEST(HITS) as hits
WHERE (SELECT customDimensions.value FROM UNNEST(t.customDimensions) AS customDimensions WHERE customDimensions.index = 8) = 'se'
AND (SELECT customDimensions.value FROM UNNEST(t.customDimensions) AS customDimensions WHERE customDimensions.index = 4) = 'soffadirekt'
AND _TABLE_SUFFIX BETWEEN '20210801' AND '20210802'
AND RN = 1
) bq
ON paymentsDB.orderId_payments = bq.orderId_bq
Итак, пример того, как я хочу выглядеть, приведен ниже в таблице. Я хочу сопоставить последние номера обращений со статусом, который у меня есть в paymentsDB, с тем же идентификатором заказа:
orderId_payments | Тип | Статус | orderId_bq, | событие_акция | Страница | номер попадания | rn |
---|---|---|---|---|---|---|---|
12345 | дебет | успех | 12345 | серверная часть trx | /серверная часть-trx | 40 | 1 |
56778 | дебет | ошибка | 56778 | загрузка iframe | /платежи | 42 | 1 |
Ответ №1:
Кажется, что вы упускаете правильную скобку. Я добавил комментарий, в котором я бы добавил правую скобку.
( SELECT
(SELECT customDimensions.value FROM UNNEST(t.customDimensions) AS customDimensions WHERE customDimensions.index = 6) as orderId_bq,
hits.eventinfo.eventaction as event_action,
hits.transaction.transactionId as trx_id,
hits.page.pagePath as page,
hitnumber AS hitnumber
FROM (SELECT Row_number()
OVER( PARTITION BY (SELECT customDimensions.value FROM UNNEST(t.customDimensions) AS customDimensions WHERE customDimensions.index = 6)
ORDER BY hitnumber DESC)RN,
(SELECT customDimensions.value FROM UNNEST(t.customDimensions) AS customDimensions WHERE customDimensions.index = 6) as orderId_bq,
hits.eventinfo.eventaction as event_action,
hits.transaction.transactionId as trx_id,
hits.page.pagePath as page,
hitnumber AS hitnumber
FROM `xxxx-xxxxx.ga_sessions_*` t,
UNNEST(HITS) as hits
WHERE (SELECT customDimensions.value FROM UNNEST(t.customDimensions) AS customDimensions WHERE customDimensions.index = 8) = 'se'
AND (SELECT customDimensions.value FROM UNNEST(t.customDimensions) AS customDimensions WHERE customDimensions.index = 4) = 'soffadirekt'
AND _TABLE_SUFFIX BETWEEN '20210801' AND '20210802'
AND RN = 1
) --I added this
)bq
Вы должны дважды проверить все свои скобки, чтобы убедиться, что они следуют вашей логике, если это не исправит ситуацию.
Комментарии:
1. Спасибо! Я не мог этого видеть. У меня возникли проблемы с тем, что он не распознает » t » — это псевдоним, который я даю источнику GA-сеансов. Я не понимаю, почему — это потому, что пользовательский подзапрос измерения сталкивается с моей функцией номера строки? Что у меня должен быть собственный CTE для функции номера строки?
2. Я решил и это — просто выбрав столбцы по их псевдонимам перед номером строки-функцией, а не со всей неинтересной