spark sql时间戳数据类型是不是实际存储时区?

Posted

技术标签:

【中文标题】spark sql时间戳数据类型是不是实际存储时区?【英文标题】:Does spark sql timestamp datatype actually store timezone?spark sql时间戳数据类型是否实际存储时区? 【发布时间】:2020-07-02 07:30:53 【问题描述】:

spark sql timestamp 数据类型是否实际存储时区?

我正在使用 databricks 6.5(Apache Spark 2.4.5、Scala 2.11)

%sql

select 
current_timestamp C1,
from_utc_timestamp(current_timestamp,"Australia/Adelaide") C2,
date_format(from_utc_timestamp(current_timestamp,"Australia/Adelaide"),"Z") C3

给出这个结果

C1                              C2                              C3
=====================================================================
2020-07-02T07:06:57.716+0000    2020-07-02T16:36:57.716+0000    +0000

任何地方都没有时区指示符

我能找到的所有日期时间函数都要求您指定一个时区。在我看来,时区部分应该不显示,因为它实际上并不存在于数据中。

这个问题说:不,它没有被存储,但任何人都可以确认吗?

Getting correct offset for timezone using current_timestamp in apache spark

编辑

有没有其他人认为 +0000 在这里具有误导性?对我来说,这意味着该日期的时区为 UTC,并且可以想象可能能够存储不同的时区。我来自 SQL Server 世界,其中不存储时区的日期时间没有时区指示符。

【问题讨论】:

【参考方案1】:

在 spark 中,所有日期时间操作/函数都可以识别时区,但 spark 在内部从不存储时区,它们将时间存储在 intlong

来自火花文档 -

* Helper functions for converting between internal and external date and time representations.
 * Dates are exposed externally as java.sql.Date and are represented internally as the number of
 * dates since the Unix epoch (1970-01-01). Timestamps are exposed externally as java.sql.Timestamp
 * and are stored internally as longs, which are capable of storing timestamps with microsecond
 * precision.

参考-spark-git

【讨论】:

以上是关于spark sql时间戳数据类型是不是实际存储时区?的主要内容,如果未能解决你的问题,请参考以下文章

数据类型“带时区的时间戳”中的时区存储

date数据写入ES的时区问题

spark scala比较具有时间戳列的数据帧

蜂巢时间戳不接受 Spark 时间戳类型

postgreSQL 将列数据类型更改为没有时区的时间戳

mysql获取当前系统日期和时间