Google BigQuery(LegacySQL)GROUP BY

时间:2018-06-05 11:48:19

标签: sql google-bigquery

我在Google BigQuery上做了一个问候世界,应该能够执行此操作(在Cloud Shell中)并返回一些结果但是我得到了一个关于GROUP BY列表的错误。

但Google Docs在this告诉我,我的LegacySQL是正确的。

=====

$bq query --use_legacy_sql=true "SELECT REGEXP_REPLACE(title,r'_', ' ') AS regexp_title, views FROM (SELECT * FROM [bigquery-samples:wik
ipedia_benchmark.Wiki100M] WHERE NOT title CONTAINS ':' AND wikimedia_project='wp' AND language='en' AND REGEXP_MATCH(title, r'^G.*o.*o.*e$') GROUP BY title ORDER BY views DESC LIMIT 10)"
  

等待bqjob_r47d6732dcb76803b_00000163cfb22bdc_1 ...(0s)当前   状态:完成

Error in query string: Error processing job 'ordinal-throne-172104:bqjob_r47d6732dcb76803b_00000163cfb22bdc_1': Expression 'year' is not present in the GROUP BY list

=====

拜托,亲爱的专家请你帮忙解释一下这个问题?

谢谢。 将

1 个答案:

答案 0 :(得分:1)

这实际上不是BigQuery的问题,而是SQL的问题,因为您尝试运行的查询不正确,并且在任何SQL驱动的环境中都会失败。乍一看,我看到了几个问题:

  1. 您使用GROUP BY语句,但您没有对任何内容进行分组。 GROUP BY通常与聚合函数一起使用(例如 COUNT MAX MIN SUM AVG )对结果集进行分组,但您在查询中没有这样做。
  2. GROUP BY语句应包含您要检索的所有字段。在嵌套查询中,您要查询所有字段(*),但是您没有按year进行分组,因此这就是BQ抱怨的内容:Expression 'year' is not present in the GROUP BY list。< / LI>
  3. 您正在执行嵌套的SELECT查询。如果您只对视图标题字段感兴趣,为什么不直接查询它们,并且您的查询将使用更少的资源(因为它只会搜索这两个列)?
  4. 因此,我认为像下面这样的查询将更符合我理解你想要做的事情。随意modify the aggregation function to the one of your choice

    SELECT
      REGEXP_REPLACE(title,r'_', ' ') AS regexp_title,
      SUM(views) as sum_views
    FROM
      [bigquery-samples:wikipedia_benchmark.Wiki100M]
    WHERE
      NOT title CONTAINS ':'
      AND wikimedia_project='wp'
      AND language='en'
      AND REGEXP_MATCH(title, r'^G.*o.*o.*e$')
    GROUP BY
      regexp_title
    ORDER BY
      sum_views DESC
    LIMIT
      10