【发布时间】:2020-08-28 17:26:37
【问题描述】:
with
table1 as (
select 'joe' as name, 17 as age, 25 as speed
),
table2 as (
select 'nick' as name, 21 as speed, 23 as strength
)
select * from table1
union all
select * from table2
在 Google BigQuery 中,此 union all 不会引发错误,因为两个表的列数相同(每列 3 个)。但是我收到错误的数据输出,因为列不匹配。 union all 不是输出一个包含 4 列 name、age、speed、strength 的新表,其中包含正确的值 + 缺失值的空值(这可能是首选),union all 保留了 3 列顶行。
有没有一种很好的方法来捕获列不匹配,而不是查询静默返回错误数据?与成功的表相反,有什么方法可以返回错误吗?我不确定如何在 SQL 中检查 2 个表中的列是否匹配。
编辑:在此示例中,可以清楚地看到列不匹配,但是在我们的数据中,我们有 100 多列,我们希望避免出现在联合所有
【问题讨论】:
-
在使用 union all 的情况下,您始终需要指定列名,并且在使用 union all 时,所有数据集的列顺序应该相同
-
是的,我知道在使用
union all时列顺序应该相同。我的问题是是否有一种方法可以计算出列名+顺序实际上是相同的。 -
重点是:当你做
UNION ALL时不要使用*作为投影,而是明确列出列。 -
我了解最佳实践。我只是问是否有可能在列名不匹配的情况下捕获/处理错误
-
您是要在“运行时”还是“设计时”中进行制作?换句话说 - 可以吗,只是先比较架构,如果所有的洁净比单独的查询运行你的联合所有东西都好? - 哦,好的 - 这正是你刚刚回答的内容
标签: sql google-bigquery union-all