【问题标题】:Join in Google BigQuery via Cloud Datalab通过 Cloud Datalab 加入 Google BigQuery
【发布时间】: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

任何帮助将不胜感激。

【问题讨论】:

    标签: sql join google-bigquery google-cloud-platform google-cloud-datalab


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-14
      • 2016-11-02
      • 1970-01-01
      • 2016-08-25
      相关资源
      最近更新 更多