带有 SELECT 子查询的 BigQuery COALESCE()

Posted

技术标签:

【中文标题】带有 SELECT 子查询的 BigQuery COALESCE()【英文标题】:BigQuery COALESCE() with SELECT subquery 【发布时间】:2018-02-27 20:22:58 【问题描述】:

我收到错误:

Correlated subqueries that reference other tables are not supported unless they can be de-correlated, such as by transforming them into an efficient JOIN

关于以下查询

(SELECT DISTINCT video_id, 
                   COALESCE(custom_id, 
                             (SELECT custom_id FROM `test2.channel_map` b 
                              WHERE a.channel_id = b.channel_id LIMIT 1), 
                                'Default')
 FROM `test2.revenue` a)

我实际上是在尝试用查找表中的另一个 custom_id 替换 null custom_ids。有没有更好的方法可以让 BigQuery 接受?

【问题讨论】:

【参考方案1】:

只需使用常规的 LEFT JOIN - 如下所示

SELECT DISTINCT video_id, 
  COALESCE(
    a.custom_id, 
    b.custom_id, 
    'Default'
  )
FROM `test2.revenue` a
LEFT JOIN `test2.channel_map` b
ON a.channel_id = b.channel_id   

【讨论】:

以上是关于带有 SELECT 子查询的 BigQuery COALESCE()的主要内容,如果未能解决你的问题,请参考以下文章

Bigquery 将子查询应用于分区时间

带有case语句的bigquery中的子选择

BIGQUERY:连接谓词中的表不受支持的子查询

BigQuery - 使用子查询和 OR 语句连接多个条件

如何在 Datalab 的 api 中使用 Bigquery 中的子查询?

BigQuery:需要在相关子查询中返回记录类型的唯一值