Hive 行列转换

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/haohaixingyun/article/details/82858293

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

猜你喜欢

转载自blog.csdn.net/haohaixingyun/article/details/82858293