[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
相關文章
- Oracle 合併行/多行合併成一行Oracle
- MySQL GROUP_CONCAT函式 將多行資料合併成一行MySql函式
- SQL實現多行合併一行 wmsys.wm_concatSQL
- Excel 快速合併多行資料為一行Excel
- sqlldr一行記錄拆分為多行SQL
- 使用SQLLOADER將多行資料合併為一行進行載入SQL
- Mysql將近兩個月的記錄合併為一行顯示MySql
- 根據特殊識別符號,將一行轉多行記錄符號
- 利用shell中awk和xargs以及sed將多行多列文字中某一列合併成一行
- mysql將多行資料合併或按組合並MySql
- orcale 中查詢多行 後合併到一行顯示
- mysql中的多行查詢結果合併成一個MySql
- 利用Oracle分析函式row_number和sys_connect_by_path實現多行資料合併為一行Oracle函式
- 【MySQL】MySQL如何合併多行資料,行轉列,group_concat 多行合併MySql
- GridView多行表頭合併View
- SQL查詢 多列合併成一行用逗號隔開stuff()SQL
- Hive小檔案合併Hive
- Oracle之多行記錄變一行記錄,行變列,並排序(wmsys.wm_concat)Oracle排序
- 在oracle中將一行字串拆分成多行Oracle字串
- SQL——多行併成一行顯示, 以字串分隔(相當於C#中的join)SQL字串C#
- Hive列合併與元素蒐集Hive
- hive編寫udf實踐記錄Hive
- 用WPS文字表格轉換快速合併多行文字
- 將本目錄下的txt合併batBAT
- python實現將資料夾內所有txt檔案合併成一個檔案Python
- 如何將兩個APK合併成一個APKAPK
- Oracle多行轉一行Oracle
- SQLServer中多行中的一列根據條件合併為一行中的一列SQLServer
- 記錄vxe-table合併單元格
- Hive表小檔案合併方法總結Hive
- 多行資料放到一行上
- python合併相同行只保留一行Python
- mysql 將查詢到的記錄,按一行,按元祖,將欄位用逗號連線起來。MySql
- 使用SQLLOADER將一行資料拆分為多行進行載入SQL
- 把檔案每隔三行合併成一行(awk之RS、ORS與FS、OFS)
- win10如何將磁碟合併 win10將磁碟合併的方法Win10
- 如何將多行單元格資料轉變成一行?這個Excel技巧你一定不知道!Excel
- javascript實現物件直接量合併效果JavaScript物件