【问题标题】:Understanding TimeZone in BigQuery了解 BigQuery 中的时区
【发布时间】:2020-12-29 16:32:37
【问题描述】:

我们需要将时间戳列存储在 PST 中,并且正在使用同一列对表进行分区。我看到虽然我已将列值转换为 PST,但 BigQuery 仍显示 UTC 时区。

有什么方法可以将数据存储在 UTC 以外的时区?这是我用来创建此列的方法。

public static Timestamp getTimestampInPST() {
    ZonedDateTime nowPST = ZonedDateTime.ofInstant(Instant.now(), TimeZone.getTimeZone("PST").toZoneId());
    return Timestamp.valueOf(nowPST.toLocalDateTime());
}

【问题讨论】:

  • 您能分享您收到的完整错误消息吗?另外,表是否已经创建?你也可以分享架构吗?

标签: google-bigquery


【解决方案1】:

要解决此问题,您可以使用“日期时间”数据类型。 查询的输出差异如下所示:-

查询:

select CURRENT_TIMESTAMP() as TS, CURRENT_DATETIME() as DT;

输出:-

解决方案的第二部分:-

如果您的日期时间(数据)是 UTC,那么您可以通过以下 SQL 更改您的数据(日期时间为 PST):-

SELECT CURRENT_DATETIME(), DATETIME_SUB( CURRENT_DATETIME(), INTERVAL 8 hour);

否则,如果您的数据(日期时间)在 PST 中,则尝试插入数据而不从您的数据中减去 8 小时。如果您的列数据类型是“日期时间”,那么您将不会遇到同样的问题。

【讨论】:

  • 但问题是我无法确定如何在 Spark Java 的日期时间列中存储值。 df = df.withColumn("createdDate", from_utc_timestamp(current_timestamp(), "PST"));存储此 df 时出现以下错误。 BigQuery 错误是提供的架构与表不匹配。字段 createdDate 已将类型从 DATETIME 更改为 TIMESTAMP
猜你喜欢
  • 1970-01-01
  • 2013-08-27
  • 1970-01-01
  • 2021-11-10
  • 1970-01-01
  • 2016-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多