我有两个带有重叠列的大表,其中一些在重叠列中包含相同的值。这是一个玩具示例(在实际示例中,有数十列,重叠的列和不重叠的列):
Table 1: a, b, c
Table 2: a, d, e
a
的某些值仅在一个表中,有些在两个表中。
有没有一个查询,可以让我生成一个包含所有可用值的表:
Table 3: a, b, c, d, e
我当前的查询要求列出每一列,这很冗长,包含数十列,并且在架构更改时不灵活:
SELECT
coalesce(t1.a,
t2.a) AS a,
t1.b,
t1.c,
t2.d,
t2.e
FROM
t1
FULL JOIN
t2
USING
(a)
我尝试过的事情:UNION
似乎需要相同的架构,SELECT t1.*, t2.*
在重叠的列上引发错误,SELECT t1.* ... USING (a)
将为a
中的值提供空值,其中仅在t1.a
中有值。
答案 0 :(得分:2)
在我们所有人于2016年6月2日使用BigQuery Standard SQL之前-我对现在称为BigQuery Legacy SQL感到非常满意。对于某些特定的用例,我仍然会不时享受
我认为您在问题中描述的情况恰好是可以利用旧版SQL功能解决问题的一种情况
因此,以下是BigQuery旧版SQL
#legacySQL
SELECT *
FROM [project:dataset.table1],
[project:dataset.table2]
注意:在BigQuery旧版SQL逗号中-,
-表示UNION ALL
上面的超级简化示例是
#legacySQL
SELECT *
FROM (SELECT1 a, 2 b, 3 c, 11 x),
(SELECT 1 a, 4 d, 5 e, 12 x)
有结果
Row a b c x d e
1 1 2 3 11 null null
2 1 null null 12 4 5
注意:您不能在同一查询中混合使用传统SQL和标准SQL,因此如果您需要对结果UNION使用标准SQL-您将需要首先将结果具体化(另存为表),然后使用标准SQL查询该表>
使用标准SQL有什么办法
您可以使用INFORMATION_SCHEMA来编写两个表中的列以及所有涉及的列的构建列表的脚本-但是您需要sutill然后将结果复制粘贴到最终查询中才能运行