У меня были некоторые проблемы с этой проблемой в течение нескольких дней, и я не могу понять ее.
(Запуск это Bigquery)
Для маркетингового клиента я пытаюсь получать показы и клики по рекламодателю.
p_impressions содержит все данные о показах, включая идентификаторы Campaign_ID, Advertiser_ID p_click содержит все данные о кликах, включая идентификаторы Campaign_ID, Advertiser_ID match_table_campaigns содержит данные кампании: Campaign_ID, Название кампании
(по сути, моя простая цель - получить количество показов и кликов и сопоставить его с таблицей Campaign, чтобы я мог видеть название кампании, а не только ее идентификатор.
Когда я запускаю запрос используя UNION all для таблиц Impression и Click, используя только IDS, все числа соответствуют моей платформе, и все выглядит отлично.
Однако, когда я вставляю JOIN (я перепробовал все), чтобы включить название кампании, все показатели показов и клик, кажется, увеличивается, и я кажется, больше не могу получить правильные числа.
with combinedDeliveryData AS (
SELECT
FORMAT_DATETIME("%F",DATETIME(TIMESTAMP_MILLIS( CAST(SUBSTR(CAST( Event_Time AS String),0,LENGTH(CAST( Event_Time AS String)) - 3) AS INT64 )),"America/Toronto")) AS Date,
Impression_ID,
DBM_Advertiser_ID,
Campaign_ID,
Ad_ID,
Rendering_ID,
Event_Type,
Advertiser_ID,
FROM
CampaignManager.p_impression
UNION ALL
SELECT
FORMAT_DATETIME("%F",DATETIME(TIMESTAMP_MILLIS( CAST(SUBSTR(CAST( Event_Time AS String),0,LENGTH(CAST( Event_Time AS String)) - 3) AS INT64 )),"America/Toronto")) AS Date,
Impression_ID,
DBM_Advertiser_ID,
Campaign_ID,
Ad_ID,
Rendering_ID,
Event_Type,
Advertiser_ID,
FROM
CampaignManager.p_click)
SELECT cpg.Campaign_ID, cpg.Campaign,data.Date,COUNT(case data.Event_Type when 'VIEW' then 1 else null end) AS Impressions
FROM match_table_campaigns AS cpg
LEFT JOIN combinedDeliveryData AS data ON cpg.Campaign_ID = data.Campaign_ID
WHERE cpg.Advertiser_ID = "4739279"
GROUP BY 3,1,2
Любая помощь будет принята с благодарностью. Я не уверен, что мне не хватает.
Как примечание, вот что работает без JOIN
SELECT
Impression_ID,
Event_Time,
DBM_Advertiser_ID,
Campaign_ID,
Ad_ID,
Rendering_ID,
Event_Type,
Advertiser_ID
FROM
CampaignManager.p_impression
UNION ALL
SELECT
Impression_ID,
Event_Time,
DBM_Advertiser_ID,
Campaign_ID,
Ad_ID,
Rendering_ID,
Event_Type,
Advertiser_ID
FROM
CampaignManager.p_click)
SELECT FORMAT_DATETIME("%F",DATETIME(TIMESTAMP_MILLIS( CAST(SUBSTR(CAST( clicks.Event_Time AS String),0,LENGTH(CAST( clicks.Event_Time AS String)) - 3) AS INT64 )),"America/Toronto")) AS exposureDate,clicks.Campaign_ID,COUNT(case Event_Type when 'VIEW' then 1 else null end) AS Impressions,COUNT(case Event_Type when 'CLICK' then 1 else null end) AS Clicks
FROM
combinedDeliveryData AS clicks
WHERE clicks.Campaign_ID = "4739279"
GROUP BY 1,2
НОВЫЙ ВЫПУСК: Я добавил следующий код, и все выглядело замечательно
this_is_deduplicated AS (
SELECT x.*
FROM (
SELECT Campaign_ID, ARRAY_AGG(a LIMIT 1)[OFFSET(0)] x
FROM combinedDeliveryData a
GROUP BY 1
)
)
LEFT JOIN this_is_deduplicated AS data ON cpg.Campaign_ID = data.Campaign_ID
Получение всех моих ценностей, и они точные. Сейчас я сталкиваюсь с другой проблемой, когда мне нужно присоединиться к финальной таблице, но решение, приведенное выше, не работает для него.
Значения в новой таблице: Дата Campaign_ID Activity_ID
Мне нужно Теперь присоединитесь к этой последней таблице, чтобы для каждой даты я получал СЧЕТА Activity_ID как беседы.
Моя финальная таблица должна быть:
Рекламодатель, Кампания, Показы, Клики, Конверсии (как выше )