google-bigquery - 我可以在 Google BigQuery 中对 3 个不同的表进行完全外部联接吗
问题描述
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%'
project.dataset1.table1
并且project.dataset3.table3
两者都具有相同的列名。
我收到错误“不支持结果中的重复列名”。
在 BigQuery 中组合这些表的正确方法是什么?
解决方案
让我先解释一下这里发生了什么
在下面的示例中 - 重复的列名没有问题,而不是Name
但是通过在USING()
vs中包含 Name 来解决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
(在 table1 和 table2 中) - 因此错误 -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 中
EXCEPT(dup_col1, dup_col2, dup_col3)
推荐阅读
- matlab - 如何从 Matlab 中的数据集中提取 LBP 特征?
- c - 如何在不使用 C 中的数组的情况下读取给定的“n”输入?
- android - Android Studio在退出时杀死ADB服务器
- go - 使用 -race 标志时,GO 中的竞态条件是什么意思
- javascript - 编写一个更新/保存的 Mongoose 方法?
- c# - Xamarin Forms - 异步任务“EventHandler 的签名(返回类型)与事件类型不匹配”
- c# - 将 vb6“类型”(结构)转换为 c# 的最佳方法
- javascript - Mobx 强制计算值更新
- c - 在基于 ncurses 的程序中拦截 SIGWINCH 后,无法识别按键
- json - 如何遍历 mongodb 中的嵌套嵌套文档?