在 BigQuery 中使用 TABLE_DATE_RANGE 函数

Posted

技术标签:

【中文标题】在 BigQuery 中使用 TABLE_DATE_RANGE 函数【英文标题】:Using the TABLE_DATE_RANGE function in BigQuery 【发布时间】:2017-11-30 23:33:16 【问题描述】:

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

我使用的公共数据集可以是found here for Reddit data.

这是一个快照:

我要做的是创建一个查询,提取 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

但我显然试图跨越几个月。

【问题讨论】:

fh-bigquery.reddit_posts.2017* 有什么问题?使用标准 SQL(不是使用旧版 SQL 的 TABLE_DATE_RANGE)。 因为我想用 BQ 语法来熟悉它。 【参考方案1】:

以下是 BigQuery 标准 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

【讨论】:

不应该是..2017* 而不是..2017_* 来捕捉边缘情况,例如201708_? 我故意将2017_ 放在我认为201708_201707_ 是其中包含零行的异常值。 @MikhailBerlyant 谢谢你,但同样,我正在寻找 BQ 特定的语法。我已经知道标准 SQL。 请再次阅读答案。它提供了两个选项 - 都适用于 BigQuery - 一个适用于标准 SQL,另一个适用于旧版 SQL!这不是你问的吗? "我正在寻找 BQ 特定的语法" 为什么要学习旧的 SQL 语法?它被称为“遗留”,因为它不是首选的 SQL 方言。

以上是关于在 BigQuery 中使用 TABLE_DATE_RANGE 函数的主要内容,如果未能解决你的问题,请参考以下文章

在 Power BI 中使用 BigQuery 重复/嵌套字段

是否可以在 aws lambda 中使用 bigquery?

BigQuery -- 在公开共享项目中使用 UDF 的问题

在 BigQuery 的查询中使用 UDF 作为列

Bigquery:在 Bigquery 中计算余额或重写 SQL 脚本

如何在 Datalab 的 api 中使用 Bigquery 中的子查询?