Bigquery意外关键字

时间:2017-12-22 02:16:24

标签: google-bigquery

我刚刚开始使用Google BigQuery,并且在第一次查询时遇到了问题。我试图获取Stack Overflow帖子的列表,包括2015-01-01,其中包含多个标签之一。以下是我在查询中的第一次传递:

#standardSQL

SELECT
 title,
 body,
 answer_count,
 creation_date,
 tags,
 view_count 

FROM
 `bigquery-public-data.stackoverflow.posts_questions` limit 10

WHERE
 creation_date >= "2015-01-01" AND tags HAVING "terraform" OR "chef" OR "puppet" OR "ansible"

BigQuery验证程序显示以下错误消息:

错误:语法错误:[14:1]处的意外关键字WHERE

2 个答案:

答案 0 :(得分:2)

您有一些语法错误,即错误位置的 public void DoStuff() { var intervalMs = 5000; var timer = new Timer(intervalMs); timer.Elapsed += new ElapsedEventHandler(DoStuffOnTimer); timer.Enabled = true; } private void DoStuffOnTimer(object source, ElapsedEventArgs e) { //do stuff } ,并且错误地使用limit 10关键字。我还使用原生HAVING而不是比较字符串:

timestamp

答案 1 :(得分:0)

这里有一些问题,但希望这会有所帮助:

  • 在WHERE子句之后,LIMIT需要最后一次。
  • 虽然HAVING在某些情况下有效 - 即作为后聚合(即在GROUP BY之后)过滤器,但它没有我认为你想要的含义。

据说这个查询可能就是你想要的:

#standardSQL
SELECT
  title,
  body,
  answer_count,
  creation_date,
  tags,
  view_count
FROM `bigquery-public-data.stackoverflow.posts_questions`
WHERE creation_date >= "2015-01-01" AND
  EXISTS (
    SELECT 1 FROM UNNEST(SPLIT(tags, "|")) AS tag
    WHERE tag IN ("terraform", "chef", "puppet", "ansible")
  )
LIMIT 10;

请注意,我需要将SPLITtags列一起使用,因为标记由竖线字符分隔。由于您可以免费获得1 TB的查询,因此请尽量通过获取所有结果而不是使用LIMIT来充分利用它。