2023.11.16-hive sql高阶函数lateral view,与行转列,列转行
创始人
2024-11-12 03:35:33
0

目录

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()函数有序不去重

 select     col1,     col2,     collect_list(col3) -- 先将col3收集 from row2col2 group by     col1, 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是字段名 ;

相关内容

热门资讯

复盘辅助挂!德州ai代打,微扑... 复盘辅助挂!德州ai代打,微扑克机器人代打俱乐部,2025版教程(新版有挂)-哔哩哔哩;一、微扑克机...
4分钟神器!wpk模拟器是什么... 4分钟神器!wpk模拟器是什么,hhpoker是真的还是假的(透视)透牌教程(有挂规律)1、该软件可...
玩家必看分享!aapoker透... 玩家必看分享!aapoker透明挂使用教程,wepoke是可以软件,插件教程(有挂神器)-哔哩哔哩;...
第五分钟科普!佛手在线有挂吗,... 第五分钟科普!佛手在线有挂吗,红龙poker辅助(透视)分享教程(有挂猫腻)1.佛手在线有挂吗 ai...
推荐一款!德扑之星ai计算,德... 推荐一款!德扑之星ai计算,德扑ai工具,科技教程(有挂功能)-哔哩哔哩;最新版2026是一款经典耐...
第6分钟体悟!wepokerp... 第6分钟体悟!wepokerplus透视脚本免费,aapoker辅助挂(透视)攻略教程(详细教程)1...
我来教大家!wpk职业代打,w... 我来教大家!wpk职业代打,wpk外挂第一视角,透视教程(有挂总结)-哔哩哔哩;wpk外挂第一视角软...
1分钟掌握!wepoker有什... 1分钟掌握!wepoker有什么规律,wepoker有辅助吗(透视)分享教程(有挂详情)1、该软件可...
黑科技游戏!德州之星辅助器多少... 黑科技游戏!德州之星辅助器多少钱,微扑克wpk有挂,教你攻略(有挂方法)-哔哩哔哩;德州之星辅助器多...
5分钟发现!werplan外卦... 5分钟发现!werplan外卦神器,hhpoker透视脚本下载(透视)揭秘教程(详细教程)1、许多玩...