【问题标题】:BigQuery: select from regexp_match where field in other tableBigQuery:从 regexp_match where 其他表中的字段中选择
【发布时间】:2014-07-16 01:20:29
【问题描述】:

如何从多个表中选择某些字段,同时与另一个表中的某些字段进行交叉检查。我想要来自另一个表中列出的 udid 的信息。

举例说明:

SELECT udid, score 
FROM (TABLE_QUERY(data_one,'REGEXP_MATCH(table_id, "Data_2014_05_*")'))
WHERE udid IN (SELECT udid FROM data_two.udid_with_high_levels)
GROUP BY udid

是否可以使用“WHERE IN”来做到这一点?如何?我收到以下错误: “JOIN(包括半连接)和 UNION ALL(逗号)不能组合在一个 SELECT 语句中。将 UNION ALL 移动到内部查询或将 JOIN 移动到外部查询。”

JOIN怎么做,我的第一个表来自regexp_match,语法是什么?

谢谢!

【问题讨论】:

    标签: google-bigquery


    【解决方案1】:

    您可以进行子选择。

    这个对公共数据的查询显示了同样的错误:

    SELECT title, SUM(requests) c
    FROM (TABLE_QUERY([fh-bigquery:wikipedia],'REGEXP_MATCH(table_id, "pagecounts_2014*")')) 
    WHERE title IN (
      SELECT title
      FROM [fh-bigquery:wikipedia.wikipedia_views_201308_en_top_titles_views]
      GROUP BY title) 
    GROUP BY 1
    ORDER BY 2
    

    向表选择添加外部选择解决了这个问题:

    SELECT title, SUM(requests) c
    FROM (SELECT title, requests 
      FROM (TABLE_QUERY([fh-bigquery:wikipedia],'REGEXP_MATCH(table_id, "pagecounts_2014*")')))
    WHERE title IN (
      SELECT title
      FROM [fh-bigquery:wikipedia.wikipedia_views_201308_en_top_titles_views]
      GROUP BY title) 
    GROUP BY 1
    ORDER BY 2
    

    【讨论】:

    • 谢谢,它有效!你有什么解释为什么会这样?看起来真的很傻!
    • 这是当前实现的一个不幸的限制,应该解决。感谢您的报告!
    猜你喜欢
    • 1970-01-01
    • 2011-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-29
    • 2017-03-08
    相关资源
    最近更新 更多