熟悉hive的人都知道,在原生版本中,目前并沒有返回星期幾的函數(shù)。為了解決這個(gè)問題,除了利用java自己編寫udf外,也可以利用現(xiàn)有hive函數(shù)實(shí)現(xiàn),筆者整理了以下內(nèi)容供大家參考: hive返回星期幾的方法:pmod(datediff(#date#, 2012年任意一個(gè)星期日的日期),
熟悉hive的人都知道,在原生版本中,目前并沒有返回星期幾的函數(shù)。為了解決這個(gè)問題,除了利用java自己編寫udf外,也可以利用現(xiàn)有hive函數(shù)實(shí)現(xiàn),筆者整理了以下內(nèi)容供大家參考:
hive返回星期幾的方法:pmod(datediff('#date#', '2012年任意一個(gè)星期日的日期'), 7) 。2012-01-01剛好是星期日,大家可以記憶為:方法:pmod(datediff('#date#', '2012-01-01'), 7) 返回值:int 說明:1、返回值為“0-6”(“0-6”分別表示“星期日-星期六”);2、需要注意pmod和 datediff 函數(shù)的使用方法.
解析:
1、datediff 是兩個(gè)日期相減的函數(shù),hive日期函數(shù)可以見附錄:
日期相減函數(shù):datediff
語法:datediff(string enddate, string startdate)
返回值: int
說明: 返回兩個(gè)時(shí)間參數(shù)的相差天數(shù)。
2、 pmod 是正取余函數(shù):
正取余函數(shù) : pmod特殊說明:
這個(gè)方法也不是唯一的方法,只是利用了datediff 和pmod函數(shù)的特點(diǎn),組合使用而出。內(nèi)部牛人分享的方法也可以達(dá)到相同的目的:
pmod(datediff(#date#, '1920-01-01') - 3, 7)
附錄:hive日期函數(shù)
返回類型 | 函數(shù) | 說明 |
string | from_unixtime(bigint unixtime[, string format]) | UNIX_TIMESTAMP參數(shù)表示返回一個(gè)值’YYYY- MM – DD HH:MM:SS’或YYYYMMDDHHMMSS.uuuuuu格式,這取決于是否是在一個(gè)字符串或數(shù)字語境中使用的功能。該值表示在當(dāng)前的時(shí)區(qū)。 |
bigint | unix_timestamp() | 如果不帶參數(shù)的調(diào)用,返回一個(gè)Unix時(shí)間戳(從’1970- 01 – 0100:00:00′到現(xiàn)在的UTC秒數(shù))為無符號(hào)整數(shù)。 |
bigint | unix_timestamp(string date) | 指定日期參數(shù)調(diào)用UNIX_TIMESTAMP(),它返回參數(shù)值’1970- 01 – 0100:00:00′到指定日期的秒數(shù)。 |
bigint | unix_timestamp(string date, string pattern) | 指定時(shí)間輸入格式,返回到1970年秒數(shù):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) | 返回時(shí)間中的年月日: to_date(“1970-01-01 00:00:00″) = “1970-01-01″ |
string | to_dates(string date) | 給定一個(gè)日期date,返回一個(gè)天數(shù)(0年以來的天數(shù)) |
int | year(string date) | 返回指定時(shí)間的年份,范圍在1000到9999,或?yàn)?rdquo;零”日期的0。 |
int | month(string date) | 返回指定時(shí)間的月份,范圍為1至12月,或0一個(gè)月的一部分,如’0000-00-00′或’2008-00-00′的日期。 |
int | day(string date) dayofmonth(date) | 返回指定時(shí)間的日期 |
int | hour(string date) | 返回指定時(shí)間的小時(shí),范圍為0到23。 |
int | minute(string date) | 返回指定時(shí)間的分鐘,范圍為0到59。 |
int | second(string date) | 返回指定時(shí)間的秒,范圍為0到59。 |
int | weekofyear(string date) | 返回指定日期所在一年中的星期號(hào),范圍為0到53。 |
int | datediff(string enddate, string startdate) | 兩個(gè)時(shí)間參數(shù)的日期之差。 |
int | date_add(string startdate, int days) | 給定時(shí)間,在此基礎(chǔ)上加上指定【本文來自鴻網(wǎng)互聯(lián) (http://www.68idc.cn)】的時(shí)間段。 |
int | date_sub(string startdate, int days) | 給定時(shí)間,在此基礎(chǔ)上減去指定的時(shí)間段。 |
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com