我最近开始使用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()
问题是,我试图像这样使用查询内部的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函数?还是需要其他选择?
到目前为止,一切似乎都很直观,但是奇怪的是我找不到关于此的有用信息。
答案 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