我在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
=====
拜托,亲爱的专家请你帮忙解释一下这个问题?
谢谢。 将
答案 0 :(得分:1)
这实际上不是BigQuery的问题,而是SQL的问题,因为您尝试运行的查询不正确,并且在任何SQL驱动的环境中都会失败。乍一看,我看到了几个问题:
GROUP BY
语句,但您没有对任何内容进行分组。 GROUP BY
通常与聚合函数一起使用(例如 COUNT , MAX , MIN , SUM 或 AVG )对结果集进行分组,但您在查询中没有这样做。GROUP BY
语句应包含您要检索的所有字段。在嵌套查询中,您要查询所有字段(*
),但是您没有按year
进行分组,因此这就是BQ抱怨的内容:Expression 'year' is not present in the GROUP BY list
。< / LI>
SELECT
查询。如果您只对视图和标题字段感兴趣,为什么不直接查询它们,并且您的查询将使用更少的资源(因为它只会搜索这两个列)?因此,我认为像下面这样的查询将更符合我理解你想要做的事情。随意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