复杂类型,查询--学习笔记

1,复杂类型

解决问题:一些不容易获取到的数据,例如数组类型,集合类型等,获取他们的数据

-- 1.创建表
create table tb_array_person(
    name string,
    city_array array<string>
)row format delimited
fields terminated by "\t"
collection items terminated by ",";

-- 2.上传数据到hdfs对应的表下
-- 3.查询数据结果
select * from tb_array_person;

1)当设定了复杂数据类型的字段后,需要给字段指定分隔符之外,还需要指定其他分隔符
2)注意,当使用原生数据类型指定字段名类型无法满足需求时,就可以考虑使用复杂数据类型。

1.1 SerDe机制

所谓SerDe,就是单词Serializer、Deserializer的简称。而Serializer表示序列化,Deserializer为反序列化。
(1)序列化是对象(或数据)转化为字节码的过程,相当于:加密

(2)反序列化是字节码转换为对象(或数据)的过程,好比是:解密
而上述问题中的[collection items terminated by “,”],就表示拥有了SerDe语法。可以通过命令查看:

desc formatted 表名;

2,这个序列化类中,一共包含4种子语法,分别用于指定不同内容的分隔符号,4种语法分别是:

[row format delimited]
[fields terminated by '指定分隔符']   # 字段之间分隔符
[collection items terminated by '指定分隔符']   # 集合/数组元素之间分隔符
[map keys terminated by '指定分隔符']   # Map映射K-V之间分隔符
[lines terminated by '指定分隔符']   # 行数据之间分隔符

(1)一般情况下,使用复杂类型时,要设定collection、map分隔符;

(2)fields字段、collection items集合/数组、map keys Map映射这几个使用较常见

1.2array数组

create [external] table 表名(
	字段名 字段类型 [comment '注释'],
	字段名 字段类型 [comment '注释'],
	...
	字段名 array<类型>
) 
[row format delimited]
[fields terminated by '指定分隔符']   # 字段之间分隔符
[collection items terminated by '指定分隔符'];   # 集合/数组元素之间分隔符

array类型属于集合/数组,设定分隔符用collection items。
1,数组变量名[index]

以索引值形式访问数组的某元素。其中,index表示索引值,索引值从0开始计算。

2,size(数组变量名)

获取数组变量的总长度或元素总个数。

3,array_contains(数组变量名, value)

判断value值是否存在数组变量中。若存在,则返回true;否则返回false。

create table complex_array(
    name string,
    location_lists array<string>
)row format delimited
fields terminated by "\t"
collection items terminated by ",";

load data local inpath "/root/day09_hive/array/01-data_for_array_type.txt" into table complex_array;

select * from complex_array;
select
    name,
    location_lists[0]
from complex_array;
select
    name,
    size(location_lists)
from complex_array;

select
    name,
    array_contains(location_lists,"shenzhen")
from complex_array;

select
    name,
    array_contains(location_lists,"beijing")
from complex_array;

select
    *
from complex_array
where array_contains(location_lists,"beijing");  -- 做条件

array<类型> 数组元素之间的分隔符:collection items terminated by ‘分隔符’;

1.3struct集合

在Hive中,以struct类型对结构字段之间设定分隔符的建表语句:

create [external] table 表名(
	字段名 字段类型 [comment '注释'],
	字段名 字段类型 [comment '注释'],
	...
	字段名 struct<子列名 类型, 子列名 类型, ...>
) 
[row format delimited]
[fields terminated by '指定分隔符']   # 字段之间分隔符
[collection items terminated by '指定分隔符'];   # 集合/数组元素之间分隔符

struct值得形式是key:value的形式

create table complex_struct(
    id int,
    informations struct<name:string, age:int>
)row format delimited
fields terminated by "#"
collection items terminated by ":";

load data inpath "/itheima/02-data_for_struct_type.txt" into table complex_struct;

select * from complex_struct;

select
    id,
    informations.name,
    informations.age
from complex_struct;

struct<name:string, age:int>结构分隔符只需要:COLLECTION ITEMS TERMINATED BY ‘分隔符’;

1.4map映射

在Hive中,以map类型对映射字段之间设定分隔符的建表语句:

create [external] table 表名(
	字段名 字段类型 [comment '注释'],
	字段名 字段类型 [comment '注释'],
	...
	字段名 map<key类型, value类型>
) 
[row format delimited]
[fields terminated by '指定分隔符']   # 字段之间分隔符
[collection items terminated by '指定分隔符']   # 集合/数组元素之间分隔符
[map keys terminated by '指定分隔符'];   # Map映射K-V之间分隔符

map类型属于Map映射,设定分隔符用map keys。
1,变量名[key]

以key键访问map映射的值。其中,key表示指定类型的键。

2,map_keys(变量名)

以数组形式返回Map变量的所有键。

3,map_values(变量名)

以数组形式返回Map变量的所有值。

4,array_contains(数组变量名, value)

判断value值是否存在数组变量中,可作为where条件处理。若存在,则返回true;否则返回false

create table complex_map(
    id int,
    name string,
    members map<string, string>,
    age int
)row format delimited
fields terminated by ","
collection items terminated by "#"
map keys terminated by ":";

select * from complex_map;

select
    *,
    members["father"],
    members["mother"]
from complex_map;

select
    map_keys(members)
from complex_map;

select
    map_values(members)
from complex_map;

select
    *
from complex_map
where
    array_contains(map_keys(members),"brother");

map类型的字段主要存储K-V键值对;
操作map<key类型, value类型>时,注意:A)不同键值对之间:COLLECTION ITEMS TERMINATED BY ‘分隔符’ 分隔;B)一个键值对内,使用:MAP KEYS TERMINATED BY ‘分隔符’ 分隔K-V。

2.区别SQL的join查询

(1)全外连接

全外连接表示的是:除了返回满足连接条件的记录外,还会返回不满足连接条件的所有其它行记录,可以说是左外连接和右外连接查询结果的总和。语法:

select *|字段名, 字段名, ... from 左表 full outer join 右表 on 左右表关联条件;

通俗地说,全外连接就是:(左表有,右表没有的null补全;右表有,左表没有的null补全)。

常用于合并显示所有数据内容。

(2)左半开连接

左半开连接(LEFT SEMI JOIN)会返回左边表的记录,前提是其记录对于右边表满足 ON 语句中的判定条件。(可以理解成内连接后只取左表的数据)。

select 字段名 from A表名 别名 left semi join B表名 别名 on 条件 [where 查询条件];

LEFT SEMI JOIN 比通常的 INNER JOIN 要更高效,原因如下:对于左表中一条指定的记录,在右边表中一旦找到匹配的记录,Hive 就会立即停止扫描。

select
    *
from tb_users u
full join tb_orders `to` on u.createTime = `to`.createTime;

select
    *
from tb_users u
left semi join tb_orders o on u.userid=o.userid;

请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/164166.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

java 实现串口通讯

1、引入依赖 <dependency><groupId>org.scream3r</groupId><artifactId>jssc</artifactId><version>2.8.0</version> </dependency>2、配置启动串口 Component public class ContextHolder implements ApplicationContextAw…

Jave 定时任务:使用Timer类执行定时任务为何会发生任务阻塞?如何解决?

IDE&#xff1a;IntelliJ IDEA 2022.2.3 x64 操作系统&#xff1a;win10 x64 位 家庭版 JDK: 1.8 文章目录 一、Timer类是什么&#xff1f;二、Timer类主要由哪些部分组成&#xff1f;1.TaskQueue2. TimerThread 三、示例代码分析四、自定义TimerTask为什么会发生任务相互阻塞的…

Actor对象的引用 怎么设置他的材质?或设置是否启用重力?

这个蓝图我是想当重叠触发,将另一个Target Actor(一个球体)设置他的z增加50,但是为什么在触发的时候会抽搐?而且我想要设置他的材质等等这些属性都不行

SQL INSERT INTO 语句详解:插入新记录、多行插入和自增字段

SQL INSERT INTO 语句用于在表中插入新记录。 INSERT INTO 语法 可以以两种方式编写INSERT INTO语句&#xff1a; 指定要插入的列名和值&#xff1a; INSERT INTO 表名 (列1, 列2, 列3, ...) VALUES (值1, 值2, 值3, ...);如果要为表的所有列添加值&#xff0c;则无需在SQL…

【Linux】-进程间通信-匿名管道通信(以及模拟一个进程池)

&#x1f496;作者&#xff1a;小树苗渴望变成参天大树&#x1f388; &#x1f389;作者宣言&#xff1a;认真写好每一篇博客&#x1f4a4; &#x1f38a;作者gitee:gitee✨ &#x1f49e;作者专栏&#xff1a;C语言,数据结构初阶,Linux,C 动态规划算法&#x1f384; 如 果 你 …

16.live555mediaserver-保活机制

live555工程代码路径 live555工程在我的gitee下&#xff08;doc下有思维导图、drawio图&#xff09;&#xff1a; live555 https://gitee.com/lure_ai/live555/tree/master 章节目录链接 0.前言——章节目录链接与为何要写这个&#xff1f; https://blog.csdn.net/yhb1206/art…

解析Spring Boot中的CommandLineRunner和ApplicationRunner:用法、区别和适用场景详解

在Spring Boot应用程序中&#xff0c;CommandLineRunner和ApplicationRunner是两个重要的接口&#xff0c;它们允许我们在应用程序启动后执行一些初始化任务。本文将介绍CommandLineRunner和ApplicationRunner的区别&#xff0c;并提供代码示例和使用场景&#xff0c;让我们更好…

PWM实验

PWM相关概念 PWM:脉冲宽度调制定时器 脉冲&#xff1a;方波信号&#xff0c;高低电平变化产生方波 周期&#xff1a;高低电平变化所需要时间 频率&#xff1a;1s钟可以产生方波个数 占空比&#xff1a;在一个方波内&#xff0c;高电平占用的百分比 宽度调制&#xff1a;占…

飞鼠异地组网工具实战之访问k8s集群内部服务

飞鼠异地组网工具实战之访问k8s集群内部服务 一、飞鼠异地组网工具介绍1.1 飞鼠工具简介1.2 飞鼠工具官网 二、本次实践介绍2.1 本次实践场景描述2.2 本次实践前提2.3 本次实践环境规划 三、检查本地k8s集群环境3.1 检查k8s各节点状态3.2 检查k8s版本3.3 检查k8s系统pod状态 四…

RVC从入门到......

RVC变声器官方教程&#xff1a;10分钟克隆你的声音&#xff01;一键训练&#xff0c;低配显卡用户福音&#xff01;_哔哩哔哩_bilibili配音&#xff1a;AI逍遥散人&#xff08;已授权&#xff09;关注UP主并私信"RVC"&#xff08;三个字母&#xff09;自动获取一键训…

PL/SQL编程

一、Oracle常用函数 concat&#xff1a;用于连接两个字符串。 CONCAT(Oraok, .com) -- Result: Oraok.com ceil&#xff1a;小数点向上取整。 secect ceil(7.3) from dual --Result: 8 dual表是oracle系统为计算设计的一张临时表 select sysdate as 系统日期 from dual…

基于寄生捕食算法优化概率神经网络PNN的分类预测 - 附代码

基于寄生捕食算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于寄生捕食算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于寄生捕食优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针对PNN神…

我的创作纪念日——365天

机缘 最开始我写博客没有什么特别的原因&#xff0c;主要是因为以下几点&#xff1a; 练习自己的语言组织能力 记录自己学习生活中学到的知识 主要还是想找一个好的保存 Markdown 笔记的平台。 最终我选择了 CSDN&#xff0c;一来是因为 CSDN 对 Markdown 语法的支持较为全面…

NSSCTF第13页(2)

[HNCTF 2022 Week1]Challenge__rce 提示?hint 访问看到了源码 <?php error_reporting(0); if (isset($_GET[hint])) { highlight_file(__FILE__); } if (isset($_POST[rce])) { $rce $_POST[rce]; if (strlen($rce) < 120) { if (is_string($rce…

图片降噪软件 Topaz DeNoise AI mac中文版功能

Topaz DeNoise AI for Mac是一款专业的Mac图片降噪软件。如果你有噪点的相片&#xff0c;可以通过AI智能的方式来处理掉噪点&#xff0c;让照片的噪点降到最 低。有了Topaz DeNoise AI mac版处理图片更方便&#xff0c;更简单。 Topaz DeNoise AI mac软件功能 无任何预约即可在…

基于阿基米德优化算法优化概率神经网络PNN的分类预测 - 附代码

基于阿基米德优化算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于阿基米德优化算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于阿基米德优化优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要&#xf…

IntelliJ IDEA 2023 v2023.2.5

IntelliJ IDEA 2023是一款功能强大的集成开发环境&#xff08;IDE&#xff09;&#xff0c;为开发人员提供了许多特色功能&#xff0c;以下是其特色介绍&#xff1a; 新增语言支持&#xff1a;IntelliJ IDEA 2023新增对多种编程语言的支持&#xff0c;包括Kotlin、TypeScript、…

Windows网络「SSL错误问题」及解决方案

文章目录 问题方案 问题 当我们使用了神秘力量加持网络后&#xff0c;可能会和国内的镜像源网站的之间发生冲突&#xff0c;典型的有 Python 从网络中安装包&#xff0c;如执行 pip install pingouin 时&#xff0c;受网络影响导致无法完成安装的情况&#xff1a; pip config…

【飞控调试】DJIF450机架+Pixhawk6c mini+v1.13.3固件+好盈Platinium 40A电调无人机调试

1 背景 由于使用了一种新的航电设备组合&#xff0c;在调试无人机起飞的时候遇到了之前没有遇到的问题。之前用的飞控&#xff08;Pixhawk 6c&#xff09;和电调&#xff08;Hobbywing X-Rotor 40A&#xff09;&#xff0c;在QGC里按默认参数配置来基本就能平稳飞行&#xff0…

Nginx的核心配置文件

Nginx的核心配置文件 学习Nginx首先需要对它的核心配置文件有一定的认识&#xff0c;这个文件位于Nginx的安装目录/usr/local/nginx/conf目录下&#xff0c;名字为nginx.conf 详细配置&#xff0c;可以参考resources目录下的<<nginx配置中文详解.conf>> Nginx的核…