hive 日期函数 官网摘录、整理

本文摘录并整理了Hive官方文档中关于日期处理的函数,详细介绍了如何进行日期转换、日期加减等操作,帮助理解并使用Hive进行时间序列数据分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

日期功能

Hive支持以下内置日期功能:

返回类型

姓名(签名)

描述

string

from_unixtime(bigint unixtime[, string format])

将unix纪元(1970-01-01 00:00:00 UTC)的秒数转换为一个字符串,该字符串表示当前系统时区中该时刻的时间戳,格式为“ 1970-01-01 00:00: 00”。

bigint

unix_timestamp()

以秒为单位获取当前的Unix时间戳。此函数不是确定性的,其值在查询执行范围内也不是固定的,因此会阻止对查询的适当优化-自2.0版以来已弃用此函数,而推荐使用CURRENT_TIMESTAMP常量。

bigint

unix_timestamp(string date)

yyyy-MM-dd HH:mm:ss使用默认时区和默认语言环境将时间字符串格式转换为Unix时间戳(以秒为单位),如果失败,则返回0:unix_timestamp('2009-03-20 11:30:01')= 1237573801

bigint

unix_timestamp(string date, string pattern)

将具有给定模式的时间字符串(请参阅[ http://docs.oracle.com/javase/tutorial/i18n/format/simpleDateFormat.html])转换为Unix时间戳(以秒为单位),如果失败,则返回0:unix_timestamp('2009 -03-20','yyyy-MM-dd')= 1237532400。

pre 2.1.0: string

2.1.0 on: date

to_date(string timestamp)

返回时间戳字符串(Hive 2.1.0之前)的日期部分:to_date(“ 1970-01-01 00:00:00”)=“ 1970-01-01”。从Hive 2.1.0开始,返回日期对象。

在Hive 2.1.0(HIVE-13248)之前,返回类型为String,因为创建方法时不存在Date类型。

int

year(string date)

返回日期或时间戳字符串的年份部分:year(“ 1970-01-01 00:00:00”)= 1970,year(“ 1970-01-01”)= 1970。

int

quarter(date/timestamp/string)返回日期,时间戳或范围在1到4之间的字符串的一年的四分之一(从Hive 1.3.0开始)。示例:quarter('2015-04-08')= 2。 

int

month(string date)

返回日期或时间戳字符串的月份部分:month(“ 1970-11-01 00:00:00”)= 11,month(“ 1970-11-01”)= 11。

int

day(string date) dayofmonth(date)

返回日期或时间戳字符串的日期部分:day(“ 1970-11-01 00:00:00”)= 1,day(“ 1970-11-01”)= 1。

int

hour(string date)

返回时间戳的小时:hour('2009-07-30 12:58:59')= 12,hour('12:58:59')= 12。

int

minute(string date)

返回时间戳的分钟。

int

second(string date)

返回时间戳的秒数。

int

weekofyear(string date)

返回时间戳字符串的星期数:weekofyear(“ 1970-11-01 00:00:00”)= 44,weekofyear(“ 1970-11-01”)= 44。

int

extract(field FROM source)

从源中检索字段,例如天或小时(从Hive 2.2.0开始)。源必须是日期,时间戳,时间间隔或可以转换为日期或时间戳的字符串。支持的字段包括:日,星期几,小时,分钟,月,季度,秒,周和年。

例子:

  1. select extract(month from "2016-10-20")   results in 10.

  2. select extract(hour from "2016-10-20 05:06:07") results in 5.

  3. select extract(dayofweek from "2016-10-20 05:06:07") results in 5.

  4. select extract(month from interval '1-3' year to month) results in 3.

  5. select extract(minute from interval '3 12:20:30' day to second) results in 20.

int

datediff(string enddate, string startdate)

返回从开始日期到结束日期的天数:datediff('2009-03-01','2009-02-27')= 2。

pre 2.1.0: string

2.1.0 on: date

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

添加开始日期的天数:date_add('2008-12-31',1)='2009-01-01'。

在Hive 2.1.0(HIVE-13248)之前,返回类型为String,因为创建方法时不存在Date类型。

pre 2.1.0: string

2.1.0 on: date

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

减去开始日期的天数:date_sub('2008-12-31',1)='2008-12-30'。

在Hive 2.1.0(HIVE-13248)之前,返回类型为String,因为创建方法时不存在Date类型。

timestamp

from_utc_timestamp({any primitive type} ts, string timezone)

将UTC中的timestamp *转换为给定的时区(从Hive 0.8.0开始)。

* 时间戳是一种原始类型,包括时间戳/日期,tinyint / smallint / int / bigint,float / double和十进制。 

小数部分被视为秒。整数值以毫秒为单位。例如,from_utc_timestamp (2592000.0,'PST'),from_utc_timestamp (2592000000,'PST')和from_utc_timestamp (timestamp'1970-01-30 16:00:00','PST')都返回时间戳1970-01-30 08:00:00。

timestamp

to_utc_timestamp({any primitive type} ts, string timezone)

将给定时区中的时间戳*转换为UTC(从Hive 0.8.0开始)。

* 时间戳是一种原始类型,包括时间戳/日期,tinyint / smallint / int / bigint,float / double和十进制。 

小数部分被视为秒。整数值以毫秒为单位。例如,to_utc_timestamp(2592000.0,'PST'),to_utc_timestamp(2592000000,'PST')和to_utc_timestamp(timestamp'1970-01-30 16:00:00','PST')都返回时间戳1970-01-31 00:00:00。

datecurrent_date

返回查询评估开始时的当前日期(从Hive 1.2.0开始)。同一查询中对current_date的所有调用均返回相同的值。

timestampcurrent_timestamp

返回查询评估开始时的当前时间戳(从Hive 1.2.0开始)。同一查询中对current_timestamp的所有调用均返回相同的值。

stringadd_months(string start_date, int num_months, output_date_format)

返回起始日期之后num_months的日期(从Hive 1.1.0开始)。start_date是字符串,日期或时间戳。num_months是一个整数。如果start_date是该月的最后一天,或者如果结果月份的天数少于start_date的天部分,则结果是结果月份的最后一天。否则,结果与start_date具有相同的日组成部分。默认输出格式为“ yyyy-MM-dd”。

在Hive 4.0.0之前,日期的时间部分将被忽略。

从Hive 4.0.0开始,add_months支持可选参数output_date_format,该参数接受一个String,该String表示输出的有效日期格式。这样可以在输出中保留时间格式。

例如 :

add_months('2009-08-31',1)返回'2009-09-30'。
add_months('2017-12-31 14:15:16',2,'YYYY-MM-dd HH:mm:ss')返回'2018-02-28 14:15:16'。

stringlast_day(string date)返回日期所属月份的最后一天(从Hive 1.1.0开始)。date是格式为“ yyyy-MM-dd HH:mm:ss”或“ yyyy-MM-dd”的字符串。日期的时间部分将被忽略。
stringnext_day(string start_date, string day_of_week)

返回第一个日期,该日期晚于start_date,并命名为day_of_week (从Hive 1.2.0开始)。start_date是字符串/日期/时间戳。day_of_week是2个字母,3个字母或一周中某天的全名(例如Mo,tue,FRIDAY)。start_date的时间部分将被忽略。

(我注:返回开始日期之后的第一个指定日期,例如第一个星期一、星期二等星期描述的日子)

例如:next_day('2015-01-14','TU')= 2015-01-20。

stringtrunc(string date, string format)

返回截断为格式指定单位的日期(从Hive 1.2.0开始)。支持的格式:MONTH / MON / MM,YEAR / YYYY / YY。

示例:trunc('2015-03-17','MM')= 2015-03-01。

doublemonths_between(date1, date2)返回日期date1和date2之间的月份数(从Hive 1.2.0开始)。如果date1晚于date2,则结果为正。如果date1早于date2,则结果为负。如果date1和date2是月份的同一天或月份的最后几天,则结果始终是整数。否则,UDF将基于31天的月份来计算结果的分数部分,并考虑时间分量date1和date2的差异。date1和date2类型可以是日期,时间戳或字符串,格式为“ yyyy-MM-dd”或“ yyyy-MM-dd HH:mm:ss”。结果四舍五入到小数点后8位。例如:months_between('1997-02-28 10:30:00','1996-10-30')= 3.94959677 
stringdate_format(date/timestamp/string ts, string fmt)

将日期/时间戳记/字符串转换为日期格式fmt指定的格式的字符串值(从Hive 1.2.0开始)。支持的格式是Java SimpleDateFormat格式– https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html 。第二个参数fmt应该是常量。示例:date_format('2015-04-08','y')='2015'。 

date_format可用于实现其他UDF,例如:

  • dayname(date)是date_format(date,'EEEE')
  • dayofyear(date)是date_format(date,'D')

  
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值