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 DATE docs

另一答案

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转换为不同的时区的主要内容,如果未能解决你的问题,请参考以下文章

BigQuery 时区转换

将时间戳转换为特定时区然后在 bigquery 中将其转换为日期时出现问题

BigQuery 中的优雅时区转换

BigQuery 自动将时间戳时区转换为 UTC

bigquery 使用时区转换字符串日期时间

BigQuery 字符串到时间戳,在源中保留时区