簡體   English   中英

BigQuery 意外關鍵字

[英]BigQuery unexpected keyword

我剛剛開始使用 Google BigQuery,並且在我的第一個查詢中遇到了問題。 我正在嘗試獲取自 2015 年 1 月 1 日以來(包括 2015 年 1 月 1 日)的 Stack Overflow 帖子列表,這些帖子具有多個標簽之一。 以下是我在查詢中的第一遍:

#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

您有一些語法錯誤,即錯誤位置的limit 10和錯誤使用HAVING關鍵字。 我還將使用本機timestamp而不是比較字符串:

#standardSQL
SELECT
  title,
  body,
  answer_count,
  creation_date,
  tags,
  view_count
FROM
  `bigquery-public-data.stackoverflow.posts_questions`
WHERE
  creation_date >= TIMESTAMP('2015-01-01')
  AND tags IN ('terraform',
    'chef',
    'puppet',
    'ansible')
LIMIT
  10

這里有一些問題,但是希望這會有所幫助:

  • LIMIT需要排在WHERE子句之后。
  • 雖然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;

請注意,我需要在tags列中使用SPLIT ,因為標簽由豎線字符分隔。 由於您可以免費獲得TB級的查詢,因此請嘗試一次獲取所有結果而不是使用LIMIT來充分利用它。

SELECT
用戶類型,CONCAT(start_station_name, " to ",end_station_name) AS route, COUNT(*) as num_trips, ROUND(AVG(cast(tripduration as int64)/60),2) AS duration FROM bigquery-public-data.new_york_citibike.citibike_trips GROUP BY start_station_name,end_station_name,usertype,ORDER BY num_trips DESC LIMIT 10

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM