hive 时间转字符串_关于 Hive 的时间类型

0d5518cd6bebde45897ae16771a9ac81.png

1 Overview

因为自己和同事也一直对 Hive 的时间类型“记忆模糊”,所以参考官方文档,特意总结一下。

2 Date and time types

Hive 里日期和时间类型属于基础类型 Primitive Type。

  • TIMESTAMP — 没有时区信息的日期和时间
  • TIMESTAMP WITH LOCAL TIME ZONE — 具有时区信息的日期和时间
  • DATE— 日期,例如 2019-02-11

Timestamps 一直都是一个很麻烦的概念。

2.1 Timestamp ("LocalDateTime" semantics)

Java 用 LocalDateTime 来记录年月日时分秒(不考虑时区)。

比如 "2014-12-12 12:34:56",不代表任何瞬间,只是数值意义上的时间,无关时区。

2.2 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 的值会与时区有关,反之,就不管是在哪个时区,他的值都是保持一致的。

关于导入数据的时候,时间格式的问题,还看到一些资料。

https:// community.hortonworks.com /questions/25325/hive-datatype-timestamp-with-miliseconds.html

里面提到,当对以下数据进行转换的时候,可以出来以下的结果。

// data file
2015-11-01 21:10:00.1
2015-11-01 21:10:00.1190011
2015-11-01 21:10:00.12
2015-11-01 21:10:00.123
2015-11-01 21:10:00.1234
2015-11-01 21:10:00.12345
2015-11-01 21:10:00.123456789
2015-11-01 21:10:00.490155
2015-11-01 21:10:00.1234567890
2015-11-01 21:10:00.1234567890123456789
// select * from test_timestamp;
+--------------------------------+--+
|       test_timestamp.col       |
+--------------------------------+--+
| 2015-11-01 21:10:00.1          |
| 2015-11-01 21:10:00.1190011    |
| 2015-11-01 21:10:00.12         |
| 2015-11-01 21:10:00.123        |
| 2015-11-01 21:10:00.1234       |
| 2015-11-01 21:10:00.12345      |
| 2015-11-01 21:10:00.123456789  |
| 2015-11-01 21:10:00.490155     |
| NULL                           |
| NULL                           |

结果说明了,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 还有相当多关于时间的内置函数,这里就不列举了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值