日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

hive in 字符串_hive常用函数 concat concat_ws row_number

發(fā)布時(shí)間:2025/3/15 编程问答 61 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hive in 字符串_hive常用函数 concat concat_ws row_number 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在應(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

大家一般都聽說(shuō)過分組的概念,但是你聽說(shuō)過分組排序的概念嗎?

具體實(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。