Hive--行转列(Lateral View explode())和列转行(collect_set() 去重)

hive行转列、列转行真题解析 本文目录一、行转列1.1、行转列需要用到的函数1.2、真题实战1.2.1、需求1.2.2、创建hive表并导入数据1.2.3、按需求解题二、列转行2.1、列转行需要用到的函数2.2、真题实战2.2.1 、需求2.2.2、创建hive表并导入数据2.2.3、按需求解题2.2.4、详细解析上述sql三、总结 一、行转列 1.1、行转列需要用到的函数 CONCAT(string A/col, str... 阅读详情

1.行转列

1.1 问题引入:

如何将

a       b       1,2,3

c       d       4,5,6

变为:

a       b       1

a       b       2

a       b       3

c       d       4

c       d       5

c       d       6 

1.2 原始数据:

test.txt

a b 1,2,3

c d 4,5,6

1.3 解决方法

方案1:

drop table test_jzl_20140701_test;

建表:

create table test_jzl_20140701_test

(

col1 string,

col2 string,

col3 string

)

row format delimited fields terminated by ' '

stored as textfile;

加载数据:

load data local inpath '/home/jiangzl/shell/test.txt' into table test_jzl_20140701_test;

查看表中所有数据:

select * from test_jzl_20140701_test  

a       b       1,2,3

c       d       4,5,6

遍历数组中的每一列

select col1,col2,name 

from test_jzl_20140701_test  

lateral view explode(split(col3,',')) col3 as name;

a       b       1

a       b       2

a       b       3

c       d       4

c       d       5

c       d       6 

方案2:

drop table test_jzl_20140701_test1;

建表:

create table test_jzl_20140701_test1

(

col1 string,

col2 string,

col3 array<int>

)

row format delimited 

fields terminated by ' '

collection items terminated by ','   //定义数组的分隔符

stored as textfile;

加载数据:

load data local inpath '/home/jiangzl/shell/test.txt' into table test_jzl_20140701_test1;

查看表中所有数据:

select * from test_jzl_20140701_test1; 

a       b       [1,2,3]

c       d       [4,5,6]

遍历数组中的每一列:

select col1,col2,name 

from test_jzl_20140701_test1  

lateral view explode(col3) col3 as name;

a       b       1

a       b       2

a       b       3

c       d       4

c       d       5

c       d       6

1.4补充知识点:

select * from test_jzl_20140701_test; 

a       b       1,2,3

c       d       4,5,6


select t.list[0],t.list[1],t.list[2] from (

select (split(col3,',')) list from test_jzl_20140701_test)t;


OK

1       2       3

4       5       6


--查看数组长度

select size(split(col3,',')) list from test_jzl_20140701_test;

3

3


2.列转行

2.1问题引入:

hive如何将

a       b       1
a       b       2
a       b       3
c       d       4
c       d       5
c       d       6

变为:

a       b       1,2,3
c       d       4,5,6

2,2原始数据:

test.txt

a       b       1
a       b       2
a       b       3
c       d       4
c       d       5
c       d       6

2.3 解决方法:

drop table tmp_jiangzl_test;

建表:

create table tmp_jiangzl_test
(
col1 string,
col2 string,
col3 string
)
row format delimited fields terminated by '\t'
stored as textfile;
加载数据:
load data local inpath '/home/jiangzl/shell/test.txt' into table tmp_jiangzl_test;

处理:

select col1,col2,concat_ws(',',collect_set(col3))
from tmp_jiangzl_test  
group by col1,col2;


Hive的行列转换(行转多列、多列转行、行转单列、单列转行) hive 阅读详情

相关推荐

HiveSQL行转列lateral view explore()以及连接concat_ws()和列转行collect_list()&collect_set()区别的使用案例

行转列: 在我们使用hive进行数据统计分析时可能有这么一个场景: 一行数据中,一个字段中有很多和数据项,我们需要对每个数据项进行一个统计分析。 例如:一个人有很多人生的重要阶段,我们有一批人,求在某个阶段的人的总数 uid,stage 1,jiehun:shengzi:maiche 2,maiche:maifang 3,maifang:jiehun 4,dushu:maiche 5,d...

SOARING 6691

hive操作(行转列,列转行)

一、行转列 1.相关函数说明 CONCAT(stringA/col,stringB/col…):返回输入字符串连接后的结果,支持任意个输入字符串; CONCAT_WS(separator,str1,str2,...):它是一个特殊形式的CONCAT()。第一个参数剩余参数间的分隔符。分隔符可以是与剩余参数一样的字符串。如果分隔符是NULL,返回值也将为NULL。这个...

aiduo3346的博客 4694

hive:行转列和列转行(笔记)

6.7.2 行转列 1.相关函数说明 CONCAT(string A/col, string B/col…):返回输入字符串连接后的结果,支持任意个输入字符串; CONCAT_WS(separator, str1, str2,...):它是一个特殊形式的 CONCAT()。第一个参数是剩余其他参数间的分隔符。分隔符可以是与剩余参数一样的字符串。如果分隔符是 NULL,返回值也将为 NULL。...

不花的花和尚的博客 3230

Hive--行转列/列转行

一、lateral view 分类:视图 功能:配合UDTF来使用,把某一行数据拆分成多行数据 很多的UDTF不能将结果与源表进行关联,使用lateral view ,可以将UDTF拆分的单个字段数据与原始表数据关联上 使用方式: select …… from tabelA lateral view UDTF(xxx) 视图名 as a,b,c 案例: --准备数据:vim /export/datas/lateral.txt 1 http://facebook.com/path/p1.php?q

qq_46893497的博客 3万+

Hive中COLLECT_SET与EXPLODE函数详解

特性EXPLODE()类型聚合函数表生成函数(UDTF)功能行转列:将分组中的多行值聚合到一个集合(数组)中列转行:将数组或Map中的元素拆分成多行关键特性自动去重、无序必须与联用类比把散落一地的珠子(行)捡起来,放进一个独一无二的袋子里(集合)把袋子里的珠子(数组)倒出来,一颗珠子摆成一排(行)常用场景分组统计、去重列表、构造特征数组展开数组、展开Map、与聚合函数配合实现复杂ETL逻辑理解并熟练运用和EXPLODE,是掌握 Hive 进行数据重塑和复杂分析的关键一步。

ITHomeZSL的博客 1223

【大数据Hive】hive 行列转换使用详解

hive行列转换使用详解

congge_study的博客 8707

大数据之hive:行列转换系列总结

目录1、行转列(一)主要使用:示例2、列转行(一)示例3、行转列(二)示例4、列转行(二)示例 1、行转列(一) 主要使用: CONCAT(string A/col, string B/col…):返回输入字符串连接后的结果,支持任意个输入字符串; CONCAT_WS(separator, str1, str2,…):它是一个特殊形式的 CONCAT()。第一个参数是剩余其他参数间的分隔符。 COLLECT_SET(col):函数只接受基本数据类型,它的主要作用是将某字段的值进行去重汇总,产生array类型

weixin_43597208的博客 6457

Word中 Go to endnote 出现闪退问题解决办法

Word中 Go to endnote 出现闪退问题解决办法

努力努力努力 1万+

hive中实现行转列_Hive--行转列(Lateral View explode())和列转行(collect_set() 去重)...

1.行转列1.1 问题引入:如何将a b 1,2,3c d 4,5,6变为:a b 1a b 2a b 3c d 4c d 5c d 61.2 原始数据:test.txta b 1,2,3c d 4,5,61...

weixin_39644377的博客 126

OSMDroid(1)——OSM简介,基础例子搭建

1.OSMDroid简介 Osmdroid是一款完全开源的地图基本操作SDK,相比于现在普遍使用的百度地图,高德地图,谷歌地图等最大的好处就是开源。 最近在做一个军方项目,要求完全不能联网,从开发到应用整个阶段都是在局域网进行,相比之下采用了OSMDroid这个SDK作为解决方案。 先来看OSMDroid,便是(OpenStreetMapForAndroid),后面都简称OSM...

robotskly的博客 6182

汇川机器人与PLC通信-ModbusTCP超详细案例

通过汇川机器人与PLC的ModbusTCP通信项目案例,我们可以了解通讯配置的过程,地址映射的方式,对接信号的转换,运行时序的逻辑等注意事项,帮助我们快速应用到项目中。

weixin_44166380的博客 1万+

Hive SQL中的列转行(lateral view与explode)、行转列

列转行、行转列的灵活运用

weixin_49709859的博客 1万+

L3 级自动驾驶 2025:法规突破与车企技术路线竞争

2025年L3级自动驾驶迎来规模化商业落地关键期。全球主要经济体在法规、技术、市场三方面取得突破:中国通过《北京市自动驾驶汽车条例》明确责任划分,欧盟设立严格技术认证标准。技术路线呈现"多传感器融合为主流,纯视觉为补充"格局,华为、特斯拉等企业展开硬件军备竞赛与算法架构革新。中国车企在技术验证和规模化应用方面领先,而欧美车企侧重生态整合。尽管面临成本控制、责任认定和用户信任等挑战,随着技术进步和车路协同发展,L3自动驾驶正从高端选配向大众化普及迈进,为L4级奠定基础。

2301_77933942的博客 3098

hive中的拼接函数contact,concat_ws,collect_set()及explode(),lateral view函数

hive工作中用到的一些拼接函数。 一, concat(string s1, string s2, string s3) 这个函数能够把字符串类型的数据连接起来,连接的某个元素可以是列值。 如 concat( aa, ‘:’, bb) 就相当于把aa列和bb列用冒号连接起来了,aa:bb。 二, cast 用法:cast(value as type) 功能:将某个列的值显示的转化为某个类型 例子:...

weixin_43668299的博客 2万+

Qt思岚激光雷达

Qt关于思岚激光雷达研究示例,本示例采用qt界面开发,可以串口也可以tcp进行设备连接。接收数据进行相关的数据进行绘图, 这种雷达可以用于大屏触摸场景,会场互动触摸场景开发。 #ifndef MAINWIDGET_H #define MAINWIDGET_H #include <QTimer> #include <QWidget> #include "lidarmgr.h" namespace Ui { class MainWidget; } class MainWidget.

cqltbe131421的博客 1598

erdas监督分类(二)

去云 用一张没有云的影像替代有云影像 构建aoi图层 将云和云影编码合并 重编码工作 在监督分类做的差不多以后(纠正无误,无明显错误),就要对监督分类图像进行重编码和颜色调整。 在中选中Recode,对原来分类的地物类别进行重编码,(为彻底修改,记得备份)选中一列,在New Value输入新的编码,依次编码后点击应用apply,即可实现。 这时的图像如果是全黑的或者只有一两类的颜色也没有关系,新的编码覆盖掉了原来的编码,但是颜色并没有改变才会这样。可以点击图像,右击...

weixin_58968530的博客 959

Hive sql 行列转换(行转列,列转行)

在Hive sql应用中会遇到“行转列”和“列转行”的场景,下面介绍其基本使用语法。 1.行转列: 关键字:collect_set() / collect_list()、concat_ws() 1)collect_set()/collect_list():collect_set( )函数只接受基本数据类型,作用是对参数字段进行去重汇总,返回array类型字段; collect_list()函数和collect_set( )作用一样,只是前者不去重,后者去重。2)concat_ws():concat_w

橘子的博客 2万+

4、硬件工程师笔试面试知识器件篇——电阻(2025版本)

本文系统介绍了电阻的基础知识与应用。首先阐述了电阻的定义、工作原理及类型(固定/可变电阻),详细说明了常见电阻材料(碳膜、金属膜、线绕等)的特性与标记方法。重点分析了电阻在电路设计中的关键参数:功率计算需考虑1.5-2倍安全裕度,温度系数影响电路稳定性。文章还对比了不同封装形式(轴向/贴片/功率封装等)的适用场景,特别强调高功率电路需选择专用封装并做好散热设计。最后指出电路仿真可优化电阻选择,并列举了相关电子元件在设计中同样需要仿真验证。全文为硬件工程师提供了电阻选型的实用指导。

XU157303764的博客 5213

【Hive-基础】行转列,列转行,窗口函数

行转列,列转行 文章目录行转列,列转行行转列列转行 行转列 1)函数说明(可以是一行转一列,多行转一列) CONCAT(string A, string B...):返回输入字符串连接后的结果,支持任意个输入字符串; CONCAT_WS(separator, str1, str2,...):它是一个特殊形式的 concat()。第一个参数是其余参数,的分隔符。分隔符可以是与剩余参数一样的字符串。如果分隔符是 NULL,返回值也将为 NULL。 注意:CONCAT_WS must be “string o

一个写湿的程序猿 6106

SPMI协议学习总结

SPMI(System Power Management Interface)是由MIPI(Mobile Industry Processor Interface)联盟定义的一种硬件接口标准,它主要用于移动设备中,连接SoC(System on Chip)处理器系统的集成电源控制器与一个或多个电源管理IC(PMIC),以实现精确的电源管理

歌颂苦难的行为是无耻的; 1086

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

hive-行列互转,posexplode、lateral view、concat、collect

行转列 正常数据以列分组,group by 后面跟的是列。行是数据,列是维度。 如果更换维度,使用拼接的列 一行的单元格原来是数据,现在跟其他单元格拼接成为分组依据, 先把单元格拼接起来,然后以拼接后的值为维度,拼接后的值就成了列 列转行 将一单元格中的数据拆分后分散为多行 .........

DCHAO的博客 8952

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

十一、行转列、列转行函数

一、行转列 1、相关行数 CONCAT(string A/col, string B/col…):返回输入字符串连接后的结果,支持任意个输入字符串; CONCAT_WS(separator, str1, str2,…):它是一个特殊形式的 CONCAT()。第一个参数剩余参数间的分隔符。分隔符可以是与剩余参数一样的字符串。如果分隔符是 NULL,返回值也将为 NULL。这个函数会跳过分隔符参数后的任何 NULL 和空字符串。分隔符将被加到被连接的字符串之间; COLLECT_SET(col):函数只接受基本

风子的博客 5612

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Hive中的行转列和列转行

在使用Hive的数据开发工作中,为了处理复杂的业务需求,经常要用到行转列或列转行的操作。为了节省以后处理这类工作的时间,提高工作效率,现将Hive行列互转的操作方法总结如下。列转行,顾名思义,将原本某列中一行的数据拆分为多行,该操作会使得数据行数增多。我们采用的方法是使用LATERAL VIEW语法,配合explode函数(或其他UDTF)Hive中是有可以直接将一行输出为多行的函数的(即UDTF),比如explode函数,举一个例子来说明这个函数的用法,数据集如下: 其中score字段为数组ARRAY(B

zhr2415658919的博客 4819
上一篇: Hive--HiveQL:查询
下一篇: 关于Hive的练习
Wang_AI
博客等级 码龄12年 996粉丝 162原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值