BigQuery 中的优雅时区转换

Posted

技术标签:

【中文标题】BigQuery 中的优雅时区转换【英文标题】:Elegant timezone conversion in BigQuery 【发布时间】:2018-10-22 15:51:46 【问题描述】:

我已将具有东部时间戳的数据加载到 BigQuery 中,这些时间戳存储为来自源数据的原始时间戳:

placed_eastern
-------------------
2018-07-23 00:00:03

BigQuery 默认假定原始时间戳应存储为 UTC:

2018-07-23 00:00:03 UTC

问题:我需要修正这个时区假设。

我目前有一个丑陋的黑客来修复此错误,以确保正确存储时间戳。这会将时间戳的日期和时间部分提取为字符串,将它们连接起来,然后重新创建时间戳。

select 
  placed_eastern,
  timestamp(
    concat(
      cast(extract(date from placed_eastern) as string), 
      ' ', 
      cast(extract(time from placed_eastern) as string)
    ),
    'US/Eastern'
  ) as actual_placed_utc

问题:是否有一种优雅的记录方式来处理这个问题?

【问题讨论】:

【参考方案1】:

您可以转换为DATETIME 以将时间戳视为逻辑日期/时间,然后使用US/Eastern 转换回TIMESTAMP

SELECT TIMESTAMP(DATETIME(placed_eastern), 'US/Eastern')) AS actual_placed_utc
FROM dataset.table

【讨论】:

以上是关于BigQuery 中的优雅时区转换的主要内容,如果未能解决你的问题,请参考以下文章

BigQuery 时区转换

BigQuery转换为不同的时区

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

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

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

列类型 TIMESTAMP 的 BigQuery 导入转换日期时间偏移量/时区,但列类型 DATETIME 失败并显示“无效的日期时间字符串”