在京東眾多業務中,促銷業務充滿了復雜性和挑戰性,因為業務的靈活性,很多數據都存儲成xml和json格式數據,這就要求下游數據分析師們需要對其做解析后方可使用 。
在眾多操作中 ,有一種是需要對數據做行列轉換操作。
數據結構:
create external table jd_row_to_column(
jd_id string ,
jd_session string
);
數據描述:
insert into jd_row_to_column values('0001','01,02,03,04');
1.行轉列(對一列數據拆分成多行)
使用函數 lateral view explode(split(column_name, ',')) col_nm
我們對上面表結構的jd_session列按照逗號進行數據拆分
拆分SQL:
selectjd_id,jd_session,session
fromjd_row_to_column lateral view explode(split(jd_session, ',')) ses as session
wherejd_id = '0001';
The result:
?
2.列轉行(根據主鍵,數據合并)
使用函數:concat_ws(',',collect_set(column))? 其中 函數collect_set 會對原始數據做去重操作,collect_list 則不會
我們將對上面的結果進行數據合并操作,看看結果是不是滿足要求
The SQL:
selectjd_id,jd_session,concat_ws(',', collect_set(session)) as jd_session_v2
from(selectjd_id,jd_session,sessionfromjd_row_to_column lateral view explode(split(jd_session, ',')) ses as sessionwherejd_id = '0001')t
group byjd_id,jd_session ;
The Result :
?