Hive复杂数据类型之array
定义格式如下:
create table tableName(
......
colName array<基本类型>
......
)说明:下标从0开始,越界不报错,以null代替
案例准备:
测试数据
zhangsan 78,89,92,96
lisi 67,75,83,94
王五 23,12
create table if not exists arr1(name string,scores array<string>
)
row format delimited
fields terminated by '\t'
stored as textfile ;
load data local inpath '/data/arr1.txt' into table arr1;
select * from arr1;
结果
+--------+---------------+
|name |scores |
+--------+---------------+
|zhangsan|["78,89,92,96"]|
|lisi |["67,75,83,94"]|
|王五 |["23,12"] |
+--------+---------------+
select scores[0] from arr1;
结果
+-----------+
|c0 |
+-----------+
|78,89,92,96|
|67,75,83,94|
|23,12 |
+-----------+
说明上面这种建表方式是不对的,应该用下面这种,还需要指定数组的分隔符
create table if not exists arr2
(name string,scores array<String>
)row format delimitedfields terminated by '\t'collection items terminated by ','
;
load data local inpath '/data/arr1.txt' into table arr2;
select *
from arr2;
结果如下
+--------+---------------------+
|name |scores |
+--------+---------------------+
|zhangsan|["78","89","92","96"]|
|lisi |["67","75","83","94"]|
|王五 |["23","12"] |
+--------+---------------------+
select scores[0] from arr2;
结果
+--+
|c0|
+--+
|78|
|67|
|23|
+--+
查询语句:
select * from arr1;
select name,scores[1] from arr2 where size(scores) > 3;
+--------+--+
|name |c1|
+--------+--+
|zhangsan|89|
|lisi |75|
+--------+--+--统计arr2中的每个人的总成绩
select scores[0]+scores[1]+nvl(scores[2],0)+nvl(scores[3],0) from arr2;
想要一种效果:也就是将数组类型的数据元素展开,换句话说,就是列转行
zhangsan 78,89,92,96
lisi 67,75,83,94
王五 23,12
将上述效果转成下面的效果,更方便统计每个人的总成绩。
zhangsan 78
zhangsan 89
zhangsan 92
zhangsan 96
lisi 67
lisi 75
lisi 83
lisi 94
王五 23
王五 12
展开函数的使用
简介
- explode:展开函数(UDTF函数中的一种),作用是:接受一个数据行,然后返回产生多个数据行
- lateral view:虚拟表。会将UDTF函数生成的结果放到一个虚拟表中,然后这个虚拟表会和输入行进行join来达到数据聚合的目的
案例:
select explode(score) score from arr2;
+---+
|col|
+---+
|78 |
|89 |
|92 |
|96 |
|67 |
|75 |
|83 |
|94 |
|23 |
|12 |
+---+select name,cj from arr2 lateral view explode(scores) subview as cj;+--------+--+
|name |cj|
+--------+--+
|zhangsan|78|
|zhangsan|89|
|zhangsan|92|
|zhangsan|96|
|lisi |67|
|lisi |75|
|lisi |83|
|lisi |94|
|王五 |23|
|王五 |12|
+--------+--+- 统计每个学生的总成绩:
select name,sum(cj) from arr2 lateral view explode(scores) subview as cj
group by name;
+--------+---+
|name |_c1|
+--------+---+
|lisi |319|
|zhangsan|355|
|王五 |35 |
+--------+---+
还可以将展开的表创建一个新表
create table arr_tmp as
select name,cj from arr2 lateral view explode(scores) subview as cj;
总结
- array类型的数据在建表时要加一句
collection items terminated by ','
- array类型的数据可以用
explode
结合lateral view
展开
Hive复杂数据类型之array相关推荐
- hive复合数据类型之array
概述 ARRAY:ARRAY类型是由一系列相同数据类型的元素组成,这些元素可以通过下标来访问.比如有一个ARRAY类型的变量fruits,它是由['apple','orange','mango']组成 ...
- Hive复杂数据类型使用
Hive复杂数据类型有Array.Map.Struct三种.下面介绍这三种复杂数据类型的使用方法. 1 Array类型 创建数据库 创建数据库 表,以 Array做为数据类型 查询数据库表 查询p ...
- hive 复杂数据类型 在数仓中应用(array、map、struct、和其组合应用)
环境:一般宽表建表可能考虑存储更多信息选择复杂模型建设 复杂数据类型:array.map.struct 1.数组array,里边不能装不同类型的数据 more hive_array.txt zhang ...
- Hive学习笔记 —— Hive的数据类型
Hive本质上是一个数据库,可以创建表,表有列组成,而列支持的主要类型有:基本数据类型.复杂数据类型.时间数据类型. 1. Hive的数据类型之基本数据类型 tinyint/smallint/int/ ...
- 【Hive】Hive的数据类型
Hive中数据类型可以分为基本数据类型和复合数据类型.这些数据类型都是用Java实现的. 1. 基本数据类型 类型名称 描述 举例 boolean true/false true tinyint 1b ...
- bigint hive java类型_三十、Hive的数据类型以及常用的属性配置
上篇文章我们在服务器上部署了Hive并将它的Metastore存储在了MySQL上,本文介绍一下Hive的数据类型以及常用的一些属性配置.关注专栏<破茧成蝶--大数据篇>,查看更多相关的内 ...
- 三十、Hive的数据类型以及常用的属性配置
上篇文章我们在服务器上部署了Hive并将它的Metastore存储在了MySQL上,本文介绍一下Hive的数据类型以及常用的一些属性配置.关注专栏<破茧成蝶--大数据篇>,查看更多相关的内 ...
- linux hive查询数据类型,04-hive的数据类型
转载请注明~ 在学习了Linux系统操作命令和shell编程之后,将进入到hive的学习中,先主要介绍hive的数据类型和文件格式. 01数据类型 基本数据类型 Hive 提供了基本数据类型和复杂数据 ...
- Hive读取复杂的数据类型(Array,Map,Struct)
1.数组 数据文件 hive_array.txt,Array(1,2,3,4) 装的数据类型是一样的 zhnagsan PEK,SHA,HAK,NKG lisi CTU,CKG,XIY,CSX 创建 ...
最新文章
- Android Wear开发 - 数据通讯 - 第二节 : 数据的发送与接收
- C/C++中使用函数memset对int型数组赋值(0,-1,max,min)
- Linq to XML的练习
- Go 语言能取代 Java,成为下一个 10 年的王者吗?
- 玩出花,只用文本就能干CV的活!
- 苹果又发布一个机器学习框架,帮自家生态里的开发者降低AI门槛
- Python格式化输出总结
- 惯性系统常用坐标系_惯性坐标系与非惯性坐标系
- html 中全角波浪线,中间波浪怎么打出来,靠上的波浪符号怎么打
- 华光职业学院计算机专业,关于给予张庆俊等同学省高校计算机一级 考试成绩优秀奖励的通知...
- emacs快捷键总结
- 你是外包,麻烦不要偷吃零食。。。网友:...
- 框架使用 - 收藏集 - 掘金
- 带上传文件功能的写CSDN博客并发表
- linux创建分区大小命令,Linux使用fdisk创建分区详解
- VMware Workstation 15界面,英文改中文
- C#网站图片下载器,网络爬虫,仅供学习参考使用,不可用于商业活动
- elk笔记20--Analysis
- 大数据学习系列(九)Hadoop1.X痛点分析及Hadoop2.X提出的解决方案
- 51单片机汇编学习笔记4——子函数
热门文章
- linux动态库路径生效,Linux下如何解决动态库的链接问题
- springboot报错Table 'wechat.hibernate_sequence' doesn't exist
- oracle缺少控制文件,关于oracle丢失控制文件的恢复办法
- 基于hadoop构建对象存储系统_基于Hadoop企业私有云存储平台的构建
- 企业微信小程序可用存储空间不足_微信小程序为什么能帮助企业商家引流?
- java exception 包_什么是Java中的异常包装?
- python 通用数据库类型_Python开发基础之Python常用的数据类型
- python操作linux命令行_python调用调用Linux命令
- 苹果x与苹果xs的区别_卡通与苹果Xs手机壳的完美邂逅,可爱气质萦绕指尖
- mysql limit (1-1)10_110,当您知道只有1个结果时,是否将'LIMIT 1'添加到MySQL查询中使它们更快?...