ЛЕВОЕ СОЕДИНЕНИЕ в BigQuery с функцией номера строки

# #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. Я решил и это — просто выбрав столбцы по их псевдонимам перед номером строки-функцией, а не со всей неинтересной