array<数据类型>

弹珠警察 白宝,黑宝,蓝宝,绿宝
龙珠超 孙悟空,贝吉塔,比鲁斯,布罗利

#建表语句
create table if not exists arr1(
province string,
city array<String>
)
row format delimited fields terminated by '\t'
collection items terminated by ',' #使用逗号分割数组元素
;
#加载数据
load data local inpath '/root/hivedata/arr.txt' into table arr1;
#结果查询
hive (test)> select * from arr2;
OK
弹珠警察        ["白宝","黑宝","蓝宝","绿宝"]
龙珠超  ["孙悟空","贝吉塔","比鲁斯","布罗利"]
Time taken: 0.094 seconds, Fetched: 2 row(s)

这样,一个字段应该被存进数组(集合)的值就被存进了数组(集合)。

#直接通过下表查询
hive (test)> select province,city[0] from arr2 ;
OK
弹珠警察        白宝
龙珠超  孙悟空
Time taken: 0.13 seconds, Fetched: 2 row(s)

也可以对其展开(行转列)

hive (test)> select province,person from arr2 lateral view explode(city) city as person;
OK
弹珠警察        白宝
弹珠警察        黑宝
弹珠警察        蓝宝
弹珠警察        绿宝
龙珠超  孙悟空
龙珠超  贝吉塔
龙珠超  比鲁斯
龙珠超  布罗利
Time taken: 0.127 seconds, Fetched: 8 row(s)

也可以将上一步转成列的数据再转成行

hive (test)> select province,collect_set(person) as city > from (select province,person from arr2 lateral view explode(city) city as person) t1> group by province> ;
......
OK
弹珠警察        ["白宝","黑宝","蓝宝","绿宝"]
龙珠超  ["孙悟空","贝吉塔","比鲁斯","布罗利"]
Time taken: 1.839 seconds, Fetched: 2 row(s)

map<键类型,值类型>

拉面 面:200,牛肉:50,葱花:10
黄焖鸡 米:200,鸡肉:150,土豆:300

#建表
create table if not exists map1(
uname string,
itemIds map<String,int>
)
row format delimited fields terminated by '\t'
collection items terminated by ','
map keys terminated by ':'
;
#加载数据
load data local inpath '/root/hivedata/map.txt' into table map1;
#查看
hive (test)> select * from map1;
OK
map1.uname      map1.itemids
拉面    {"面":200,"牛肉":50,"葱花":10}
黄焖鸡  {"米":200,"鸡肉":150,"土豆":300}
Time taken: 0.1 seconds, Fetched: 2 row(s)

查询数据(通过键获取值)

hive (test)> select uname,itemIds['面'] from map1;
OK
拉面    200
黄焖鸡  NULL
Time taken: 0.17 seconds, Fetched: 2 row(s)

展开(行转列)

hive (test)> select uname,name,num from map1 lateral view explode(itemIds) Ids as name,num;
OK
拉面    面      200
拉面    牛肉    50
拉面    葱花    10
黄焖鸡  米      200
黄焖鸡  鸡肉    150
黄焖鸡  土豆    300
Time taken: 0.124 seconds, Fetched: 6 row(s)

拼接(concat)

hive (test)> select uname,concat(name,':',num) from (select uname,name,num from map1 lateral view explode(itemIds) Ids as name,num)t1;
OK
拉面    面:200
拉面    牛肉:50
拉面    葱花:10
黄焖鸡  米:200
黄焖鸡  鸡肉:150
黄焖鸡  土豆:300
Time taken: 0.143 seconds, Fetched: 6 row(s)hive (test)> select uname,collect_set(concat(name,':',num)) from ( select uname,name,num from map1 lateral view explode(itemIds) Ids as name,num) t1 group by uname;
......
OK
拉面    ["面:200","牛肉:50","葱花:10"]
黄焖鸡  ["米:200","鸡肉:150","土豆:300"]
Time taken: 1.736 seconds, Fetched: 2 row(s)

struct<键:类型,键:类型…>

张三 河南省,洛阳市,月亮区,快乐大街11号
李四 河北省,石家庄市,太阳区,幸福大街21号

#建表
create table if not exists str(
uname string,
addr struct  < province:string,city:string,xian:string,dadao:string >)
row format delimited fields terminated by '\t'
collection items terminated by ',';
#加载数据
load data local inpath '/root/hivedata/struct.txt' into table str;
#查看
hive (test)> select * from str;
OK
str.uname       str.addr
张三    {"province":"河南省","city":"洛阳市","xian":"月亮区","dadao":"快乐大街11号"}
李四    {"province":"河北省","city":"石家庄市","xian":"太阳区","dadao":"幸福大街21号"}
Time taken: 0.086 seconds, Fetched: 2 row(s)

查询

hive (test)> select uname,addr.province,addr.city from str;
OK
uname   province        city
张三    河南省  洛阳市
李四    河北省  石家庄市
Time taken: 0.072 seconds, Fetched: 2 row(s)

总结:感觉array,map,struct是层层递进的,在前一层的基础上增加变化。

关于hive中的array,map,struct相关推荐

  1. hive中存Array类型的数据的案例,将字符串的数组格式转成数组的字符串,自定义函数方式处理‘[12,23,23,34]‘字符串格式的数据为array<int>格式的数据。

    1.创建表带有Array的表: create table t_afan_test ( info1 array<int>, info2 array<string> ) ROW F ...

  2. SQL老司机,在SQL中计算 array map json数据

    2019独角兽企业重金招聘Python工程师标准>>> 摘要: 场景 通常,我们处理数据,一列数据类型要么是字符串,要么是数字,这些都是primitive类型的数据. 场景 通常,我 ...

  3. hive中,向map类型插入数据时,需要str_to_map一下

    如题 转载于:https://www.cnblogs.com/hark0623/p/5064670.html

  4. hive中操作struct与map三例

    例子一 beeline中进行: create table test (id int,course struct<course:string,score:int>) row format d ...

  5. hive中array嵌套map以及行转列的使用

    1. 数据源信息 {"student": {"name":"king","age":11,"sex" ...

  6. 关于hive中Map join 时大表left join小表的问题

    在hive中,(启用Map join时) 大表left join小表,加载从右向左,所以小表会加载进内存,存储成map键值对,通过大表驱动小表,来进行join,即大表中的join字段作为key 来获取 ...

  7. Hive中的map join、left semi join和sort merge bucket join

    map join map join是将join双方比较小的表直接分发到各个 map进程的内存中,在map进程中进行join操作,这样就不用进行reduce步骤,从而提高了速度. 如果不指定mapjoi ...

  8. HIVE中的表以及语法

    2019独角兽企业重金招聘Python工程师标准>>> HIVE中的表以及语法 一.HIVE的表 HIVE使用的功能性的表格分为四种:内部表.外部表.分区表.分桶表. 1.内部表.外 ...

  9. Hive中实现有序,有序concat拼接,有序集合,hive方法操作命令,与自带方法列表

    前言 记得以前用过这个函数,这次开发怎么都找不到了,不常用的原因,也是笔记没做好 方法一 GROUP_CONCAT(distinct id ORDER BY id DESC SEPARATOR '_' ...

最新文章

  1. 资源 | 做一款炫酷的机器人需要哪些学习资源(机器人资源Awesome系列)
  2. Ubuntu下配置samba实现文件夹共享
  3. Linux学习日记——源码编译Apache
  4. django本地安装mysql_Ununtu 15.04 安装MySql(Django连接Mysql)
  5. (转)C#开发微信门户及应用(1)--开始使用微信接口
  6. 如何安装mavaen_Maven的安装及配置
  7. linux vsftp配置用户目录,RedHat 5下VSFTP的配置与公共目录的设置
  8. 360html5播放加速,总结:没有讨论加速问题,“视频快速观看”完全支持360种浏览器...
  9. SWFTOOLS PDF2SWF 参数详解(转)
  10. windows Git Gui 汉化
  11. linux 打开关闭CPU超线程和查看逻辑CPU的个数
  12. VS+QT5报错:LNK2019无法解析的外部符号“_declspec(dllimport)public:bool_cdecl QSerialPort“
  13. android ibeacon模拟器,未使用信标模拟器检测到iBeacon
  14. 分门别类刷leetcode——链表
  15. 浅谈百度闪电算法以及网站HTTPS(图文)
  16. 【关于memset和0x3f3f3f3f】
  17. QT5串口编程——编写简单的上位机
  18. 基础集合论 第一章 集合与集合的运算
  19. SAP假脱机打印解决方法
  20. TCP|Android上TCP通信实现

热门文章

  1. Android Native APP开发笔记:从新建到打包流程记录
  2. LOJ6356四色灯
  3. 征服英语的30个好习惯 --- 李阳
  4. PaddlePaddle/PaddleX本地离线安装(分别以C++和Python为例)
  5. MBA 拓展训练总结
  6. Java choose函数_SQL SERVER 2012新增函数之逻辑函数CHOOSE详解
  7. 如何使用开源项目申请jetbrains激活账号01
  8. 论文阅读笔记5-An Asynchronous Energy-Efficient CNN Accelerator with Reconfigurable Architecture
  9. 文件操作【fopen/fclose/fputs/fgets】【C语言/进阶】
  10. Swift 常见问题