Ниже для BigQuery Standard SQL
#standardSQL
SELECT ID,
x.Campaign AS Campaign_x,
y.Campaign AS Campaign_y,
Value_x,
Value_y
FROM `project.dataset.tableX` x
FULL OUTER JOIN `project.dataset.tableY` y
USING(ID, Campaign)
Вы можете протестировать, поиграть с выше, используя примеры данных из ваших вопросов, как в примере ниже
#standardSQL
WITH `project.dataset.tableX` AS (
SELECT 'foo' ID, 'fb' Campaign, 1 Value_x UNION ALL
SELECT 'foo', 'twitter', 3 UNION ALL
SELECT 'bar', 'fb', 2 UNION ALL
SELECT 'foobar', 'ads', 2 UNION ALL
SELECT 'foo', 'organic', 3
), `project.dataset.tableY` AS (
SELECT 'foo' ID, 'organic' Campaign, 42 Value_y UNION ALL
SELECT 'foobar', 'organic', 17 UNION ALL
SELECT 'foo', 'ads', 12 UNION ALL
SELECT 'foo', 'twitter', 23 UNION ALL
SELECT 'bar', 'twitter', 35
)
SELECT ID,
x.Campaign AS Campaign_x,
y.Campaign AS Campaign_y,
Value_x,
Value_y
FROM `project.dataset.tableX` x
FULL OUTER JOIN `project.dataset.tableY` y
USING(ID, Campaign)
-- ORDER BY ID
с результатом
Row ID Campaign_x Campaign_y Value_x Value_y
1 bar fb null 2 null
2 bar null twitter null 35
3 foo fb null 1 null
4 foo twitter twitter 3 23
5 foo organic organic 3 42
6 foo null ads null 12
7 foobar ads null 2 null
8 foobar null organic null 17