相关文章推荐
安静的消炎药  ·  通过HTTP ...·  3 月前    · 
豪情万千的台灯  ·  Meta开源的ChatGPT平替到底好不好用 ...·  2 月前    · 
玩足球的白开水  ·  Meta开源的ChatGPT平替到底好不好用 ...·  2 月前    · 
拉风的保温杯  ·  php如何获取上一个月的今天的上一天的日期- ...·  2 月前    · 
暴走的小熊猫  ·  测试踩坑——JAVA13位时间戳处理,别小瞧 ...·  4 周前    · 
腼腆的土豆  ·  UnmanagedType 枚举 ...·  1 年前    · 
欢快的罐头  ·  java判断是否为数字-腾讯云开发者社区-腾讯云·  2 年前    · 
含蓄的火柴  ·  请教下鸿蒙主js ui ...·  2 年前    · 
慈祥的紫菜汤  ·  Request for the ...·  2 年前    · 
旅途中的柿子  ·  dezoomify-rs:适用于Google ...·  2 年前    · 
Code  ›  Hive中TimeStamp精度问题分析_hive timestamp精度
hive函数 select hive 时间戳
https://blog.csdn.net/lz6363/article/details/90740061
有胆有识的泡面
2 年前
  • Hive中TimeStamp的获取及转换
    • Hive中使用current_timestamp()函数获取当前时间,精确到毫秒
    • Hive中获取当前时间戳,默认使用unix_timestamp()函数,精确到秒
    • Hive中将时间戳转换为日期类型,默认使用from_unixtime ()
    • Hive中获取毫秒级别的时间戳
    • Hive中处理毫秒级别的时间戳

    Hive中使用TimeStamp时,时间戳默认是精确到秒的,那在Hive中如何处理需要精确到毫秒的时间戳?如何将13位的时间戳转变为精确到毫秒的各种格式?

    Hive中TimeStamp的获取及转换

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

    select current_timestamp();
    +--------------------------+--+
    |           _c0            |
    +--------------------------+--+
    | 2019-06-02 15:31:33.355  |
    +--------------------------+--+
    1 row selected (0.316 seconds)
    

    Hive中获取当前时间戳,默认使用unix_timestamp()函数,精确到秒

    select unix_timestamp();
    +-------------+--+
    |     _c0     |
    +-------------+--+
    | 1559460765  |
    +-------------+--+
    1 row selected (0.194 seconds)
    

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

    desc function extended from_unixtime;
    from_unixtime(unix_time, format) - returns unix_time in the specified format
    Example:                                         
      > SELECT from_unixtime(0, 'yyyy-MM-dd HH:mm:ss') FROM src LIMIT 1;
      '1970-01-01 00:00:00'       
    

    第一个参数只能是int类型的时间戳,第二个参数为时间格式的字符串,第二个参数也可以为空,默认时间格式为:yyyy-MM-dd HH:mm:ss

    select from_unixtime(unix_timestamp());
    +----------------------+--+
    |         _c0          |
    +----------------------+--+
    | 2019-06-02 15:34:10  |
    +----------------------+--+
    1 row selected (0.227 seconds)
    select from_unixtime(unix_timestamp(), 'yyyyMMddHHmmss');
    +-----------------+--+
    |       _c0       |
    +-----------------+--+
    | 20190602153447  |
    +-----------------+--+
    1 row selected (0.191 seconds)
    select from_unixtime(unix_timestamp(), 'yyyy/MM/dd HH:mm:ss');
    +----------------------+--+
    |         _c0          |
    +----------------------+--+
    | 2019/06/02 15:35:13  |
    +----------------------+--+
    1 row selected (0.207 seconds)
    

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

    select current_timestamp() as current_time, cast(current_timestamp() as double) * 1000 as timestamp;
    2019-06-02 15:44:23.324	1559461463324
    

    在这里插入图片描述
    在这里插入图片描述
    由以上两个结果图片可看出,beeline显示的是科学计算的数字,hue上显示正常

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

    desc function extended to_utc_timestamp;
    to_utc_timestamp(timestamp, string timezone) - Assumes given timestamp is in given timezone and converts to UTC (as of Hive 0.8.0)
    select to_utc_timestamp(1559461463324, 'GMT');
    +--------------------------+--+
    |           _c0            |
    +--------------------------+--+
    | 2019-06-02 15:44:23.324  |
    +--------------------------+--+
    1 row selected (2.745 seconds)
    

    将毫秒级别的时间戳转换为指定格式的毫秒时间,SSS代表毫秒

    select date_format(to_utc_timestamp(1559461463324, 'GMT'), 'yyyyMMddHHmmssSSS');
    +--------------------+--+
    |        _c0         |
    +--------------------+--+
    | 20190602154423324  |
    +--------------------+--+
    1 row selected (0.323 seconds)
    select date_format(to_utc_timestamp(1559461463324, 'GMT'), 'yyyy/MM/dd HH:mm:ss.SSS');
    +--------------------------+--+
    |           _c0            |
    +--------------------------+--+
    | 2019/06/02 15:44:23.324  |
    +--------------------------+--+
    1 row selected (0.183 seconds)
    
    1. Hive中获取时间戳的方式为unix_timestamp()函数,该函数只能够精确到秒级别的时间,对于时间精确到要求高的应用则该函数并不适合。

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

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

    [WITH CommonTable[removed], CommonTableExpression)*] Only available starting with Hive 0.13.0) SELECT [ALL | DISTINCT] select_expr, select_expr, ... FROM table_reference [WHERE where_condition] [GROUP BY col_list] [ORDER BY col_list] [CLUSTER BY col_list | [DISTRIBUTE BY col_list] 时间戳是数据库常用的存放日期的形式之一,表示从 UTC 时间’1970-01-01 00:00:00’开始到现在的秒数,与常规时间格式如 ‘2020-09-01 00:00:00’可以相互转换。时间戳分为10位的时间戳和13位的时间戳,10位就是存放的秒数,13位就是存放的毫秒数。对于13位的时间戳,转换前需要除以1000。 本文来自知乎,由火龙果软件Anna编辑、推荐。在开始了解hive之前,需要了解一些知识或者概念,可以更好的理解hive实现原理GoogleMapReduce是Google基于函数式编程map(映射),reduce(化简)提出的一种分布式编程模型,在模型中隐藏了分布式集群的实现细节,交由框架底层进行实现,能够使程序员在不了解分布式并行编程的情况下,将自己书写的程序在分布式系统上运行Map:将输入的一对键值对转换为一组中间键值对(k1,v1)->list(k2,v2)Reduce:将所有键相同的中间键值对合并,得到关于那个键的结果(k2,list(v2))->(k2,v3)以一个很简单的WordC 目录1.unix_timestamp1.1语义1.2:实例2.from_unixtime1.1语义1.2:实例3.实战3.1需求:3.2分析:3.3具体实现: 1.unix_timestamp 1.1语义 返回时间的时间戳 1.2:实例 hive> SELECT UNIX_TIMESTAMP() ; (执行使得时间:2009-08-06 10:10:40) ->1249524739 hive> SELECT UNIX_TIMESTAMP('2009-08-06','yyyy-MM-dd Query execution error: : Value cannot be cast to time 错误排查问题描述没有问题的查询SQL有问题的插入SQL报错信息错误排查问题描述修改后SQL总结 问题描述 可以正常查询的SQL,将结果集插入到目标表中出现时间格式的转换错误,经过分析是由于日常字段数据转换不规范导致 没有问题的查询SQL SELECT SELECT DATE_SUB( '2020-07-23', INTERVAL 1 DAY ) AS 'date_time', concat(t,".",substring(1611231717343,11,13)) from( select from_unixtime(cast(substring(1611231717343,0,10) as bigint),'yyyy-MM-dd HH:dd:ss') as t )tmp; 执行结果如下: 如果想转换成"yyyy-MM-dd HH:dd:ss",需要将13位时间戳转换成11位时间戳,注意转换过程中函数入参数据类型 unix_timestamp()是hive系统时间,格式是timestamp,精确到秒。    unix_timestamp(ymdhms)是把时间转换成timestamp格式,是2018-05-23 07:15:50格式。    unix_timestamp() - unix_timestamp(ymdhms)是两个时间转换为timestamp之后相减,timestamp单位是秒,相减之后是两个时间之间相差的秒数。    CAST((unix_timestamp() - unix_timestamp(ym 温馨提示:如果使用电脑查看图片不清晰,可以使用手机打开文章单击文中的图片放大查看高清原图。 Fayson的github: https://github.com/fayson/cdhproject 提示:代码块部分可以左右滑动查看噢 文档编写目的 Hive中使用TimeStamp时,时间戳默认是精确到秒的,那在Hive中如何处理需要精确到毫秒的时间戳呢?本篇文章Fayson主要说明下Hive... Hive日期函数使用yearmonthdayhourminutesecondadd_monthsdate_adddate_subdate_formatdatediffdayofmonthdayofweekweekofyearcurrent_datecurrent_timestampfrom_unixtimeunix_timestampto_unix_timestampto_utc_timestampfrom_utc_timestampnext_daylast_daymonths_betweento_date
 
推荐文章
安静的消炎药  ·  通过HTTP API进行数据查询聚合与降采样-时间序列数据库 TSDB-阿里云
3 月前
豪情万千的台灯  ·  Meta开源的ChatGPT平替到底好不好用?测试结果、加料改装方法已出炉_澎湃号·湃客_澎湃新闻-The Paper
2 月前
玩足球的白开水  ·  Meta开源的ChatGPT平替到底好不好用?测试结果、加料改装方法已出炉,2天5.2k星|模型|训练|示例|样本|微调_手机新浪网
2 月前
拉风的保温杯  ·  php如何获取上一个月的今天的上一天的日期-百度经验
2 月前
暴走的小熊猫  ·  测试踩坑——JAVA13位时间戳处理,别小瞧了“毫秒“老弟
4 周前
腼腆的土豆  ·  UnmanagedType 枚举 (System.Runtime.InteropServices) | Microsoft Learn
1 年前
欢快的罐头  ·  java判断是否为数字-腾讯云开发者社区-腾讯云
2 年前
含蓄的火柴  ·  请教下鸿蒙主js ui 开发,如何设置全局变量或者全局状态管理呢,类似小程序中的app.js 中的globaldata,vuxe-开源基础软件社区-51CTO.COM
2 年前
慈祥的紫菜汤  ·  Request for the Permission of Type System.Web.AspNetHostingPermission - CodeProject
2 年前
旅途中的柿子  ·  dezoomify-rs:适用于GoogleArts&Culture,Zoomify,IIIF等的Zoomable图片下载器_有iiif的网址,怎么下载资源-CSDN文库
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号