Я пытаюсь сделать рабочий запрос SQL, который у меня есть в BigQuery, более упорядоченным и сталкиваюсь со следующей проблемой:
Ошибка: предложение ON должно быть AND of = сравнения одного имени поля из каждой таблицы со всеми именами полей с префиксом имени таблицы. Подумайте об использовании стандартного SQL .google.com / bigquery / docs / reference / standard-sql /), который допускает неравномерное соединение и сравнение с использованием выражений и остаточных предикатов.
Ниже приведен запрос, который выдает ошибку выше. Первый LEFT JOIN работает. Когда я добавил второй справа внизу, я начал получать сообщение об ошибке. Я пытаюсь получить доступные для чтения значения own.o.firstname и own.o.lastname, а не значение owner_id записи сделки (o.properties.hubspot_owner_id.value), но для этого я нужно объединить несколько таблиц.
Мне пришлось использовать CAST в предложении ON второго JOIN, потому что поля имеют разные типы в соответствующей схеме каждой таблицы. Если я этого не сделаю, я получаю следующую ошибку: Ошибка: ключи соединения o.properties.hubspot_owner_id.value (строка) и o.ownerid (int64) имеют типы, которые не могут быть принудительно принудительно принудительны.
Предложение WHERE является просто списком подавления, чтобы не возвращать записи, которые были удалены из базы данных.
SELECT o.*
FROM (
SELECT
o.dealid,
o.properties.dealname.value,
stages.Label,
o.properties.closedate.value,
o.properties.hubspot_owner_id.value,
own.o.firstname,
own.o.lastname,
o.properties.amount.value,
o.properties.createdate.value,
o.properties.pipeline.value,
o.associations.associatedcompanyids,
ROW_NUMBER() OVER (PARTITION BY o.dealid ORDER BY o._sdc_batched_at DESC) as seqnum
FROM [sample-table:hubspot.deals] o
LEFT JOIN [sample-table:hubspot.sales_stages_lookup] stages ON o.properties.dealstage.value = stages.Internal_Value
LEFT JOIN [sample-table:hubspot.owners_reporting] own ON CAST(o.properties.hubspot_owner_id.value AS INTEGER) = CAST(own.o.ownerid AS INTEGER)) o
WHERE o.dealid NOT IN (SELECT objectid FROM [sample-table:hubspot_suppression_list.data] WHERE subscriptiontype = 'deal.deletion') AND seqnum = 1