Hive--sql中的explode()函数和posexplode()函数
实现多列转多行
- 先创建一个txt文件(最好是用notepad++,注意将编码设置为utf-8)如下:
- 将该文件放到hive下的一个目录中(可以自己指定目录),我是将它放在一个data目录中
- 在hive的一个数据库中创建一个表来进行操作,指定表名test.a,加入两个字段id和tim,并在一行中用空格分隔,每行之间用\n进行分隔。
create table if not exists test.a(id STRING,tim STRING
)
row format delimited fields terminated by '-'
lines terminated by '\n';
- 将开始创建的文件中的数据加载进新建的表中
load data local inpath 'opt/data/shijian.txt' into table test.a;
- 现在可以看看我们新创建的这个表中的数据
hive> load data local inpath 'opt/data/shijian.txt' into table test.a;
Loading data to table test.a
Table test.a stats: [numFiles=1, numRows=0, totalSize=56, rawDataSize=0]
OK
Time taken: 0.654 seconds
hive> select * from test.a;
OK
a.id a.tim
a,b,c,d 2:00,3:00,4:00,5:00
f,b,c,d 1:10,2:20,3:30,4:40
Time taken: 0.125 seconds, Fetched: 2 row(s)
- 现在先进行一列转多行的操作,这里就用到了explode()函数,将第二列tim中的数据用逗号切分并成为第三列,操作如下
select id,tim,single_tim
from test.a lateral view explode(split(tim,',')) t as single_tim
id tim single_tim
a,b,c,d 2:00,3:00,4:00,5:00 2:00
a,b,c,d 2:00,3:00,4:00,5:00 3:00
a,b,c,d 2:00,3:00,4:00,5:00 4:00
a,b,c,d 2:00,3:00,4:00,5:00 5:00
f,b,c,d 1:10,2:20,3:30,4:40 1:10
f,b,c,d 1:10,2:20,3:30,4:40 2:20
f,b,c,d 1:10,2:20,3:30,4:40 3:30
f,b,c,d 1:10,2:20,3:30,4:40 4:40
Time taken: 51.289 seconds, Fetched: 8 row(s)
可以看出上面的代码实现了对第二列的多行转换,现在如果想实现对两列听同事进行多行转换,那么用explode()函数就不能实现了,但可以用posexplode()函数,因为该函数可以将index和数据都取出来,使用两次posexplode并令两次取到的index相等就行了。
- 使用一次posexplode()函数效果如下:
select id,tim,single_id_index,single_id from test.a
lateral view posexplode(split(id,',')) t as single_id_index, single_id;d;
id tim single_id_index single_id
a,b,c,d 2:00,3:00,4:00,5:00 0 a
a,b,c,d 2:00,3:00,4:00,5:00 1 b
a,b,c,d 2:00,3:00,4:00,5:00 2 c
a,b,c,d 2:00,3:00,4:00,5:00 3 d
f,b,c,d 1:10,2:20,3:30,4:40 0 f
f,b,c,d 1:10,2:20,3:30,4:40 1 b
f,b,c,d 1:10,2:20,3:30,4:40 2 c
f,b,c,d 1:10,2:20,3:30,4:40 3 d
Time taken: 43.6 seconds, Fetched: 8 row(s)
- 使用两次posexplode()函数实现多列转多行
select id,tim,single_id,single_tim from test.a
lateral view posexplode(split(id,',')) t as single_id_index, single_id
lateral view posexplode(split(tim,',')) t as single_yim_index, single_tim
where single_id_index = single_yim_index;
id tim single_id single_tim
a,b,c,d 2:00,3:00,4:00,5:00 a 2:00
a,b,c,d 2:00,3:00,4:00,5:00 b 3:00
a,b,c,d 2:00,3:00,4:00,5:00 c 4:00
a,b,c,d 2:00,3:00,4:00,5:00 d 5:00
f,b,c,d 1:10,2:20,3:30,4:40 f 1:10
f,b,c,d 1:10,2:20,3:30,4:40 b 2:20
f,b,c,d 1:10,2:20,3:30,4:40 c 3:30
f,b,c,d 1:10,2:20,3:30,4:40 d 4:40
这样就可以实现了。
Hive--sql中的explode()函数和posexplode()函数相关推荐
- Hive SQL 中ARRAY或MAP类型数据处理:lateral view explode()/posexplode()——行转列函数
前言:在对表数据进行批量处理过程中,常常碰上某个字段是一个array或者map形式的字段,一列数据的该字段信息同时存在多个值,当我们需要取出该数组中的每一个值实现一一对应关系的时候,可以考虑使用lat ...
- Hive Sql中六种面试题型总结
Hive Sql中六种面试题型总结 一.常用函数 二.N日留存 1.思路分析 三.连续登陆 1.数据准备 2.思路分析一 3.思路分析二 四.Top N 1.数据准备 2.思路分析 五.行列互转 1. ...
- Sql中TO_DAYS,DATE_SUB等时间函数介绍
Sql中TO_DAYS,DATE_SUB等时间函数介绍 TO_DAYS 获取当前时间 DATE_SUB(date,INTERVAL expr type)函数 DATEDIFF() 函数 ADDDATE ...
- Hive之explode()函数和posexplode()函数和lateral view函数
目录 1.explode()函数 2.posexplode()函数 3.lateral view函数 1.explode()函数 英文释义: explode() takes in an array ( ...
- 【数据库】HIVE SQL中的字符串连接函数(CONCAT)
众所周知,在MySQL.SQLSERVER中,都有字符串连接函数,那么,HQL也不例外. 在学习.工作中,不可避免的会遇到需要将两个字段合并展示的需要. 最基础的一个方法是:CONCAT('abc', ...
- Hive SQL中的concat、concat_ws、concat_group列转行,行转列
目录 1.concat函数,concat_ws函数,concat_group函数 CONCAT() 函数 2.CONCAT_WS(SEPARATOR ,collect_set(column)) 等价于 ...
- SQL中常用的四个排序函数
我们在写SQL代码时,只要有排序,首先想到的肯定是ORDER BY,以至于好多小伙伴觉得排序多简单啊. 今天就给大家介绍四个你不怎么常用排序函数,他们就是SQL Server排序中经常用到的ROW_N ...
- SQL中日期与时间类型及函数
一.日期与时间类型 数据类型 含义 对应范围 DATETIME 日期和时间 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 DATE 日期 1000-01-01~ ...
- sql中的常用的字符串处理函数
一.常用函数 1.ASCII() 返回字符表达式最左端字符的ASCII 码值.在ASCII()函数中,纯数字的字符串可不用''括起来,但含其它字符的字符串必须用''括起来使用,否则会出错.2.CHAR ...
- Hive sql中的 各种join(内连接、左外连接、右外连接、满外连接)
join语句 1 等值 join Hive支持通常的SQL JOIN语句,但是只支持等值连接,==不支持非等值连接==. 案例实操 select * from stu left join score ...
最新文章
- python之链表、单链表、双向链表、单向循环链表
- linux磁盘满时,如何定位并删除文件
- python慢在哪里_求大神分析一下我的python脚本慢在哪里?
- Qt工作笔记-profile中INSTALLS的使用
- SqlHelper操纵数据库工具类
- 怎么把照片做成消消乐_开心消消乐特效怎么制作 制造的几种方式分享
- 揭秘新的供应链攻击:一研究员靠它成功入侵微软、苹果等 35 家科技公司
- JAVA实现UNIX文件管理系统
- 大数据技术与应用解读及案例分析(PPT)
- 测试版降级后软件还在么,2分钟告诉你如何将iOS测试版降级到正式版本
- 【Latex】一、TeX Live和TeXstudio安装及使用教程
- 初学者宝典:C语言入门基础知识大全
- 2020iOS开发工程师面试题汇总(内含面试技巧)-看完BATJ面试官对你竖起大拇指!
- App为了漂亮脸蛋也要美颜,Theme 与 Style 的使用,附一键变装 demo
- 硕士论文查重率是多少?
- Dfinity(ICP)基础开发教程-5
- 使用VM安装安卓虚拟机
- CPLD个人学习笔记
- 阿里云学生机linux服务器配置技巧
- 学计算机的什么是镜像,系统镜像文件是什么 什么叫系统镜像文件