Hive时间类型
目录
概述
因为自己和同事也一直对 Hive 的时间类型“记忆模糊”,所以参考官方文档,特意总结一下。
Date and time types
Hive 里日期和时间类型属于基础类型 Primitive Type。
- TIMESTAMP — 没有时区信息的日期和时间
- TIMESTAMP WITH LOCAL TIME ZONE — 具有时区信息的日期和时间
- DATE— 日期,例如 2019-02-11
Timestamps 一直都是一个很麻烦的概念。
Timestamp (“LocalDateTime” semantics)
Java 用 LocalDateTime 来记录年月日时分秒(不考虑时区)。
比如 “2014-12-12 12:34:56”,不代表任何瞬间,只是数值意义上的时间,无关时区。
Timestamp with local time zone (“Instant” semantics)
Java 的瞬时 timestamps 定义来一个时间,而不管这个数据是在什么地方被读取的。因此,timestamp 会根据不同的时区来进行匹配。
Type | Los_Angeles | New_York |
---|---|---|
timestamp with local time zone | 2014-12-12 12:34:56 | 2014-12-12 15:34:56 |
timestamp | 2014-12-12 12:34:56 | 2014-12-12 12:34:56 |
从上面表格可以知道,如果是需要考虑时区的,那么该 timestamp 的值会与时区有关,反之,就不管是在哪个时区,他的值都是保持一致的。
关于导入数据的时候,时间格式的问题,还看到一些资料
里面提到,当对以下数据进行转换的时候,可以出来以下的结果。
|
|
|
|
结果说明了,Hive 支持到纳秒。如果溢出,则转换为了 NULL。
附上一些关于时间的内置函数。
返回类型 | 函数名 | 描述 |
---|---|---|
string | from_unixtime(int unixtime) | 输入表示 UNIX 的时间戳,返回代表该日期的当前系统时区的字符串日期 |
string | to_date(string timestamp) | to_date(“1970-01-01 00:00:00”) = “1970-01-01” |
int | year(string date) | year(“1970-01-01 00:00:00”) = 1970 |
Hive 还有相当多关于时间的内置函数,这里就不列举了。
警告
本文最后更新于 2017年2月1日,文中内容可能已过时,请谨慎参考。