2023.11.14 hivesql的容器,数组与映射

news/2025/2/14 0:27:18/

 

目录

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类型: 又叫数组类型,存储同类型的单数据的集合

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

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


把之前的内容单独拿出来

https://blog.csdn.net/m0_49956154/article/details/134365327?spm=1001.2014.3001.5501icon-default.png?t=N7T8https://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不同类型集合

----建表,
create table test_array_1(name string,location array<string>
)row format delimited
fields terminated by '\t'
collection items terminated by ',';

2.加载数据

  1. load data inpath '/itcast/data_for_array_type.txt' into table test_array_1;

 3.验证数据

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.建表

-- 建表
create table test_struct_1(id int,name_info struct<name:string,age:int>
)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;

3.验证数据

select * from test_struct_1;

需求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类型,value类型>
--     取值: 字段名[key]
--     获取长度: size(字段名)
--     获取所有key: map_keys()
--     获取所有value: map_values()

1.创建表

--创建表
create table test_map_1(id int,name string,members map<string,string>,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;

3.验证数据

--验证数据
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的学生直接不显示

http://www.ppmy.cn/news/1221175.html

相关文章

TVM编译入门概念 一

最近阅读到陈天奇的一篇文章&#xff0c;链接分享 21年底&#xff0c;他说在三年前也就是2018年左右就完成了基于多层优化的解决方案。 当把全栈解决方案搭建起来并且不断实践之后发现有两种隔阂阻碍整个行业的发展。做一些总结。 本文合适的受众是ai编译器相关的入门级选手或供…

简述几个我们对Redis 7开源社区所做的贡献

Redis 7 已经于2022年4月28号正式发布&#xff0c;其中包括了将近50个新的命令&#xff0c;增加了许多新的特性&#xff0c;并且在整个Redis 6到Redis 7的开发过程中&#xff0c;我也对Redis 的开源社区贡献了一些微薄的力量。在这篇文章中&#xff0c;我来给大家介绍几个自己亲…

dist.init_process_group() 卡住超时导致报错

在跑模型是遇到一个问题&#xff1a; import torch.distributed as dist dist.init_process_group(backend"nccl", init_methodtcp://localhost:%d % tcp_port, ranklocal_rank, world_sizenum_gpus)程序卡在这一步一动不动。. 解决办法一&#xff1a; 我看网上有人…

sklearn 笔记 BallTree/KD Tree

由NearestNeighbors类包装 1 主要使用方法 sklearn.neighbors.BallTree(X, leaf_size40, metricminkowski, **kwargs) X数据集中的点数leaf_size改变 leaf_size 不会影响查询的结果&#xff0c;但可以显著影响查询的速度和构建树所需的内存metric用于距离计算的度量。默认为…

大数据-之LibrA数据库系统告警处理(ALM-12047 网络读包错误率超过阈值)

告警解释 系统每30秒周期性检测网络读包错误率&#xff0c;并把实际错误率和阈值&#xff08;系统默认阈值0.5%&#xff09;进行比较&#xff0c;当检测到网络读包错误率连续多次&#xff08;默认值为5&#xff09;超过阈值时产生该告警。 用户可通过“系统设置 > 阈值配置…

LC349. 两个数组的交集

/*** 方法一* 创建set1和set2来装nums1和nums2中的元素* 创建set3来装交集数据* 我们遍历set1,取出每一个item,如果set2中含有该item,则该item就是set1和set2共有的元素,因此将item放入set3中* 最后将set3转换成数组返回* param nums1* param nums2* return*/public static int…

反序列化漏洞(2), 分析调用链, 编写POC

反序列化漏洞(2), 反序列化调用链分析 一, 编写php漏洞脚本 http://192.168.112.200/security/unserial/ustest.php <?php class Tiger{public $string;protected $var;public function __toString(){return $this->string;}public function boss($value){eval($valu…

R脚本进行长宽数据转换

1.R脚本进行长宽数据转换 library(tidyverse) df tibble(Class c("1班", "2班"),Name c("张三&#xff0c;李四&#xff0c;王五", "赵六&#xff0c;钱七")) df## # A tibble: 2 x 2 ## Class Name ## <chr> <chr&g…