2023.11.14 hivesql的容器,数组与映射

目录

https://blog.csdn.net/m0_49956154/article/details/134365327?spm=1001.2014.3001.5501https://blog.csdn.net/m0_49956154/article/details/134365327?spm=1001.2014.3001.5501

8.hive的复杂类型

[9.array类型: 又叫数组类型,存储同类型的单数据的集合](#9.array类型: 又叫数组类型,存储同类型的单数据的集合)

[10.struct类型: 又叫结构类型,可以存储不同类型单数据的集合](#10.struct类型: 又叫结构类型,可以存储不同类型单数据的集合)

[11.map类型: 又叫映射类型,存储键值对数据的映射(根据key找value)](#11.map类型: 又叫映射类型,存储键值对数据的映射(根据key找value))


把之前的内容单独拿出来

https://blog.csdn.net/m0_49956154/article/details/134365327?spm=1001.2014.3001.5501https://blog.csdn.net/m0_49956154/article/details/134365327?spm=1001.2014.3001.5501

8.hive的复杂类型

复制代码
---------------------------复杂类型建表格式------------------------
-- 复杂类型建表格式:
        [row format delimited] # hive的serde机制
        [fields terminated by '字段分隔符'] # 自定义字段分隔符固定格式
        [collection ITEMS terminated by '集合分隔符'] # 自定义array同类型集合和struct不同类型集合
        [map KEYS terminated by '键值对分隔符'] # 自定义map映射kv类型
        [lines terminated by '\n'] # # 默认即可
        hive复杂类型:   array  struct  map

9.array类型: 又叫数组类型,存储同类型的单数据的集合

复制代码
-- array类型: 又叫数组类型,存储同类型的单数据的集合
--      建表指定类型:  array<数据类型>
--      取值: 字段名[索引]   注意: 索引从0开始
--      获取长度: size(字段名)
--      判断是否包含某个数据: array_contains(字段名,某数据)

需求: 已知data_for_array_type.txt文件,存储了学生以及居住过的城市信息,要求建hive表把对应的数据存储起

1.创建表

collection ITEMS terminated by '集合分隔符'\] # 自定义array同类型集合和struct不同类型集合 ```sql ----建表, create table test_array_1( name string, location array )row format delimited fields terminated by '\t' collection items terminated by ','; ``` 2.加载数据 ![](https://file.jishuzhan.net/article/1725117410781958145/5699154a3a4bec30ead27d3ee26426c5.webp) 1. `load data inpath '/itcast/data_for_array_type.txt' into table test_array_1;` 3.验证数据 ![](https://file.jishuzhan.net/article/1725117410781958145/0f3bbf84b5f5943a7317a49dc89a0ad5.webp) 4.需求:查询张三是否在天津住过? ``` ``` 1. `select array_contains(location,'tianjin')from test_array_1 where name = 'zhangsan';` 2. `--结果:true` 5. 需求:查询张三的地址有几个? ``` ``` 1. `select size(location)from test_array_1 where name = 'zhangsan';` 2. `--结果:4` 6.需求:查询王五的第二个地址? ``` ``` 1. `select location[1] from test_array_1 where name = 'wangwu';` 2. `--结果:chengdu` ### 10.struct类型: 又叫结构类型,可以存储不同类型单数据的集合 ``` -- 建表指定类型: struct<子字段名1:数据类型1, 子字段名2:数据类型2 , ...> -- 取值: 字段名.子字段名n ``` \[collection ITEMS terminated by '集合分隔符'\] # 自定义array同类型集合和struct不同类型集合 1.建表 ```sql -- 建表 create table test_struct_1( id int, name_info struct )row format delimited fields terminated by '#' collection items terminated by ':'; ``` 2.加载数据 `load data inpath '/itcast/data_for_struct_type.txt' into table test_struct_1;` ![](https://file.jishuzhan.net/article/1725117410781958145/aef47db6ef5fb18e49303edc781605fd.webp) 3.验证数据 `select * from test_struct_1;` ![](https://file.jishuzhan.net/article/1725117410781958145/ad8f041b393fd9c049dc1f417ca5f7bf.webp) 需求1:查询所有用户姓名 select name_info.name from test_struct_1; 需求2:查询所有的用户年龄 select name_info.age from test_struct_1; 需求3:查询所有用户的平均年龄 ### 11.map类型: 又叫映射类型,存储键值对数据的映射(根据key找value) ``` -- 建表指定类型: map -- 取值: 字段名[key] -- 获取长度: size(字段名) -- 获取所有key: map_keys() -- 获取所有value: map_values() ``` 1.创建表 ```sql --创建表 create table test_map_1( id int, name string, members map, age int )row format delimited fields terminated by ',' collection items terminated by '#' map keys terminated by ':'; ``` 2.加载数据 `load data inpath '/itcast/data_for_map_type.txt'into table test_map_1;` ![](https://file.jishuzhan.net/article/1725117410781958145/b69188d0b4bf79a057bddf38446c45b7.webp) 3.验证数据 ```sql --验证数据 select * from test_map_1; -- 1,林杰均,"{""father"":""林大明"",""mother"":""小甜甜"",""brother"":""小甜""}",28 -- 2,周杰伦,"{""father"":""马小云"",""mother"":""黄大奕"",""brother"":""小天""}",22 -- 3,王葱,"{""father"":""王林"",""mother"":""如花"",""sister"":""潇潇""}",29 -- 4,马大云,"{""father"":""周街轮"",""mother"":""美美""}",26 ``` 需求1:查询每个学生的家庭成员关系(就是所有的key) select name,map_keys(members) from test_map_1; 需求2:查询每个学生的家庭成员姓名(就是所有的value) select name ,map_values(members) from test_map_1; 需求3:查询每个学生和对应的父亲名字 select name,members['father'] as father from test_map_1; 需求4:查询马大云是否有兄弟 select name,array_contains(map_keys(members),'brother') from test_map_1 where name ='马大云'; ``` -- 需求5:查询每个学生的对应brother姓名,没有brother的学生null补全 -- 需求6:查询每个学生的对应brother姓名,没有brother的学生直接不显示 ```

相关推荐
是梦终空3 分钟前
JAVA毕业设计227—基于SpringBoot+hadoop+spark+Vue的大数据房屋维修系统(源代码+数据库)
hadoop·spring boot·spark·vue·毕业设计·源代码·大数据房屋维修系统
顽强卖力2 小时前
数据分析六部曲?
大数据·数据挖掘·数据分析
AWS官方合作商7 小时前
亚马逊云科技 Amazon Pinpoint 解决方案:构建智能全渠道互动平台,重塑用户增长体验
大数据·科技·aws
无人赴约的cat8 小时前
【20250607接单】Spark + Scala + IntelliJ 项目的开发环境配置从零教学
大数据·spark·scala
£菜鸟也有梦9 小时前
Flume进阶之路:从基础到高阶的飞跃
大数据·hive·hadoop·flume
在未来等你9 小时前
SQL进阶之旅 Day 23:事务隔离级别与性能优化
sql·mysql·postgresql·高并发·数据一致性·数据库优化·事务隔离
lcw_lance10 小时前
智慧园区综合运营管理平台(SmartPark)和安全EHS平台的分工与协作
大数据·人工智能
_Chipen11 小时前
6.10 - 常用 SQL 语句以及知识点
数据库·sql·oracle
青春之我_XP12 小时前
【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
数据库·sql
阿里云大数据AI技术12 小时前
从MaxCompute到Milvus:通过DataWorks进行数据同步,实现海量数据高效相似性检索
大数据·数据库·数据分析