BigQuery转换为不同的时区

aks*_*123 16 timezone datetime google-bigquery

我在google大查询中将数据存储在unixtimestamp中.但是,当用户要求报告时,她将需要按当地时区过滤和分组数据.

数据存储在GMT中.用户可能希望在EST中看到数据.报告可能会要求按日期对数据进行分组.

我没有在这里看到时区转换功能:

有谁知道我怎么能在bigquery中做到这一点?即将时间戳转换为不同的时区后如何分组?

mil*_*ord 22

截至2016年9月,BigQuery已采用标准SQL,您现在可以使用"DATE(时间戳,时区)"功能来偏移时区.您可以在此处参考他们的文档:

BigQuery DATE文档

  • @DennisJaheruddin 您是否阅读过文档?如果您需要“DateTime”结果,则可以改用“DATETIME(timestamp, timezone)”。https://cloud.google.com/bigquery/docs/reference/standard-sql/functions-and-operators#datetime (2认同)

Man*_*ham 13

BigQuery中的标准SQL具有内置函数:

DATE(timestamp_expression, timezone)
TIME(timestamp, timezone)
DATETIME(timestamp_expression, timezone)
Run Code Online (Sandbox Code Playgroud)

例:

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 |
+---------------------+---------------------+
Run Code Online (Sandbox Code Playgroud)

您可以使用标准的IANA时区名称或抵消.


Phi*_*ert 9

对于那些在这里绊倒的人:

如何将时间戳转换为另一个时区?

鉴于 TIMESTAMP 值一旦构造后将存储为 UTC,并且 TIMESTAMP 没有构造函数(TIMESTAMP、STRING),您可以将时间戳转换为另一个时区,方法是先将其转换为 DATETIME,然后从 构造新的 TIMESTAMP新时区中的 DATETIME:

SELECT TIMESTAMP(DATETIME(timestamp_field, '{timezone}'))
Run Code Online (Sandbox Code Playgroud)

例子:

SELECT
    input_tz,
    input,
    'America/Montreal' AS output_tz,
    TIMESTAMP(DATETIME(input,'America/Montreal')) AS output
FROM (
    SELECT 'US/Pacific' AS input_tz, TIMESTAMP(DATETIME(DATE(2021, 1, 1), TIME(16, 0, 0)), 'US/Pacific') AS input
    UNION ALL
    SELECT 'UTC' AS input_tz, TIMESTAMP(DATETIME(DATE(2021, 1, 1), TIME(16, 0, 0)), 'UTC') AS input
    UNION ALL
    SELECT 'Europe/Berlin' AS input_tz, TIMESTAMP(DATETIME(DATE(2021, 1, 1), TIME(16, 0, 0)), 'Europe/Berlin') AS input
) t
Run Code Online (Sandbox Code Playgroud)

结果是:

输入_tz 输入 输出_tz 输出
1 美国/太平洋地区 2021-01-02 00:00:00 世界标准时间 美洲/蒙特利尔 2021-01-01 19:00:00 世界标准时间
2 世界标准时间 2021-01-01 16:00:00 世界标准时间 美洲/蒙特利尔 2021-01-01 11:00:00 世界标准时间
3 欧洲/柏林 2021-01-01 15:00:00 世界标准时间 美洲/蒙特利尔 2021-01-0110:00:00 世界标准时间

如何从 DATETIME 值中删除时区信息?

BigQuery 中的 DATETIME 是原始时区,因此它们不包含时区信息。话虽这么说,如果您拥有可以了解 DATETIME 的时区的业务知识,则可以通过将其转换为具有已知时区的 TIMESTAMP 来去除该时区偏移量:

SELECT TIMESTAMP(datetime_value, '{timezone}')
Run Code Online (Sandbox Code Playgroud)

鉴于 TIMESTAMP 以 UTC 格式存储值,如果这是您首选的存储方法,您可以重新转换为 DATETIME,但现在您会知道您的 DATETIME 采用 UTC 格式:)

希望这能有所帮助!:)


Mic*_*hri 3

2016 更新请看下面的答案,BigQuery 现在提供时间戳和时区方法


你是对的 - BigQuery 不提供任何时间戳转换方法。

在这种情况下,我建议您根据 GMT/UTC 时间戳字段的维度运行 GROUP BY,然后在代码中将结果转换为本地时区并显示。