午夜做网站,怎样做旅游公司的网站,在360做网站和百度做网站的区别,室内设计师在哪找目录 0.lateral view简介
1.行转列 需求1:
需求2:
2.列转行
解题思路: 0.lateral view简介 hive函数 lateral view 主要功能是将原本汇总在一条#xff08;行#xff09;的数据拆分成多条#xff08;行#xff09;成虚拟表#xff0c;再与原表进行笛卡尔积#xff0c…目录 0.lateral view简介
1.行转列 需求1:
需求2:
2.列转行
解题思路: 0.lateral view简介 hive函数 lateral view 主要功能是将原本汇总在一条行的数据拆分成多条行成虚拟表再与原表进行笛卡尔积从而得到明细表。配合UDTF函数使用一般情况下经常与explode函数搭配explode的操作对象列值是 ARRAY 或者 MAP ,可以通过 split 函数将 String 类型的列值转成 ARRAY 来处理。
炸裂函数配合侧视图使用如下 格式:select 原表别名.字段名,侧视图名.字段名 from 原表 原表别名 lateral view explode(要炸开的字段) 侧视图名 as 字段名 ; 1.行转列 -- 数据准备
--建表
create table row2col2(col1 string,col2 string,col3 int)row format delimited fields terminated by \t;
--加载数据到表中 load data inpath /input/r2c2.txt into table row2col2;
-- 验证数据
select * from row2col2; 需求1: 需求1: 把原表数据变成以下格式 a b [1,2,3] c d [4,5,6] 思路:使用collect_list()函数有序不去重 selectcol1,col2,collect_list(col3) -- 先将col3收集
from row2col2
group bycol1, col2; 需求2: 需求2: 把原表数据变成以下格式 a b 1-2-3 c d 4-5-6
思路:1,2,3已经知道怎么收集了,可以用concat来将这几个数字与符号-拼接起来 concat_ws()函数在连接字符串的时候只要有一个字符串不是NULL就不会返回NULL。concat_ws()函数需要指定分隔符。 但concat_ws只支持拼接字符串,所以需要先用cast强转成字符串
cast(内容 as 类型)concat_ws的格式: select concat_ws(要拼接的分隔符,字符串1,字符串2);
select col1,col2,concat_ws(-,(collect_list(cast(col3 as string))))
from row2col2
group by col1, col2
; 2.列转行
1.准备数据
--创建表
create table col2row2(col1 string,col2 string,col3 string
)row format delimited fields terminated by \t;2.加载数据
--加载数据
load data inpath /source/c2r2.txt into table col2row2;
3.验证数据
select * from col2row2; 解题思路:
-- 单列数据先切割再炸开
-- explode只能炸一个参数,只能接收数组或映射作为参数
select explode(col3)from col2row2; --报错
--无法直接炸col3字段,因为是字符串类型,并且题中的1,2,3并不是一个参数select split(col3,,) from col2row2;
--用split切割后,会将切割完的数据放进数组里 [1,2,3][4,5,6]select explode(split(col3,,)) from col2row2;
--得到了数组后,可以用explode来炸了使用lateral view生成最终的表
格式:select 原表别名.字段名,侧视图名.字段名 from 原表 原表别名 lateral view explode(要炸开的字段) 侧视图名 as 字段名 ;
select col2row2.col1 , col2row2.col2 ,c2r.col3_explode
from col2row2
lateral view
explode(split(col3,,)) c2r as col3_explode --用lv函数造出虚拟表c2r,col3_explode是字段名
;