Hive函數(shù)筆記--常用函數(shù)解析

前言

本文不定期更新贯卦,記錄工作中接觸使用過的Hive函數(shù)

常用函數(shù)

  • get_json_object(string json_string,string path)
    該函數(shù)的第一個參數(shù)是json對象變量,第二個參數(shù)使用$表示json變量標(biāo)識,然后用.或[]讀取對象或數(shù)組
select get_json_object(pricecount,'$.buyoutRoomRequest') new_id,pricecount
  from table_sample a
 where d='2018-08-31' limit 100
  • json_tuple(string json_string,string k1,string k2...)
    該函數(shù)的第一個參數(shù)是json對象變量,之后的參數(shù)是不定長參數(shù),是一組鍵k1,k2...,返回值是元組嘶是,該方法比get_json_object高效,因為可以在一次調(diào)用中輸入多個鍵值
select m.*,n.pricecount
  from (select 
              from table_sample a 
            where d='2018-08-31' limit 100)n
  lateral view json_tuple(pricecount,'paymentType','complete') m as f1,f2
  • split(str,regex)
    Splits str arround occourances that match regex.該函數(shù)第一個參數(shù)是字符串蛛碌,第二個參數(shù)是設(shè)定的分隔符聂喇,通過第二個參數(shù)把第一個參數(shù)做拆分,返回一個數(shù)組
select split('123,3455,2568',',')
select split('sfas:sdfs:sf',':')
  • explode()
    explode takes an array (or a map) as an input and outputs the elements of the array (map) as separate rows蔚携;該函數(shù)接收一個參數(shù)希太,參數(shù)類型需是array或者map類型,該函數(shù)的輸出是把輸入?yún)?shù)的每個元素拆成獨立的一行記錄酝蜒。
select explode(split('123,3455,2568',','))
  • lateral view()
    lateral view udtf(expression) tableAlias as columnAlias (',' columnAlias);Lateral View 一般與用戶自定義表生成函數(shù)(如explode())結(jié)合使用誊辉。UDTF為每個輸入行生成零個或多個輸出行,Lateral view首先將UDTF應(yīng)用于基表的每一行亡脑,然后將結(jié)果輸出行連接到輸入行堕澄,已形成具有提供的表別名的虛擬表。
select j.nf,p.* from (
select m.*,n.pricecount
  from (select * from ods_htl_htlinfogoverndb.buyout_appraise a where d = '${zdt.format("yyyy-MM-dd")}' limit 100)n
 lateral view json_tuple(pricecount,'paymentType','complete') m as f1,f2 )p
 lateral view explode(split(regexp_replace(p.f1,'\\[|\\]',''),',')) j as nf
  • from_unixtime(int/bigint timestamp,string format)

該函數(shù)第一個參數(shù)接收int/bigint類型的10位時間戳變量霉咨,帶毫秒的13位時間戳需要做截取蛙紫,第二個參數(shù)是返回的日期的格式,可以不設(shè)置躯护,默認(rèn)是格式:yyyy-MM-dd HH:mm:ss

select from_unixtime(1000000000);
select from_unixtime(1000000000,'yyyy-MM-dd HH');
  • unix_timestamp(string date,string format)
    該函數(shù)有兩個參數(shù),但兩個參數(shù)都是可選參數(shù)丽涩,具體區(qū)別如下:
    unix_timestamp():不帶參數(shù)時返回當(dāng)前時間戳棺滞,current_timestamp()有同樣功能
    unix_timestamp(string date):只帶第一個參數(shù)時,返回date對應(yīng)的時間戳矢渊,date的格式必須為yyyy-MM-dd HH:mm:ss
    unix_timestamp(string date,string format):返回date對應(yīng)的時間戳继准,date格式由format指定
select unix_timestamp();
select unix_timestamp('2018-09-05 10:24:36');
select unix_timestamp('2018-09-05 10','yyyy-MM-dd HH');
  • str_to_map(String text,String delimiter1,String delimiter2)
    使用兩個分隔符將文本拆分成鍵值對。Delimiter1將文本分成k-v對矮男,Delimiter2分割每個k-v對移必。對于delimiter1的默認(rèn)值是',',delimiter2的默認(rèn)值是'='.
select str_to_map('abc:11&bcd:22', '&', ':')
  • collect_set()
    該函數(shù)只接受基本的數(shù)據(jù)類型毡鉴,主要作用是將某字段的值進(jìn)行去重匯總崔泵,返回值是array類型字段
with t as (
select 1 id,123 value
  union all
select 1 id,234 value
  union all
select 2 id,124 value
)
select t.id,collect_set(t.value)
  from t
 group by t.id
  • collect_list()
    該函數(shù)功能等同于collect_set秒赤,唯一的區(qū)別在于collect_set會去除重復(fù)元素,collect_list不去除重復(fù)元素憎瘸,示例sql如下
with t as (
select 1 id,123 value
  union all
select 1 id,234 value
  union all
select 2 id,124 value
  union all
select 2 id,124 value
)
select t.id,collect_set(t.value),collect_list(t.value)
  from t
 group by t.id
  • concat_ws(seperator,String s1,String s2...)
    該函數(shù)通過分割符seperator將字符串拼接起來入篮,通常配合group by和collect_set使用

  • array_contains(Array<T>,value)
    該函數(shù)的用來判斷Arrary<T>中是否包含元素value,返回值是boolean

select array_contains(array(1,2,3,4,5),3)
true
  • percentile(expr,pc)
    該函數(shù)用來計算參數(shù)expr的百分位數(shù)幌甘,expr:字段類型必須是INT潮售,否則報錯;pc:百分位數(shù)锅风,已數(shù)值形式傳入

  • percentile_approx(expr,pc,[nb])
    該函數(shù)也是用來計算參數(shù)expr的百分位數(shù)酥诽,但數(shù)據(jù)類型要求沒有percentile嚴(yán)格,該函數(shù)數(shù)值類似類型都可以皱埠;pc:百分位數(shù)肮帐,可以以數(shù)組形式傳入,因此可以一次性查看多個指定百分位數(shù)漱逸;[nb]:控制內(nèi)存消耗的精度泪姨,選填

  • regexp_replace
    該函數(shù)用來進(jìn)行字符串替換,下面實例是用來替換某些特殊字符
    \t:tab \r:回車 \n:換行

select regexp_replace('string','\n|\t|\r|','')
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末饰抒,一起剝皮案震驚了整個濱河市肮砾,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌袋坑,老刑警劉巖仗处,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異枣宫,居然都是意外死亡婆誓,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進(jìn)店門也颤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來洋幻,“玉大人,你說我怎么就攤上這事翅娶∥牧簦” “怎么了?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵竭沫,是天一觀的道長燥翅。 經(jīng)常有香客問我,道長蜕提,這世上最難降的妖魔是什么森书? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上凛膏,老公的妹妹穿的比我還像新娘杨名。我一直安慰自己,他們只是感情好译柏,可當(dāng)我...
    茶點故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布镣煮。 她就那樣靜靜地躺著,像睡著了一般鄙麦。 火紅的嫁衣襯著肌膚如雪典唇。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天胯府,我揣著相機與錄音介衔,去河邊找鬼。 笑死骂因,一個胖子當(dāng)著我的面吹牛炎咖,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播寒波,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼乘盼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了俄烁?” 一聲冷哼從身側(cè)響起绸栅,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎页屠,沒想到半個月后粹胯,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡辰企,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年风纠,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片牢贸。...
    茶點故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡竹观,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出潜索,到底是詐尸還是另有隱情臭增,我是刑警寧澤,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布帮辟,位于F島的核電站速址,受9級特大地震影響玩焰,放射性物質(zhì)發(fā)生泄漏由驹。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蔓榄。 院中可真熱鬧并炮,春花似錦、人聲如沸甥郑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽澜搅。三九已至伍俘,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間勉躺,已是汗流浹背癌瘾。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留饵溅,地道東北人妨退。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像蜕企,于是被迫代替她去往敵國和親咬荷。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,601評論 2 353

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理轻掩,服務(wù)發(fā)現(xiàn)幸乒,斷路器,智...
    卡卡羅2017閱讀 134,651評論 18 139
  • 第2章 基本語法 2.1 概述 基本句法和變量 語句 JavaScript程序的執(zhí)行單位為行(line)放典,也就是一...
    悟名先生閱讀 4,145評論 0 13
  • 隨手抄
    cxif閱讀 339評論 5 4
  • 我喜歡你很久逝变,很深 你剛喜歡她不久,而且她一點也不喜歡你 那為什么不愿意喜歡我呢奋构?
    佯闞閱讀 295評論 2 6