BigQuery转换为不同的时区
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BigQuery转换为不同的时区相关的知识,希望对你有一定的参考价值。
我在google大查询中将数据存储在unixtimestamp中。但是,当用户要求报告时,她将需要按当地时区过滤和分组数据。
数据存储在GMT中。用户可能希望在EST中看到数据。报告可能会要求按日期对数据进行分组。
我没有看到时区转换函数here:
有谁知道我怎么能在bigquery中做到这一点?即将时间戳转换为不同的时区后如何分组?
答案
2016更新:看下面的答案,BigQuery现在提供时间戳和时区方法。
你是对的--BigQuery不提供任何时间戳转换方法。
在这种情况下,我建议您根据GMT / UTC时间戳字段的维度运行GROUP BY,然后在代码中转换并在本地时区显示结果。
另一答案
截至2016年9月,BigQuery已采用标准SQL,您现在可以使用“DATE(时间戳,时区)”功能来偏移时区。您可以在此处参考他们的文档:
另一答案
BigQuery中的标准SQL有built-in functions:
DATE(timestamp_expression, timezone)
TIME(timestamp, timezone)
DATETIME(timestamp_expression, timezone)
例:
SELECT
original,
DATETIME(original, "America/Los_Angeles") as adjusted
FROM sometable;
+---------------------+---------------------+
| original | adjusted |
+---------------------+---------------------+
| 2008-12-25 05:30:00 | 2008-12-24 21:30:00 |
+---------------------+---------------------+
你可以使用标准的IANA timezone names or offsets。
另一答案
你的前提是对的。如果您这样分组,那么想要EST或EDT的用户将得到错误的日期分组:
GROUP BY UTC_USEC_TO_DAY(ts_field)
但只要您弄清楚用户想要的偏移量,您仍然可以在服务器上进行完整计算。例如,如果EST比UTC晚5小时,则查询如下:
GROUP BY UTC_USEC_TO_DAY(ts_field - (5*60*60*1000*1000000) )
只需将“5”参数化为几小时的偏移量,就可以了。以下是基于其中一个示例数据集的示例:
SELECT
COUNT(*) as the_count,
UTC_USEC_TO_DAY(timestamp * 1000000 - (5*60*60*1000*1000000) ) as the_day
FROM
[publicdata:samples.wikipedia]
WHERE
comment CONTAINS 'disaster'
and timestamp >= 1104537600
GROUP BY
the_day
ORDER BY
the_day
您可以删除偏移量以查看某些编辑如何移动到不同的日期。
以上是关于BigQuery转换为不同的时区的主要内容,如果未能解决你的问题,请参考以下文章