[Hive]用concat_w實現將多行記錄合併成一行
https://blog.csdn.net/yeweiouyang/article/details/41286469
https://blog.csdn.net/waiwai3/article/details/79071544
需求:對使用者的訂單進行分析,將不同訂單型別分別多少單展示出來,每個使用者一行
原資料:
user order_type order_number
user1 delivered 10
user2 returned 1
user1 returned 3
user2 delivered 20
目標:
user order
user1 delivered(10),returned(3)
user2 delivered(20),returned(1)
1.使用concat()函式將order_type和order_number連線起來
concat(order_type,'(',order_number,')')
user order
user1 delivered(10)
user2 returned(1)
user1 returned(3)
user2 delivered(20)
2.使用concat_ws()和collect_set()進行合併行
將上面列表中一個user可能會佔用多行轉換為每個user佔一行的目標表格式,實際是“列轉行”
select user,concat_ws(',',collect_set(concat(order_type,'(',order_number,')'))) order from table group by user
order是別名
collect_set的作用:
(1)去重,對group by後面的user進行去重
(2)對group by以後屬於同一user的形成一個集合,結合concat_ws對集合中元素使用,進行分隔形成字串
建表如下:
# 建立商品與促銷活動的對映表
hive -e "set mapred.job.queue.name=pms;
set hive.exec.reducers.max=32;
set mapred.reduce.tasks=32;
drop table if exists product_promotion;
create table product_promotion(product_id bigint, promotion_id String);
insert into table product_promotion
select p2.product_id, p2.promotion_id
from pms.promotionv2 p1 inner join pms.promotionv2_main_product_sku p2
on (p1.id=p2.promotion_id)
where from_unixtime(unix_timestamp(),'yyyy-MM-dd HH:mm:ss') between p1.start_date and p1.end_date;"
資料表的記錄如下:
5112 960024
5112 960025
5112 960026
5112 960027
5112 960028
5113 960043
5113 960044
5113 960045
5113 960046
對promotion_id進行合併:
select product_id, concat_ws('_',collect_set(promotion_id)) as promotion_ids from product_promotion group by product_id
執行結果:
hive > select product_id, concat_ws('_',collect_set(promotion_id)) as promotion_ids from product_promotion group by product_id;
OK
5112 960024_960025_960026_960027_960028
5113 960043_960044_960045_960046
Time taken: 3.116 seconds
相關文章
- Excel 快速合併多行資料為一行Excel
- 利用shell中awk和xargs以及sed將多行多列文字中某一列合併成一行
- orcale 中查詢多行 後合併到一行顯示
- 【MySQL】MySQL如何合併多行資料,行轉列,group_concat 多行合併MySql
- Oracle之多行記錄變一行記錄,行變列,並排序(wmsys.wm_concat)Oracle排序
- SQL查詢 多列合併成一行用逗號隔開stuff()SQL
- 在oracle中將一行字串拆分成多行Oracle字串
- hive編寫udf實踐記錄Hive
- Hive列合併與元素蒐集Hive
- 將本目錄下的txt合併batBAT
- SQLServer中多行中的一列根據條件合併為一行中的一列SQLServer
- 記錄vxe-table合併單元格
- Hive Tutorial 閱讀記錄Hive
- python合併相同行只保留一行Python
- mysql 將查詢到的記錄,按一行,按元祖,將欄位用逗號連線起來。MySql
- Hive表小檔案合併方法總結Hive
- 圖片合併成PDF,兩個PDF的合併
- 如何將多行單元格資料轉變成一行?這個Excel技巧你一定不知道!Excel
- [Hive]Hive實現抽樣查詢Hive
- win10如何將磁碟合併 win10將磁碟合併的方法Win10
- 使用 flatMap() 將巢狀的列表合併成一個新的列表巢狀
- 統計將重疊區間合併成組的方案數.18098728
- 通過Guava實現兩個包含不同物件的List合併成一個ListGuava物件
- css高階應用三種方法實現多行省略CSS
- Hive調優實用Hive
- hive原始碼編譯(失敗記錄)Hive原始碼編譯
- DBeaver如何刪除一行或多行資料
- 一行命令,將 JSON 檔案轉成 Dart 類JSONDart
- Android Studio 一行命令實現打包併發布到fir.imAndroid
- 多個commit合併成一個MIT
- 記錄---nextTick用過嗎?講一講實現思路吧
- 使用ffmpeg合併影片檔案的一些問題記錄
- js實現table合併相同列單元格JS
- Linux vi如何刪除一行或者多行內容Linux
- 使用 LVM 將多個硬碟合併,解決 /home 目錄容量不足問題LVM硬碟
- 怎樣用一行 Python 程式碼實現並行Python並行
- 純 CSS 實現多行文字截斷CSS
- 運用Spring Aop,一個註解實現日誌記錄Spring