是不是Hive
和SparkSQL
不支持datetime
的数据类型?Hive和SparkSQL不支持日期时间类型?
从我阅读的参考文献中,他们似乎只支持date
和timestamp
。前者不是时间分量(即小时,分钟和秒);后者具有很高的精确度(低至毫秒),但并不是人类可读的(它总是需要通过from_unixtime()
或date_format()
进行转换,结果将是字符串,而不是datetime
类型)。
相比之下,其他数据库系统(如MySQL
)具有的数据类型为datetime
。 (例如见ref)
有什么好的建议/提示如何解决这个限制?
这是我的引用:
更新:在人类可读性
这里,我给上MySQL
个例子来说明一下我点 人类可读性:
-- MySQL code
select
cast(now() as date) as asDate, -- human readable
cast(now() as dateTime) as asDateTime, -- human readable
unix_timestamp(now()) as asUnixTimestamp, -- not H/R
cast(from_unixtime(unix_timestamp(now()))
as dateTime)
asDateTimeAgain -- cast into dateTime to make it H/R
显示是这样的:
(注意第四列asDateTimeAgain
,这是人类可读)
+------------+---------------------+-----------------+---------------------+
| asDate | asDateTime | asUnixTimestamp | asDateTimeAgain |
+------------+---------------------+-----------------+---------------------+
| 2017-10-21 | 2017-10-21 22:37:15 | 1508625435 | 2017-10-21 22:37:15 |
+------------+---------------------+-----------------+---------------------+
1 row in set (0.00 sec)
而且限制不只是人类的可读性。的datetime
字符串 表示是 人类可读的,但随后失去了性的datetime
和 将需要进一步转化回datatime
日期/时间处理, 如min()
,max()
,并捕获值到java.util.Date
-- Hive/SparkSQL code
select
current_date asDate,
unix_timestamp() asUnixTimestamp,
from_unixtime(unix_timestamp(),
'yyyy-MM-dd HH:mm:ss') asString
输出会是这样,其中,所述第三列是一个字符串,而不是一个 型datetime
------------------------------------------------------
| asDate | asUnixTimestamp | asString |
| ---------- | --------------- | ------------------- |
| 2017-10-21 | 1508625586 | 2017-10-21 22:39:46 |
------------------------------------------------------
感谢您的回答!我更新了我的问题,以澄清我的意思是“人的可读性”。请检查并发表评论。 – leeyuiwah
其实我的问题可能与另一个问题有关。如果可以的话,请看看我的另一个问题:https://stackoverflow.com/questions/46869005/hive-sparksql-how-to-convert-a-unix-timestamp-into-a-timestamp-not-字符串非常感谢! – leeyuiwah
@leeyuiwah。 。 。对于字符串和内部格式之间的转换,Hive确实倾向于非常灵活。 –