结合使用BigQuery SQL和内置Python函数

时间:2018-11-25 16:52:43

标签: python sql google-bigquery

我最近开始使用Google的BigQuery服务及其Python API来查询一些大型数据库。我是SQL的新手,BigQuery文档对我的工作并没有很大帮助。

当前,我正在浏览reddit_comments数据库,并尝试过滤'created_utc'标签。

该created_utc字段采用的是Unix时间戳(即11月1日上午12:00是1541030400)

我想每天(或在两个Unix时间戳之间)获取评论,但是要以每天迭代的方式进行。像这样:

from datetime import datetime, timedelta


start = datetime.fromtimestamp(1538352000)
end = datetime.fromtimestamp(1541030400)

time = start

while time < end:
    print(time)
    time = time + timedelta(days = 1)

此处的打印时间如下:2018-09-30 20:00:00 但是,为了进行查询,我必须通过调用datetime的timestamp()函数(如time.timestamp()

)转换回Unix时间戳。

问题是,我试图像这样使用查询内部的timestamp()函数:

SELECT *
FROM 'fh-bigquery.reddit_comments.2018_10'
...
AND (created_utc >= curr_day.timestamp() AND created_utc <= next_day.timestamp())

但是,它抛出一个BadRequest:400 Function not found。有没有办法像我上面描述的那样使用内置的Python函数?还是需要其他选择?

到目前为止,一切似乎都很直观,但是奇怪的是我找不到关于此的有用信息。

1 个答案:

答案 0 :(得分:1)

您应该使用BigQuery的Built-in functions

例如:

要获取当前时间戳-CURRENT_TIMESTAMP()
获取当前日期开始的时间戳-TIMESTAMP_TRUNC(CURRENT_TIMESTAMP(), DAY)
要获取下一个日期的开始时间戳-TIMESTAMP_TRUNC(TIMESTAMP_ADD(CURRENT_TIMESTAMP() , INTERVAL 1 DAY), DAY)

以此类推

此外,要将created_utc转换为TIMESTAMP类型-您可以使用TIMESTAMP_SECONDS(created_utc)

您可以了解有关TIMESTAMP Functions

的更多信息