Hive函數(shù)大全(含例子)之集合函數(shù)囊嘉、日期函數(shù)格嘁、條件函數(shù)

# 集合函數(shù) Collection Functions

## size(Map<K.V>)

返回結(jié)果:返回Map中的元素個(gè)數(shù)

返回類(lèi)型:int

  • select size(str_to_map('k1: v1')); -- 結(jié)果為 1
  • select size(str_to_map('k1:v1,k2:v2')); -- 結(jié)果為 2

## size(Array<T>)

返回結(jié)果:返回Array中的元素個(gè)數(shù)

返回類(lèi)型:int

  • select size(array(1, 2, 3)); -- 結(jié)果為 3
  • select size(array('A', 'A')); -- 結(jié)果為 2

## map_keys(Map<K.V>)

返回結(jié)果:返回一個(gè)包含Map中所有Key的無(wú)序數(shù)組

返回類(lèi)型:array<K>

  • select map_keys(str_to_map('k1:v1')); -- 結(jié)果為 ["k1"]
  • select map_keys(str_to_map('k1:v1,k2:v2')); -- 結(jié)果為 ["k2","k1"]

## map_values(Map<K.V>)

返回結(jié)果:返回一個(gè)包含Map中所有Value的無(wú)序數(shù)組

返回類(lèi)型:array<V>

  • select map_values(str_to_map('k1:v1')); -- 結(jié)果為 ["v1"]
  • select map_values(str_to_map('k1:v1,k2:v2')); -- 結(jié)果為 ["v2","v1"]

## array_contains(Array<T>, value)

返回結(jié)果:如果Array<T>中包含value笛求,則返回True,否則返回False

返回類(lèi)型:boolean

  • select array_contains(array(1, 2), 3); -- 結(jié)果為 false
  • select array_contains(array('A', 'B', 'C'), 'A'); -- 結(jié)果為 true

## sort_array(Array<T>)

返回結(jié)果:返回一個(gè)升序排序的Array

返回類(lèi)型:array<t>

  • select sort_array(array(3, 2, 4)); -- 結(jié)果為 [2,3,4]
  • select sort_array(array('9', '11', '12')); -- 結(jié)果為 ["11","12","9"]

# 日期函數(shù) Date Functions

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

返回結(jié)果:將Unix時(shí)間戳轉(zhuǎn)換為字符串格式的時(shí)間

返回類(lèi)型:string

  • select from_unixtime(1586225596, 'yyyy-MM-dd hh:mm:ss'); -- 結(jié)果為 2020-04-07 10:13:16
  • select from_unixtime(1586225596, 'yyyyMMdd'); -- 結(jié)果為 20200407

## unix_timestamp()

返回結(jié)果:返回當(dāng)前Unix是時(shí)間戳糕簿,精確到秒

返回類(lèi)型:bigint

  • select unix_timestamp(); -- 結(jié)果為 1586171888

## unix_timestamp(string date, string pattern)

返回結(jié)果:將字符串格式的時(shí)間轉(zhuǎn)換為Unix時(shí)間戳格式

返回類(lèi)型:bigint

  • select unix_timestamp('2020-01-01 01:01:02', 'yyyy-MM-dd hh:mm:ss'); -- 結(jié)果為 1577811662

## to_date(string timestamp)

返回結(jié)果:返回時(shí)間戳的日期部分

返回類(lèi)型:2.1.0之前版本返回的是string探入,2.1.0版本及之后返回的是date

  • select to_date('2020-04-05 06:07:08'); -- 結(jié)果為 2020-04-05

## year(string date)

返回結(jié)果:返回時(shí)間的年部分

返回類(lèi)型:int

  • select year('2020-04-05 06:07:08'); -- 結(jié)果為 2020

## quarter(date/timestamp/string)

返回結(jié)果:返回季度

返回類(lèi)型:int

  • select quarter('2020-04-05 06:07:08'); -- 結(jié)果為 2

## month(string date)

返回結(jié)果:返回時(shí)間的月部分

返回類(lèi)型:int

  • select month('2020-04-05 06:07:08'); -- 結(jié)果為 4

## day(string date) dayofmonth(date)

返回結(jié)果:返回時(shí)間的日部分

返回類(lèi)型:int

  • select day('2020-04-05 06:07:08'); -- 結(jié)果為 5
  • select dayofmonth('2020-04-05 06:07:08'); -- 結(jié)果為 5

## hour(string date)

返回結(jié)果:返回時(shí)間的小時(shí)部分

返回類(lèi)型:int

  • select hour('2020-04-05 06:07:08'); -- 結(jié)果為 6

## minute(string date)

返回結(jié)果:返回時(shí)間的分鐘部分

返回類(lèi)型:int

  • select minute('2020-04-05 06:07:08'); -- 結(jié)果為 7

## second(string date)

返回結(jié)果:返回時(shí)間的秒部分

返回類(lèi)型:int

  • select second('2020-04-05 06:07:08'); -- 結(jié)果為 8
  • select second('2020-04-05'); -- 結(jié)果為 NULL

## weekofyear(string date)

返回結(jié)果:返回date是當(dāng)年的第幾個(gè)星期

返回類(lèi)型:int

  • select weekofyear('2020-01-01 06:07:08'); -- 結(jié)果為 1
  • select weekofyear('2020-01-06'); -- 結(jié)果為 2

## extract(field FROM source)

返回結(jié)果:從 source 中檢索出指定日期部分(如檢索出day, dayofweek, hour, minute, month, quarter, second, week and year)

返回類(lèi)型:int

  • select extract(day from '2020-04-05 06:07:08'); -- 結(jié)果為 5
  • select extract(dayofweek from '2020-04-05 06:07:08'); -- 結(jié)果為 1(星期天為1)
  • select extract(dayofweek from '2020-04-06 06:07:08'); -- 結(jié)果為 2(星期一為2)
  • select extract(hour from '2020-04-05 06:07:08'); -- 結(jié)果為 6
  • select extract(minute from '2020-04-05 06:07:08'); -- 結(jié)果為 7
  • select extract(month from '2020-04-05 06:07:08'); -- 結(jié)果為 4
  • select extract(quarter from '2020-04-05 06:07:08'); -- 結(jié)果為 2
  • select extract(second from '2020-04-05 06:07:08'); -- 結(jié)果為 8
  • select extract(week from '2020-04-05 06:07:08'); -- 結(jié)果為 14(同weekofyear)
  • select extract(year from '2020-04-05 06:07:08'); -- 結(jié)果為 2020

## datediff(string enddate, string startdate)

返回結(jié)果:返回 enddate 和 startdate 相差的天數(shù)

返回類(lèi)型:int

  • select datediff('2020-04-06 01:01:01', '2020-04-05 06:07:08'); -- 結(jié)果為 1
  • select datediff('2020-04-04', '2020-04-05'); -- 結(jié)果為 -1

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

返回結(jié)果:返回 startdate 增加 days 天之后的日期

返回類(lèi)型:2.1.0之前版本返回的是string,2.1.0版本及之后返回的是date

  • select date_add('2020-04-05 06:07:08', 1); -- 結(jié)果為 2020-04-06
  • select date_add('2020-04-05 06:07:08', -1); -- 結(jié)果為 2020-04-04

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

返回結(jié)果:返回 startdate 減去 days 天之后的日期

返回類(lèi)型:2.1.0之前版本返回的是string懂诗,2.1.0版本及之后返回的是date

  • select date_sub('2020-04-05 06:07:08', 1); -- 結(jié)果為 2020-04-04
  • select date_sub('2020-04-05 06:07:08', -1); -- 結(jié)果為 2020-04-06

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

返回結(jié)果:轉(zhuǎn)換為指定時(shí)區(qū)的時(shí)間戳

返回類(lèi)型:timestamp

  • select from_utc_timestamp(2592000.0, 'GMT'); -- 結(jié)果為 1970-01-31 08:00:00
  • select from_utc_timestamp(2592000000, 'GMT'); -- 結(jié)果為 1970-01-31 08:00:00
  • select from_utc_timestamp(timestamp '1970-01-31 16:00:00', 'PST') ; -- 結(jié)果為 1970-01-31 08:00:00

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

返回結(jié)果:轉(zhuǎn)換為世界標(biāo)準(zhǔn)時(shí)間UTC的時(shí)間戳

返回類(lèi)型:timestamp

  • select to_utc_timestamp(2592000.0, 'GMT'); -- 結(jié)果為 1970-01-31 08:00:00
  • select to_utc_timestamp(2592000000, 'GMT'); -- 結(jié)果為 1970-01-31 08:00:00
  • select to_utc_timestamp(timestamp '1970-01-31 16:00:00', 'PST') ; -- 結(jié)果為 1970-02-01 00:00:00

## current_date

返回結(jié)果:返回當(dāng)前日期(SQL查詢計(jì)算開(kāi)始時(shí)的日期蜂嗽,而不是結(jié)束時(shí)的日期)

返回類(lèi)型:date

  • select current_date; -- 結(jié)果為 2020-04-06

## current_timestamp

返回結(jié)果:返回當(dāng)前時(shí)間戳(SQL查詢計(jì)算開(kāi)始時(shí)的時(shí)間,而不是結(jié)束時(shí)的時(shí)間)

返回類(lèi)型:timestamp

  • select current_timestamp; -- 結(jié)果為 2020-04-06 20:09:05.777

## add_months(string start_date, int num_months, output_date_format)

返回結(jié)果:返回 start_date 增加 num_months 月之后的日期(可指定輸出的日期格式)

返回類(lèi)型:string

  • select add_months('2020-01-01 01:01:01', 1); -- 結(jié)果為 2020-02-01
  • select add_months('2020-01-01 01:01:01', -1, 'yyyyMMddhhmmss'); -- 結(jié)果為 20191201010101

## last_day(string date)

返回結(jié)果:返回 date 所屬月份的最后一天

返回類(lèi)型:string

  • select last_day('2020-01-01'); -- 結(jié)果為 2020-01-31
  • select last_day('2020-02-01'); -- 結(jié)果為 2020-02-29

## next_day(string start_date, string day_of_week)

返回結(jié)果:返回晚于 start_date 的下一個(gè)星期幾(day_of_week可以用兩個(gè)字母殃恒、三個(gè)字母或者英文全拼來(lái)表示)(start_date的時(shí)分秒部分將被忽略)

返回類(lèi)型:string

  • select next_day('2020-04-06', 'MON'); -- 結(jié)果為 2020-04-13
  • select next_day('2020-04-06', 'TU'); -- 結(jié)果為 2020-04-07
  • select next_day('2020-04-06 12:12:12', 'FRIDAY'); -- 結(jié)果為 2020-04-10

## trunc(string date, string format)

返回結(jié)果:截?cái)嗳掌诘街付ǖ娜掌诰戎簿桑瑑H支持月(MONTH/MON/MM)或者年(YEAR/YYYY/YY)

返回類(lèi)型:string

  • select trunc('2020-04-06', 'YY'); -- 結(jié)果為 2020-01-01
  • select trunc('2020-04-06', 'MM'); -- 結(jié)果為 2020-04-01
  • select trunc('2020-04-06 12:12:12', 'HH'); -- 結(jié)果為 NULL

## months_between(date1, date2)

返回結(jié)果:返回 date1 和 date2 的月份差

返回類(lèi)型:double

  • select months_between('2020-01-31', '2020-02-29'); -- 結(jié)果為 -1.0
  • select months_between('2020-01-31', '2020-02-29');

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

返回結(jié)果:格式化日期

返回類(lèi)型:string

  • select date_format('2020-04-06 12:12:12', 'yyyyMMddhhmmss'); -- 結(jié)果為 20200406121212
  • select date_format('2020-04-06 12:12:12', 'yyyy'); -- 結(jié)果為 2020
  • select date_format('2020-04-06', 'yyyy-MM-dd hh:mm:ss'); -- 結(jié)果為 2020-04-06 12:00:00

# 條件函數(shù) Conditional Functions

## if(boolean testCondition, T valueTrue, T valueFalseOrNull)

返回結(jié)果:返回 valueTrue 如果 testCondition 成立,否則返回 valueFalseOrNull

返回類(lèi)型:T

  • select if(2 > 1, 3, 4); -- 結(jié)果為 3
  • select if(2 > NULL, 3, 4); -- 結(jié)果為 4

## isnull( a )

返回結(jié)果:返回 True 如果 a is NULL离唐,否則返回 False

返回類(lèi)型:boolean

  • select isnull(NULL); -- 結(jié)果為 true
  • select isnull(1234); -- 結(jié)果為 false

## isnotnull ( a )

返回結(jié)果:返回 False 如果 a is NULL病附,否則返回 True

返回類(lèi)型:boolean

  • select isnotnull (NULL); -- 結(jié)果為 false
  • select isnotnull (1234); -- 結(jié)果為 true

## nvl(T value, T default_value)

返回結(jié)果:如果 value 不為 NULL 則返回 value,否則返回 default_value

返回類(lèi)型:T

  • select nvl('11', '22'); -- 結(jié)果為 11
  • select nvl(NULL, '22'); -- 結(jié)果為 22

## COALESCE(T v1, T v2, ...)

返回結(jié)果:返回第一個(gè)不為NULL的值亥鬓,如果全為NULL則返回NULL

返回類(lèi)型:T

  • select COALESCE('00', '11'); -- 結(jié)果為 00
  • select COALESCE(NULL, '22'); -- 結(jié)果為 22
  • select COALESCE(NULL, NULL, '33'); -- 結(jié)果為 33
  • select COALESCE(NULL, NULL, NULL); -- 結(jié)果為 NULL

## CASE a WHEN b THEN c [WHEN d THEN e] [ELSE f] END

返回結(jié)果:如果 a = b 則返回 c完沪,如果 a = d 則返回 e,否則返回 f

返回類(lèi)型:T

  • select case 1 when 1 then ; -- 結(jié)果為 213123123123
  • select date_format('123123123'); -- 結(jié)果為 213123123123
  • select date_format('123123123'); -- 結(jié)果為 213123123123

## CASE WHEN a THEN b [WHEN c THEN d] [ELSE e] END

返回結(jié)果:如果 a 成立則返回 b贮竟,[如果 c 成立則返回 d]丽焊,否則返回 e

返回類(lèi)型:T

  • select case when 1 = 1 then 'a' when 2 = 2 then 'b' else 'c' end; -- 結(jié)果為 a
  • select case when 1 = 2 then 'a' when 2 = 2 then 'b' else 'c' end; -- 結(jié)果為 b
  • select case when 1 = 2 then 'a' when 2 = 1 then 'b' else 'c' end; -- 結(jié)果為 c

## nullif( a, b )

返回結(jié)果:如果 a = b较剃,返回 NULL,否則返回 a

返回類(lèi)型:T

  • select nullif(1, 1); -- 結(jié)果為 NULL
  • select nullif(1, 2); -- 結(jié)果為 1

## assert_true(boolean condition)

返回結(jié)果:如果 condition 成立則返回 NULL技健,否則拋出異常

返回類(lèi)型:void

  • select assert_true(2 > 1); -- 結(jié)果為 NULL
  • select assert_true(2 < 1); -- 結(jié)果為 Error during job, obtaining debugging information...

# 相關(guān)文章

Hive函數(shù)大全(含例子)之?dāng)?shù)學(xué)函數(shù)(Mathematical Functions)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末写穴,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子雌贱,更是在濱河造成了極大的恐慌啊送,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,376評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件欣孤,死亡現(xiàn)場(chǎng)離奇詭異馋没,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)降传,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門(mén)篷朵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人婆排,你說(shuō)我怎么就攤上這事声旺。” “怎么了段只?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,966評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵腮猖,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我赞枕,道長(zhǎng)澈缺,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,432評(píng)論 1 283
  • 正文 為了忘掉前任炕婶,我火速辦了婚禮姐赡,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘柠掂。我一直安慰自己雏吭,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,519評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布陪踩。 她就那樣靜靜地躺著,像睡著了一般悉抵。 火紅的嫁衣襯著肌膚如雪肩狂。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,792評(píng)論 1 290
  • 那天姥饰,我揣著相機(jī)與錄音傻谁,去河邊找鬼。 笑死列粪,一個(gè)胖子當(dāng)著我的面吹牛审磁,可吹牛的內(nèi)容都是我干的谈飒。 我是一名探鬼主播,決...
    沈念sama閱讀 38,933評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼态蒂,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼杭措!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起钾恢,我...
    開(kāi)封第一講書(shū)人閱讀 37,701評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤手素,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后瘩蚪,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體泉懦,經(jīng)...
    沈念sama閱讀 44,143評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,488評(píng)論 2 327
  • 正文 我和宋清朗相戀三年疹瘦,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了崩哩。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,626評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡言沐,死狀恐怖邓嘹,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情呢灶,我是刑警寧澤吴超,帶...
    沈念sama閱讀 34,292評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站鸯乃,受9級(jí)特大地震影響鲸阻,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜缨睡,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,896評(píng)論 3 313
  • 文/蒙蒙 一鸟悴、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧奖年,春花似錦细诸、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,742評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至水评,卻和暖如春猩系,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背中燥。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工寇甸, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓拿霉,卻偏偏與公主長(zhǎng)得像吟秩,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子绽淘,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,494評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容