在BigQuery中使用TABLE_DATE_RANGE函数

时间:2017-11-30 23:33:16

标签: google-bigquery

我在很长一段时间内第一次使用BigQuery,所以我有点生疏了。

我正在使用可以是found here for Reddit data.

的公共数据集

这是一张快照:

enter image description here

我要做的是创建一个从2017年提取所有数据的查询。

基本上,我想使用特定于此的BQ语法,它是使用标准SQL编写的:

fh-bigquery.reddit_posts.2017*

我知道这将涉及使用TABLE_DATA_RANGE函数,但我对它的具体措辞感到困惑。

如果我只使用其中一个表,它将如下所示:

SELECT
  FORMAT_UTC_USEC(SEC_TO_TIMESTAMP(created_utc)) AS created_date
FROM
[fh-bigquery:reddit_posts.2017_06]
LIMIT
10

但我显然试图跨越这个数月。

1 个答案:

答案 0 :(得分:0)

以下是BigQuery Standard SQL

  
#standardSQL
SELECT 
  TIMESTAMP_SECONDS(created_utc) AS created_date 
FROM `fh-bigquery.reddit_posts.2017_*`
LIMIT 10

它执行您对一个表的查询所做的事情 - 但对于2017年的所有表(不确定您在查询中实际查找的逻辑是什么 - 但我希望您只是为了简单而将其留在问题之外)

注意:您可以在查询中使用_TABLE_SUFFIX来确定特定于行的特定行 - 例如:

#standardSQL
SELECT 
  _TABLE_SUFFIX AS month, 
  COUNT(1) AS records  
FROM `fh-bigquery.reddit_posts.2017_*`
GROUP BY month
ORDER BY month 

输出如下

month    records     
-----    ---------
01       9,218,513   
02       8,588,120   
03       9,616,340   
04       9,211,051   
05       9,498,553   
06       9,597,725   
07       9,989,122   
08      10,424,133   
09       9,787,604   
10      10,281,718   

如果由于某种原因您仍然绑定到BigQuery Legacy SQL - 您可以使用下面的

#legacySQL
SELECT
  FORMAT_UTC_USEC(SEC_TO_TIMESTAMP(created_utc)) AS created_date
FROM TABLE_QUERY([fh-bigquery:reddit_posts], "LEFT(table_id, 5) = '2017_'")  
LIMIT 10

但强烈建议migrate to Standard SQL