hive 相同key 多行多列合併 處理

2021-10-12 16:01:59 字數 970 閱讀 2936

在join 的過程中我們很容易出現資料膨脹現象,即一行變成多**況。

面對這種情況,一般會有兩種處理方式

第一種:用row_number 等分窗函式,根據不同策略取不同行的資料

第二種:將相同key對應多行的情況合併成一行,(如果一行有多個字段,還有可能合併為乙個欄位中)

如源表結構:

pcgid               string                                  

mobilegid string

value double

測試資料如下:

p1 m1 0.6

p1 m2 0.9

p2 m1 1.0

需要的結果是:

對源表進行group by之後對另外兩個字段變成key-value存成乙個map

p1  2

p2 1

查了一下,hive中沒有現成的函式可以直接得到結果。不過可以轉乙個思路,把mobilegid和value先連線成字串,然後再把整個set的結果連線成乙個字串,最後再用str_to_map,完美解決。

具體實現**通過:str_to_map、concat 和collect_set 三個函式共同完成

具體實現為:

select pcgid as gid,str_to_map(concat_ws(",",collect_set(concat_ws(':', mobilegid, cast(value as string)) ))) as gids,count(1) as num

from gemini_product_id_connect_result_pair

group by pcgid;

hive多行轉多列

一 需求 需要將多行的資料,按照某個維度轉換為一行。轉換前 轉換後 db price area name 為 東北 的total price actual db qty area name 為 東北 的qty。二 解決方案 1 sql select brand,max case when area ...

GridView合併多行多列

1 2 和並列3 4 要合併的gridview 5 開始列的索引 6 結束列的索引 7 是否合併表頭,預設不合併 8 public static void mergecolumn gridview gv,int startcol,int endcol,bool containheader false...

Oracle合併多行為多列

oracle 如何聚合多行函式 在bea論壇上看一位 專家 寫的大作,一條sql語句是 select r.xm,substr r.csrq,1,4 年 substr r.csrq,5,2 月 substr r.csrq,7,2 日 csrq,select dictvalue from zh dict...