通过 Cloud Datalab 加入 Google BigQuery

Posted

技术标签:

【中文标题】通过 Cloud Datalab 加入 Google BigQuery【英文标题】:Join in Google BigQuery via Cloud Datalab 【发布时间】:2017-02-19 23:59:14 【问题描述】:

我试图在 Google BigQuery 中对来自两个不同表(其中一个是视图)的两列进行 JOIN。我尝试了很多方法,但最常收到此错误:

invalidQuery: 2.1 - 0.0: JOIN cannot be applied directly to a table union or to a table wildcard function. Consider wrapping the table union or table wildcard function in a subquery (e.g., SELECT *).

这是我的 SQL(旧版)查询:

SELECT 
  blp_today.beta_key,
  blp_today.px_last,
  blp_today.eqy_weighted_avg_px,
  blp_today.created_date,
  blp_today.security_ticker,
  ciq_company_stg.ticker,
  ciq_company_stg.ciq
FROM 
  [fcm-dw:acquisition_bloomberg.blp_today],
  [fcm-dw:acquisition_ciq] 
JOIN
  blp_today.security_ticker AS ticker
ON
  blp_today.security_ticker = ciq_company_stg.ticker
LIMIT 1000

任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

我想你要么想要这样的东西:

SELECT * FROM(SELECT 
  beta_key,
  px_last,
  eqy_weighted_avg_px,
  created_date,
  security_ticker,
FROM 
  [fcm-dw:acquisition_bloomberg.blp_today],
  [fcm-dw:acquisition_ciq] ) as  a
JOIN
  blp_today.security_ticker AS ticker
ON
  a.security_ticker = ciq_company_stg.ticker
LIMIT 1000

//edit:我之前有点错过了您正在加入的表(在您的 join 语句之后)实际上似乎不是一个表。您是否尝试加入或合并这两个表: [fcm-dw:acquisition_bloomberg.blp_today] 和 [fcm-dw:acquisition_ciq] ?后者甚至是一张桌子吗?您的代码似乎表明还有另一个表名为:[fcm-dw:acquisition_ciq.ciq_company_stg]?

【讨论】:

后者实际上是同一张表的视图,不过这有帮助,谢谢。【参考方案2】:

首先将您的联合包装到子选择中,然后加入结果

select ...
FROM 
(select * from 
  [fcm-dw:acquisition_bloomberg.blp_today],
  [fcm-dw:acquisition_ciq] ) t
JOIN
  blp_today.security_ticker AS ticker

【讨论】:

以上是关于通过 Cloud Datalab 加入 Google BigQuery的主要内容,如果未能解决你的问题,请参考以下文章

如何使用R将Google Cloud Datalab输出保存到BigQuery中

如何在我的本地 linux 服务器上运行 google-cloud-datalab?

删除 Google Cloud Datalab SQL 模块参数中的引号?

如何在cloud datalab上创建和使用UDF?

在 Cloud Datalab 中使用 Pandas 删除重复项(来自 bigquery)回溯错误

Google Cloud Datalab 中的 BigQuery - 获取查询文本?