zoukankan      html  css  js  c++  java
  • Hive 行列转换

    在京东众多业务中,促销业务充满了复杂性和挑战性,因为业务的灵活性,很多数据都存储成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:

    select
    	jd_id,
    	jd_session,
    	session
    from
    	jd_row_to_column lateral view explode(split(jd_session, ',')) ses as session
    where
    	jd_id = '0001';

    The result:

    2.列转行(根据主键,数据合并)

    使用函数:concat_ws(',',collect_set(column))  其中 函数collect_set 会对原始数据做去重操作,collect_list 则不会

    我们将对上面的结果进行数据合并操作,看看结果是不是满足要求

    The SQL:

    select
    	jd_id,
    	jd_session,
    	concat_ws(',', collect_set(session)) as jd_session_v2
    from
    	(
    		select
    			jd_id,
    			jd_session,
    			session
    		from
    			jd_row_to_column lateral view explode(split(jd_session, ',')) ses as session
    		where
    			jd_id = '0001'
    	)
    	t
    group by
    	jd_id,
    	jd_session ;

    The Result :

  • 相关阅读:
    hdu 6435 Problem J. CSGO 最长曼哈顿距离+二进制枚举
    UVA11419 SAM I AM 二分图最小点覆盖
    数论入门基础整理
    [算法导论]#1 摊还分析
    [转载]markown语法
    [AC自动机]玄武密码
    [学习笔记]AC自动机
    分火腿
    [学习笔记]二分与分治
    [学习笔记]二项式反演
  • 原文地址:https://www.cnblogs.com/TendToBigData/p/10501170.html
Copyright © 2011-2022 走看看