【问题标题】:BigQuery IF field exists THENBigQuery IF 字段存在 THEN
【发布时间】:2015-11-23 10:37:53
【问题描述】:

我正在对在特定时间范围内联合在一起的多个表运行查询。

过去,“模式”中不存在特定字段,但在该时间范围的一半左右,该字段开始存在并开始填充数据。

有没有办法在存在时有条件地选择它,否则用值任意填充命名字段?

像这样:

SELECT
  (CASE WHEN exists(my_field) THEN my_field ELSE "0" END) as "my_field"
FROM <somewhere>

【问题讨论】:

  • 在常规 sql 中,显然无法做到:stackoverflow.com/questions/16952442/… 那么,BigQuery 的 SQL 函数也是如此吗?
  • 这个问题已经问了很多次了,都不可能。
  • @Pentium10 专门用于 BQ?还是无论您在谈论什么平台,问题都是一样的?
  • 在包含所有列的表上创建视图。可以为不在数据中的列指定 NULL 值。然后通过视图查询。

标签: sql google-bigquery


【解决方案1】:

下面应该给你方向

SELECT * FROM
(SELECT * FROM <somewhere w/o my_field>),
(SELECT * FROM <somewhere with my_field>)

假设您在原始表 () 中有 a、b 和 c 作为字段 - 如果您需要将缺失值从 NULL 更改为 0,则可以使用上述(见下文):

SELECT a, b, c, COALESCE(my_field, 0) as my_field
FROM
(SELECT * FROM <somewhere w/o my_field>),
(SELECT * FROM <somewhere with my_field>)

【讨论】:

  • 创意解决方案!不过,我想知道,所有数据的初始聚合是否会跳过您通过映射获得的任何性能,并减少后端发生的这种情况。我预测它会和正常一样
  • BigQuery 工程师在这里,这是正确的解决方案。它的性能开销为零。但是,一个警告是,如果您的源表包含独立重复的字段,您可能会遇到错误。 (此外,这类错误是 BQ 中的一个错误,我们希望尽快修复。不幸的是,修复比看起来更复杂,因此可能需要一些时间。)
  • 老答案,但是有标准sql的解决方案吗?
猜你喜欢
  • 1970-01-01
  • 2020-01-25
  • 1970-01-01
  • 1970-01-01
  • 2013-09-10
  • 2014-05-27
  • 1970-01-01
  • 1970-01-01
  • 2023-02-08
相关资源
最近更新 更多