[英]BigQuery: Select column if it exists, else put NULL?
我正在更新每日仪表板。 假设我每天都有两个表TODAY
和BEFORE_TODAY
。 我每天都在做的事情是这样的:
SELECT a, b FROM TODAY
UNION ALL
SELECT a,b FROM BEFORE_TODAY;
TODAY
表每天生成并附加到它之前的所有数据。 现在,我需要生成一个新列,比如c
并且为了 UNION ALL 这两个,我需要它在BEFORE_TODAY
也可用。
如何向BEFORE_TODAY
添加条件语句以检查我是否有c
列并使用该列,否则使用NULL
代替它。
您的数据 model 有问题。您应该将数据放入同一个表的不同分区中。 那么你就没有问题了。 您可以只查询主表以获得所需的分区。 该列将出现在历史记录中,其值为NULL
。
这是正确的解决方案。 您可以创建一个被黑的解决方案,假设您的表有一个主键。 例如,如果a, b
在每一行上都是唯一的,你可以这样做:
select t.a, t.b, t.c
from today t
union all
select b.a, b.b,
(select c -- not qualified on purpose
from before_today b2
where b2.a = b.a and b2.b = b.b
) as
from before_today b cross join
(select null as c) c;
如果b.c
不存在,则子查询返回c.c
。 如果它确实存在,它会从子查询中返回b2.c
。
虽然通过结合动态 SQL 和 INFORMATION_SCHEMA,您可以编写一个脚本来实现您所说的,但这似乎不是正确的做法。
作为数据 model 规划的一部分,您应该提前将列 c 添加到BEFORE_TODAY
。 现有行上新添加的列将始终具有 NULL 值。 然后您可以将列添加到TODAY
并照常引用列 c。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.