实现多列转多行

  1. 先创建一个txt文件(最好是用notepad++,注意将编码设置为utf-8)如下:
  2. 将该文件放到hive下的一个目录中(可以自己指定目录),我是将它放在一个data目录中
  3. 在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';
  1. 将开始创建的文件中的数据加载进新建的表中
load data local inpath 'opt/data/shijian.txt' into table test.a;
  1. 现在可以看看我们新创建的这个表中的数据
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)
  1. 现在先进行一列转多行的操作,这里就用到了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相等就行了。

  1. 使用一次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)
  1. 使用两次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()函数相关推荐

  1. Hive SQL 中ARRAY或MAP类型数据处理:lateral view explode()/posexplode()——行转列函数

    前言:在对表数据进行批量处理过程中,常常碰上某个字段是一个array或者map形式的字段,一列数据的该字段信息同时存在多个值,当我们需要取出该数组中的每一个值实现一一对应关系的时候,可以考虑使用lat ...

  2. Hive Sql中六种面试题型总结

    Hive Sql中六种面试题型总结 一.常用函数 二.N日留存 1.思路分析 三.连续登陆 1.数据准备 2.思路分析一 3.思路分析二 四.Top N 1.数据准备 2.思路分析 五.行列互转 1. ...

  3. Sql中TO_DAYS,DATE_SUB等时间函数介绍

    Sql中TO_DAYS,DATE_SUB等时间函数介绍 TO_DAYS 获取当前时间 DATE_SUB(date,INTERVAL expr type)函数 DATEDIFF() 函数 ADDDATE ...

  4. Hive之explode()函数和posexplode()函数和lateral view函数

    目录 1.explode()函数 2.posexplode()函数 3.lateral view函数 1.explode()函数 英文释义: explode() takes in an array ( ...

  5. 【数据库】HIVE SQL中的字符串连接函数(CONCAT)

    众所周知,在MySQL.SQLSERVER中,都有字符串连接函数,那么,HQL也不例外. 在学习.工作中,不可避免的会遇到需要将两个字段合并展示的需要. 最基础的一个方法是:CONCAT('abc', ...

  6. Hive SQL中的concat、concat_ws、concat_group列转行,行转列

    目录 1.concat函数,concat_ws函数,concat_group函数 CONCAT() 函数 2.CONCAT_WS(SEPARATOR ,collect_set(column)) 等价于 ...

  7. SQL中常用的四个排序函数

    我们在写SQL代码时,只要有排序,首先想到的肯定是ORDER BY,以至于好多小伙伴觉得排序多简单啊. 今天就给大家介绍四个你不怎么常用排序函数,他们就是SQL Server排序中经常用到的ROW_N ...

  8. SQL中日期与时间类型及函数

    一.日期与时间类型 数据类型 含义 对应范围 DATETIME 日期和时间 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 DATE 日期 1000-01-01~ ...

  9. sql中的常用的字符串处理函数

    一.常用函数 1.ASCII() 返回字符表达式最左端字符的ASCII 码值.在ASCII()函数中,纯数字的字符串可不用''括起来,但含其它字符的字符串必须用''括起来使用,否则会出错.2.CHAR ...

  10. Hive sql中的 各种join(内连接、左外连接、右外连接、满外连接)

    join语句 1 等值 join Hive支持通常的SQL JOIN语句,但是只支持等值连接,==不支持非等值连接==. 案例实操 select * from stu left join score ...

最新文章

  1. python之链表、单链表、双向链表、单向循环链表
  2. linux磁盘满时,如何定位并删除文件
  3. python慢在哪里_求大神分析一下我的python脚本慢在哪里?
  4. Qt工作笔记-profile中INSTALLS的使用
  5. SqlHelper操纵数据库工具类
  6. 怎么把照片做成消消乐_开心消消乐特效怎么制作 制造的几种方式分享
  7. 揭秘新的供应链攻击:一研究员靠它成功入侵微软、苹果等 35 家科技公司
  8. JAVA实现UNIX文件管理系统
  9. 大数据技术与应用解读及案例分析(PPT)
  10. 测试版降级后软件还在么,2分钟告诉你如何将iOS测试版降级到正式版本
  11. 【Latex】一、TeX Live和TeXstudio安装及使用教程
  12. 初学者宝典:C语言入门基础知识大全
  13. 2020iOS开发工程师面试题汇总(内含面试技巧)-看完BATJ面试官对你竖起大拇指!
  14. App为了漂亮脸蛋也要美颜,Theme 与 Style 的使用,附一键变装 demo
  15. 硕士论文查重率是多少?
  16. Dfinity(ICP)基础开发教程-5
  17. 使用VM安装安卓虚拟机
  18. CPLD个人学习笔记
  19. 阿里云学生机linux服务器配置技巧
  20. 学计算机的什么是镜像,系统镜像文件是什么 什么叫系统镜像文件

热门文章

  1. 今天将IE升级到了7.0版
  2. ABP .Net Core 部署到IIS 问题汇总
  3. 2017-10-19 NOIP模拟赛
  4. 第一节补充: 按键操作(CubeMX加HAL库学STM32系列)
  5. layer.open()利用代码实现伪阻塞
  6. spring+mybatis通用dao层、service层的实现
  7. 第一次作业-四则运算
  8. 允许局域网内其他主机访问本地MySql数据库
  9. 统计python文件中的代码,注释,空白对应的行数
  10. 前端面试题之手写事件模型及事件代理/委托