Google bigquery 我可以在Google BigQuery中对3个不同的表进行完整的外部联接吗
Google bigquery 我可以在Google BigQuery中对3个不同的表进行完整的外部联接吗,google-bigquery,Google Bigquery,project.dataset1.table1和project.dataset3.table3都有相同的列名 我得到错误“结果中不支持重复的列名” 在BigQuery中组合这些表的正确方法是什么 让我先解释一下这里发生了什么 在下面的示例中-重复列名而不是name没有问题,但是可以通过在中使用()将名称设置为vsON SELECT * FROM `project.dataset1.table1` t1 FULL OUTER JOIN `project.dataset2.table2` t2
project.dataset1.table1
和project.dataset3.table3
都有相同的列名
我得到错误“结果中不支持重复的列名”
在BigQuery中组合这些表的正确方法是什么 让我先解释一下这里发生了什么 在下面的示例中-重复列名而不是
name
没有问题,但是可以通过在中使用()将名称设置为vsON
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中)-因此结果中的错误-重复列名不受支持
#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%'
最后,在下面的示例中,您将了解如何解决该问题
#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%'
正如您在这里看到的,我们添加了除了(dup_col)
,这将从输出中消除重复的列,但是我们显式地添加了具有不同别名的列
所以,现在输出中没有重复的列,如下所示
#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%'
希望您能够将其应用于特定的重复列
如果你有不止一个名字,只需将它们列在除
Row Name x y z t1_dup_col t2_dup_col
1 John a b c qq ww
为什么不指定要选择的确切列,或者为这些具有公共名称的列使用别名?@NicoHaase-explicit list是解决这一问题的合理方法,如果这三个表的列数更不合理。但如果列的数量足够大,这将是一个痛苦的手;o)
EXCEPT(dup_col1, dup_col2, dup_col3)