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)
-
Hive中获取时间戳的方式为unix_timestamp()函数,该函数只能够精确到秒级别的时间,对于时间精确到要求高的应用则该函数并不适合。
-
Hive获取当前时间毫秒级别的时间戳时需要使用cast函数将current_timestamp()转为double类型并乘以1000,则得到毫秒级别的时间戳。
-
对于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