Позвольте мне сначала объяснить, что здесь происходит
В приведенном ниже примере - нет проблем с дублированием имени столбца, а не Name
, но оно решается наличием имени в USING()
против ON
#standardSQL
WITH
`project.dataset1.table1` AS (SELECT 'John' Name, 'a' x ),
`project.dataset2.table2` AS (SELECT 'John' Name, 'b' y),
`project.dataset3.table3` AS (SELECT 'John' Name, 'c' z)
SELECT *
FROM `project.dataset1.table1` t1
FULL OUTER JOIN `project.dataset2.table2` t2 USING (Name)
FULL OUTER JOIN `project.dataset3.table3` t3 USING (Name)
WHERE Name LIKE '%John%'
Во втором примере ниже вы видите дополнительное поле dup_col
, которое является дубликатом (в таблице 1 и в таблице 2) - таким образом, ошибка - Duplicate column names in the result are not supported
#standardSQL
WITH
`project.dataset1.table1` AS (SELECT 'John' Name, 'a' x, 'qq' dup_col),
`project.dataset2.table2` AS (SELECT 'John' Name, 'b' y, 'ww' dup_col),
`project.dataset3.table3` AS (SELECT 'John' Name, 'c' z)
SELECT *
FROM `project.dataset1.table1` t1
FULL OUTER JOIN `project.dataset2.table2` t2 USING (Name)
FULL OUTER JOIN `project.dataset3.table3` t3 USING (Name)
WHERE Name LIKE '%John%'
НаконецВ приведенном ниже примере вы найдете, как решить эту проблему
#standardSQL
WITH
`project.dataset1.table1` AS (SELECT 'John' Name, 'a' x, 'qq' dup_col),
`project.dataset2.table2` AS (SELECT 'John' Name, 'b' y, 'ww' dup_col),
`project.dataset3.table3` AS (SELECT 'John' Name, 'c' z)
SELECT * EXCEPT(dup_col),
t1.dup_col AS t1_dup_col,
t2.dup_col AS t2_dup_col
FROM `project.dataset1.table1` t1
FULL OUTER JOIN `project.dataset2.table2` t2 USING (Name)
FULL OUTER JOIN `project.dataset3.table3` t3 USING (Name)
WHERE Name LIKE '%John%'
Как вы можете видеть здесь, мы добавили EXCEPT(dup_col)
, который исключает дубликаты столбцов из вывода, но затем мы явно добавили эти столбцы с различными псевдонимами
Итак, теперь в выводе нет повторяющихся столбцов, как показано ниже
Row Name x y z t1_dup_col t2_dup_col
1 John a b c qq ww
Надеюсь, вы сможете применить это к конкретным дублирующимся столбцам
Если у вас есть большечем только одно имя - просто перечислите их в КРОМЕ, как
EXCEPT(dup_col1, dup_col2, dup_col3)