视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
hive返回星期几的方法
2020-11-09 14:08:45 责编:小采
文档

熟悉hive的人都知道,在原生版本中,目前并没有返回星期几的函数。为了解决这个问题,除了利用java自己编写udf外,也可以利用现有hive函数实现,笔者整理了以下内容供大家参考: hive返回星期几的方法:pmod(datediff(#date#, 2012年任意一个星期日的日期),

熟悉hive的人都知道,在原生版本中,目前并没有返回星期几的函数。为了解决这个问题,除了利用java自己编写udf外,也可以利用现有hive函数实现,笔者整理了以下内容供大家参考:

hive返回星期几的方法:pmod(datediff('#date#', '2012年任意一个星期日的日期'), 7) 。2012-01-01刚好是星期日,大家可以记忆为:
方法:pmod(datediff('#date#', '2012-01-01'), 7) 
返回值:int
说明:1、返回值为“0-6”(“0-6”分别表示“星期日-星期六”);2、需要注意pmod和 datediff 函数的使用方法.

解析:

1、datediff 是两个日期相减的函数,hive日期函数可以见附录:

日期相减函数:datediff
语法:datediff(string enddate, string startdate)
返回值: int
说明: 返回两个时间参数的相差天数。

2、 pmod 是正取余函数:

正取余函数 : pmod
语法: pmod(int a, int b),pmod(double a, double b)
返回值: int double
说明: 返回正的a除以b的余数

特殊说明:

这个方法也不是唯一的方法,只是利用了datediff 和pmod函数的特点,组合使用而出。内部牛人分享的方法也可以达到相同的目的:

pmod(datediff(#date#, '1920-01-01') - 3, 7)

附录:hive日期函数

返回类型 函数 说明
string from_unixtime(bigint unixtime[, string format]) UNIX_TIMESTAMP参数表示返回一个值’YYYY- MM – DD HH:MM:SS’或YYYYMMDDHHMMSS.uuuuuu格式,这取决于是否是在一个字符串或数字语境中使用的功能。该值表示在当前的时区。
bigint unix_timestamp() 如果不带参数的调用,返回一个Unix时间戳(从’1970- 01 – 0100:00:00′到现在的UTC秒数)为无符号整数。
bigint unix_timestamp(string date) 指定日期参数调用UNIX_TIMESTAMP(),它返回参数值’1970- 01 – 0100:00:00′到指定日期的秒数。
bigint unix_timestamp(string date, string pattern) 指定时间输入格式,返回到1970年秒数:unix_timestamp(’2009-03-20′, ‘yyyy-MM-dd’) = 1237532400 参考:http://java.sun.com/j2se/1.4.2/docs/api/java/text/SimpleDateFormat.html
string to_date(string timestamp) 返回时间中的年月日: to_date(“1970-01-01 00:00:00″) = “1970-01-01″
string to_dates(string date) 给定一个日期date,返回一个天数(0年以来的天数)
int year(string date) 返回指定时间的年份,范围在1000到9999,或为”零”日期的0。
int month(string date) 返回指定时间的月份,范围为1至12月,或0一个月的一部分,如’0000-00-00′或’2008-00-00′的日期。
int day(string date) dayofmonth(date) 返回指定时间的日期
int hour(string date) 返回指定时间的小时,范围为0到23。
int minute(string date) 返回指定时间的分钟,范围为0到59。
int second(string date) 返回指定时间的秒,范围为0到59。
int weekofyear(string date) 返回指定日期所在一年中的星期号,范围为0到53。
int datediff(string enddate, string startdate) 两个时间参数的日期之差。
int date_add(string startdate, int days) 给定时间,在此基础上加上指定【本文来自鸿网互联 (http://www.68idc.cn)】的时间段。
int date_sub(string startdate, int days) 给定时间,在此基础上减去指定的时间段。

下载本文
显示全文
专题