那么BigQuery IF字段就存在了

Kri*_*ian 5 sql google-bigquery

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

在过去,"模式"中不存在特定的字段,但是在该时间范围的中间,该字段开始存在并开始填充数据.

有没有办法有条件地选择它,如果它存在,否则任意填充一个带有值的命名字段?

像这样:

SELECT
  (CASE WHEN exists(my_field) THEN my_field ELSE "0" END) as "my_field"
FROM <somewhere>
Run Code Online (Sandbox Code Playgroud)

Mik*_*ant 11

下面应该给你指路

SELECT * FROM
(SELECT * FROM <somewhere w/o my_field>),
(SELECT * FROM <somewhere with my_field>)
Run Code Online (Sandbox Code Playgroud)

假设你有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>)
Run Code Online (Sandbox Code Playgroud)

  • BigQuery工程师在这里,这是正确的解决方案.它没有性能开销.但需要注意的是,如果源表包含独立的重复字段,则可能会出错.(另外,这类错误是BQ中的一个错误,我们希望很快修复.不幸的是,修复程序比看起来更复杂,所以可能需要一些时间.) (3认同)