Hive内置函数之时间函数

零、生产常用组合方式

(0.1)离线数仓获取昨天的日期作为分区,格式yyyyMMdd

regexp_replace(date_sub(from_unixtime(unix_timestamp(),'yyyy-MM-dd'),1) ,'-','')

或者

date_format(date_sub(from_unixtime(unix_timestamp(),'yyyy-MM-dd'),1),'yyyyMMdd')

一、源码部分

Hive的函数类为:org.apache.hadoop.hive.ql.exec.FunctionRegistry

二、常用时间函数

对于函数,除了知道怎么用,还需要知道返回值是什么类型,这里给出官方文档,文档中给出了函数的返回值类型

官方文档见:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-DateFunctions

(2.1)from_unixtime(bigint unixtime[, string format])

时间戳转字符串

示例:

select from_unixtime(1591627588); -- 2020-06-08 22:46:28

select from_unixtime(1591627588,'yyyyMMddHHmmss'); -- 20200608224628


(2.2)unix_timestamp()、unix_timestamp(string date)、unix_timestamp(string date, string pattern)

时间字符串转时间戳

示例:

select unix_timestamp('2020-06-08 22:50:00'); -- 1591627800

select unix_timestamp('20200608225000','yyyyMMddHHmmss'); -- 1591627800


(2.3)to_date(string timestamp)

时间字符串抽取日期

示例:

SELECT to_date('2009-07-30 04:17:52'); -- 2009-07-30


(2.4)year(string date)、month(string date)、day(string date)、hour(string date)、minute(string date)、second(string date)

时间字符串抽取日期

这些函数是差不多的,都是从一个时间字符串中抽取出某个特定的时间字段。具有相同功能的还有extract(field FROM source)函数

示例:

SELECT day('2009-07-29 20:30:40'); -- 29

SELECT minute('2009-07-29 20:30:40'); -- 30


(2.5)date_add(date/timestamp/string startdate, tinyint/smallint/int days)、date_sub(date/timestamp/string startdate, tinyint/smallint/int days)

时间加减

这两个功能是类似的

示例:

SELECT date_add('2009-07-30 20:50:59', 1); -- 2009-07-31


(2.6)datediff(string enddate, string startdate)

计算日期间隔

截图中结果是错误的,应该为-1。

示例:

SELECT datediff('2009-06-30', '2009-07-02'); -- -2

SELECT datediff('2009-07-30', '2009-07-28'); -- 2


(2.7)current_date、current_timestamp

这两个函数使用desc function extended 查看会报错

示例:

获取当前日期或时间


(2.8)date_format(date/timestamp/string ts, string fmt)

时间格式化为指定格式

示例:

SELECT date_format('2015-04-08', 'yyyyMMdd'); -- 20150408

你可能感兴趣的:(Hive内置函数之时间函数)