2015-04-04 48 views
4

我正在将一些来自Postgres的聚合查询转换为BigQuery中的新体系结构。 BigQuery中是否有等价的COALESCE()?BigQuery等价于COALESCE()?

目前,我将一个Postgres查询语句像

coalesce(column1,'DEFAULT') 

CASE 
    WHEN column1 IS NOT NULL 
    THEN column1 
    ELSE 'DEFAULT' 
END AS column1 

这似乎很容易。

但是转换Postgres的查询语句嵌套的聚结之类的语句

count(distinct coalesce(
       coalesce(
       coalesce(column1,column2), 
           column3), 
           column4))) 

如果我用CASE语句所有的地方会得到更多的凌乱,也似乎是错误的做法。

是否BigQuery有一个等价于COALESCE()的方法,还是我坚持写整个CASE语句等效?

回答

10

您可以使用BigQuery的IFNULL功能,它可以被嵌套这样的:

select ifnull(column1, 
       ifnull(column2,'DEFAULT')) 
from 
(select string(NULL) as column1, 'y' as column2) 

附:但是在BigQuery中忽略COALESCE是一个疏忽,我会解决它。

更新:截至2015年4月16日,COALESCE在BigQuery中可用。

+0

谢谢,这似乎工作。 任何想法何时将'COALESCE()'函数实现到BigQuery中? – 2015-04-07 03:18:54

+1

从今天起实施:) – 2015-04-17 01:42:27

+0

谢谢!我将把它实现到我们的代码中。 – 2015-04-18 16:36:37