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 在内部从不存储时区,它们将时间存储在 int
和 long
来自火花文档 -
* 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时间戳数据类型是不是实际存储时区?的主要内容,如果未能解决你的问题,请参考以下文章