温馨提示:如果使用电脑查看图片不清晰,可以使用手机打开文章单击文中的图片放大查看高清原图。


Fayson的github:

​https://github.com/fayson/cdhproject​


提示:代码块部分可以左右滑动查看噢


1

文档编写目的


Hive中使用TimeStamp时,时间戳默认是精确到秒的,那在Hive中如何处理需要精确到毫秒的时间戳呢?本篇文章Fayson主要说明下Hive时间戳的转换及使用。


  • 测试环境

1.RedHat7.2

2.CM和CDH版本为5.15.0


2

Hive中TimeStamp获取及转换


1.Hive中使用current_timestamp()函数获取当前时间


select current_timestamp();


0472-Hive中TimeStamp精度问题分析_unix


使用Hive的current_timestamp()函数获取到当前的时间精确到毫秒。


2.Hive中获取当前时间戳,默认使用unix_timestamp()函数


select unix_timestamp(current_timestamp());


0472-Hive中TimeStamp精度问题分析_时间戳_02


使用Hive的 unix_timestamp() 函数获取到当前的时间戳为10位的bigint类型数值,该数值只精确到秒级别。


3.Hive中将时间戳转换为日期类型,默认使用 from_unixtime ()


select from_unixtime(1543735779, 'yyyy-MM-dd HH:mm:ss:SSS');


0472-Hive中TimeStamp精度问题分析_unix_03


上面的转换结果可以看到时间的毫秒是无法正常获取到,因为时间戳只是精确到秒级别的,from_unixtime()函数也只支持秒级别的时间戳转换。


4.Hive中获取毫秒级别的时间戳


select current_timestamp(), cast(current_timestamp() as double) * 1000 as timestamp;


0472-Hive中TimeStamp精度问题分析_hive_04

0472-Hive中TimeStamp精度问题分析_unix_05


这里可以看到获取到了一个13位的数值,该数值精确到毫秒即为当前的时间的时间戳。


5.Hive中处理毫秒级别的时间戳


select to_utc_timestamp(1543736635303, 'GMT');


0472-Hive中TimeStamp精度问题分析_unix_06

0472-Hive中TimeStamp精度问题分析_时间戳_07


使用Hive提供的to_utc_timestamp()函数将毫秒级别的时间戳转换为相应的时间并且精确到了毫秒,与上一步获取时间戳的时间一致。


3

总结


1.Hive中获取时间戳的方式为unix_timestamp()函数,该函数只能够精确到秒级别的时间,对于时间精确到要求高的应用则该函数并不适合。


2.Hive获取当前时间毫秒级别的时间戳时需要使用cast函数将current_timestamp()转为double类型并乘以1000,则得到毫秒级别的时间戳。


3.对于Hive库中存储的毫秒精度的时间戳,为了确保时间精度不损失则需要使用to_utc_timestamp()函数,该函数支持毫秒级别的时间错,但需要指定当前时区。


提示:代码块部分可以左右滑动查看噢


为天地立心,为生民立命,为往圣继绝学,为万世开太平。

温馨提示:如果使用电脑查看图片不清晰,可以使用手机打开文章单击文中的图片放大查看高清原图。


推荐关注Hadoop实操,第一时间,分享更多Hadoop干货,欢迎转发和分享。

0472-Hive中TimeStamp精度问题分析_hive_08


nacos java后端 java后端实战

完善类并实现简单的增删改查操作操作步骤延续上一天的项目。步骤一 创建springboot启动类在com.atnanning.servicemsc包下创建启动类MscApplication,并增添注解@SpringBootApplication。@SpringBootApplication public class MscApplication { public static void ma

Python 支持单字符类型一个字符在 Python 中作为字符类型数据使用 python字符串可以单独存在吗

Python 的程序中充满了字符串(string),在平常阅读代码时也屡见不鲜。字符串同样是Python中很常见的一种数据类型,比如日志的打印、程序中函数的解释、数据库的访问、变量的基本操作等等,都用到了字符串。字符串基础字符串是由独立字符组成的一个序列,通常包含在单引号(' ') 双引号(" ") 或者三引号之中(''' ''' 或 """ """, 两者一样)name = 'jason'