Hive 使用内置函数实现 列转行

  • 时间:
  • 来源:互联网
  • 文章标签:

背景:最近公司给了项任务就是按目前现有的维度计算指标
      由于指标较多,计算结果join 太过于浪费资源,所现将所有指标计算的结果定位[_id,var_name,var_value] 这种 schema ,在通过内置函数转成[Key,Value]的格式在通过函数转置进行列转行。

在这分享个demo

1、用到的内置函数

str_to_map()concat_ws()collecct_list()concat()

2、创建测试表数据

create table test_table if not exists (
	uid 	  string,
 	var_name  string,
 	var_value string,
)stored as orc;

## 插入数据
#######################################
insert into table test_table
select 'a','gbxx','20'
union
select 'b','lvxw','10'
union
select 'c','jyyc','5';

3、将数据转成[k,v]

drop table if exists test_map;
create table test_map stored as orc as 
select uid,str_to_map(concat_ws(',',collect_list(concat(var_name,":",var_value)))) as k_v
from test_table
group by uid;

4、通过key获取value

drop table if exists test_result;
create table test_result stored as orc as
select uid,
	   k_v['gbxx'] as gbxx,	
	   k_v['lvxw'] as lvxw,
	   k_v['jyyc'] as jyyc
from test_map;

这样就实现了

uidvar_namevar_value
agbxx20
blvxw10
cjyyc5

uidgbxxlvxwjyyc
a20nullnull
bnull10null
cnullnull5

的转置

本文链接http://www.taodudu.cc/news/show-1782021.html