hive in 字符串_hive常用函数 concat concat_ws row_number
在應(yīng)用hive在數(shù)據(jù)倉(cāng)庫(kù)中進(jìn)行數(shù)據(jù)提取中經(jīng)常會(huì)用戶很多函數(shù),為了記錄自己常用的hive函數(shù),特寫這個(gè)系列的文章,記錄下自己的使用心得,其中包括使用場(chǎng)景、用法等。
1、concat
concat是字符拼接函數(shù)的一種,在實(shí)際的數(shù)據(jù)提取中也是常用的,其主要用于將輸出的字段與其他字符拼接在一起,比如數(shù)據(jù)倉(cāng)庫(kù)中的某字段金額存儲(chǔ)的只是數(shù)字,你想要在后面加上對(duì)應(yīng)的單位,這個(gè)時(shí)候concat函數(shù)就派上用途了。
用法:
concat(string s1,string s2,string s3)注意:輸入必須為字符串類型,如果是其他的數(shù)據(jù)類型需要應(yīng)用cast(value as string)函數(shù)將相應(yīng)的字段轉(zhuǎn)換為字符類型。
例子:
select concat(money,'元')from table1;2、concat_ws
既然有concat函數(shù)為什么又有concat_ws呢?其實(shí)concat_ws是針對(duì)concat中一種特殊情形引入的,就是如果想要輸出的字段用相同的字符進(jìn)行分隔,應(yīng)用concat函數(shù)就顯得很笨重,你需要這樣寫concat(s1,sep_str,s2,sep_str,s3.......),這樣的sql顯得臃腫重復(fù),這個(gè)時(shí)候你就需要用concat_ws函數(shù)了。concat_ws使用場(chǎng)景:輸出字段用相同字符分隔的情形。
用法:
concat_ws(sep_str,s1,s2,s3,.......)注意:字符拼接函數(shù)的輸入一般數(shù)字符類型,如果不是就需要轉(zhuǎn)換為字符類型。
例子:
select concat_ws('|',name,age,sex,grade,telno) from table2;3、row_number
大家一般都聽說過分組的概念,但是你聽說過分組排序的概念嗎?
具體實(shí)例常用:
每個(gè)用戶可能在一天中產(chǎn)生多條記錄,想要看每個(gè)用戶每天的第一條、第二條和最后一條記錄。
這個(gè)實(shí)例如果你想用單純的分組很難實(shí)現(xiàn),這里就需要用到分組排序的思想,首先按照用戶id字段進(jìn)行分組,再按照時(shí)間字段進(jìn)行排序,并得到一個(gè)新的字段,這個(gè)字段就是分組排序的結(jié)果,你想要的結(jié)果就是包含在這個(gè)結(jié)果中。
用法:
row_number() over(partition by 字段1 order by s3 字段2 asc)
例子:
SELECT *,row_number() over(partition BY idORDER BY in_times DESC) AS num FROM table3;table3表的數(shù)據(jù)是這樣的:
應(yīng)用上面的分組排序的結(jié)果是這樣的:
新增加了一列num,這列是分組排序的結(jié)果。
如果你想要第一條記錄,就用升序排列,取第一條記錄;
如果你想要最后一天記錄,就用降序排序取第一條;
如果你想取指定的記錄,前幾條記錄用升序,后幾條記錄用降序。
取每個(gè)用戶每天的第一條記錄
SELECT id,in_times FROM(SELECT *,row_number() over(partition BY idORDER BY in_times ASC) AS numFROM table3)a WHERE a.num=1;取每個(gè)用戶的最后一條記錄
SELECT id,in_times FROM(SELECT *,row_number() over(partition BY idORDER BY in_times DESC) AS numFROM table3)a WHERE a.num=1;取每個(gè)用戶的前五條記錄中的第五條
SELECT id,in_times FROM(SELECT *,row_number() over(partition BY idORDER BY in_times ASC) AS numFROM table3)a WHERE a.num=5;如果喜歡我,歡迎關(guān)注微信公眾號(hào):洞察數(shù)據(jù)挖掘價(jià)值。
總結(jié)
以上是生活随笔為你收集整理的hive in 字符串_hive常用函数 concat concat_ws row_number的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HTML期末作业-美食点餐网页
- 下一篇: 线性索引查找-理论