aks*_*123 16 timezone datetime google-bigquery
我在google大查询中将数据存储在unixtimestamp中.但是,当用户要求报告时,她将需要按当地时区过滤和分组数据.
数据存储在GMT中.用户可能希望在EST中看到数据.报告可能会要求按日期对数据进行分组.
我没有在这里看到时区转换功能:
有谁知道我怎么能在bigquery中做到这一点?即将时间戳转换为不同的时区后如何分组?
mil*_*ord 22
截至2016年9月,BigQuery已采用标准SQL,您现在可以使用"DATE(时间戳,时区)"功能来偏移时区.您可以在此处参考他们的文档:
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时区名称或抵消.
对于那些在这里绊倒的人:
鉴于 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 世界标准时间 |
BigQuery 中的 DATETIME 是原始时区,因此它们不包含时区信息。话虽这么说,如果您拥有可以了解 DATETIME 的时区的业务知识,则可以通过将其转换为具有已知时区的 TIMESTAMP 来去除该时区偏移量:
SELECT TIMESTAMP(datetime_value, '{timezone}')
Run Code Online (Sandbox Code Playgroud)
鉴于 TIMESTAMP 以 UTC 格式存储值,如果这是您首选的存储方法,您可以重新转换为 DATETIME,但现在您会知道您的 DATETIME 采用 UTC 格式:)
希望这能有所帮助!:)
2016 更新:请看下面的答案,BigQuery 现在提供时间戳和时区方法。
你是对的 - BigQuery 不提供任何时间戳转换方法。
在这种情况下,我建议您根据 GMT/UTC 时间戳字段的维度运行 GROUP BY,然后在代码中将结果转换为本地时区并显示。
| 归档时间: |
|
| 查看次数: |
30289 次 |
| 最近记录: |