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

news2025/1/19 23:23:03

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;

请添加图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

hypermesh学习总结(一)

1、hypermesh导入导出 2、hypermesh如何使用拓扑命令,连接多个几何体为一个? 3、hypermesh模式选择 分别有显示动力学模式explicit,标准模式Standard3D(静力学及模态等)

【最新Tomcat】IntelliJ IDEA通用配置Tomcat教程(超详细)

前言 IntelliJ IDEA是一个强大的集成开发环境&#xff0c;能够大大简化Java应用程序的开发和部署过程。而Tomcat作为一个流行的Java Web服务器&#xff0c;其与IntelliJ IDEA的整合能够提供便捷的开发环境&#xff0c;让开发人员更专注于代码的创作与优化。 在配置IntelliJ IDE…

ROS参数服务器(Param):通信模型、Hello World与拓展

参数服务器在ROS中主要用于实现不同节点之间的数据共享。 参数服务器相当于是独立于所有节点的一个公共容器&#xff0c;可以将数据存储在该容器中&#xff0c;被不同的节点调用&#xff0c;当然不同的节点也可以往其中存储数据。 使用场景一般存储一些机器人的固有参数&…

【2023云栖】刘一鸣:Data+AI时代大数据平台建设的思考与发布

简介&#xff1a; 本文根据2023云栖大会演讲实录整理而成&#xff0c;演讲信息如下&#xff1a; 演讲人&#xff1a;刘一鸣 | 阿里云自研大数据产品负责人 演讲主题&#xff1a;DataAI时代大数据平台应该如何建设 今天分享的主题是DataAI时代大数据平台应该如何建设&#xf…

Ubuntu系统安装Python3.6.8-Python源代码编译安装-Python环境安装

一、背景 本文将着重介绍如何在Python环境下&#xff0c;安装Python3.6.8&#xff0c;以满足在Ubuntu系统中使用Python的需求。 二、详细步骤 安装Python的方法有很多&#xff0c;本文中我们采用源代码的方式安装Python&#xff0c;首先我们需要下载Python源代码&#xff1a;源…

一起Talk Android吧(第五百五十四回:分享一个Retorfit使用错误的案例)

文章目录 1. 案例场景2. 案例现象3. 原因分析和解决方案3.1 原因分析3.2 解决方案4. 经验总结各位看官们大家好,上一回中咱们说的例子是"解析Retrofit返回的数据",本章回中将分享一个 Retrofit使用错误的案例。闲话休提,言归正转,让我们一起Talk Android吧! 1. …

Unity中Shader法线贴图(上)

文章目录 前言一、法线纹理的作用二、为什么法线贴图长这样&#xff1f;&#xff08;蓝色&#xff09;三、法线贴图能使纹理采样时&#xff0c;进行偏移采样四、在Shader中使用法线贴图1、在属性面板定义一个变量来接收法线贴图2、在使用前声明 _NormalTex3、在片元着色器中&am…

git使用及常用命令

在初入公司中&#xff0c;若使用的是git管理工具&#xff0c;需要做以下步骤&#xff1a; 1&#xff0c;常用命令在&#xff1a; &#xff08;1&#xff09;&#xff0c;git config --global user.name xxx(名字) //若不设置 那么下次提交代码时会报错 其次该设置名字和…

华为模拟器dhcp实验

实验需求&#xff0c;pc1 pc2 pc3 获取到地址且能ping通&#xff0c;pc1 pc2 为地址池模式&#xff0c;pc3为接口模式 上配置 #sysname AR1# dhcp enable # interface GigabitEthernet0/0/0ip address 10.0.47.254 255.255.255.0 dhcp select relaydhcp relay server-ip 10.0…

李宏毅2023机器学习作业HW05解析和代码分享

ML2023Spring - HW5 相关信息&#xff1a; 课程主页 课程视频 Sample code HW05 视频 HW05 PDF 个人完整代码分享: GitHub | Gitee | GitCode 运行日志记录: wandb P.S. HW05/06 是在 Judgeboi 上提交的&#xff0c;完全遵循 hint 就可以达到预期效果。 因为无法在 Judgeboi 上…

windows上安装MySQL Server.

进入官网 MySQL 找到 下载&#xff0c;并点进入。 往下翻&#xff0c;找到社区下载&#xff0c;进入页面 选择 Mysql community Server 选择系统&#xff0c;下载 之后解压。 将解压文件夹下的bin路径添加到变量值中 配置初始化的my.ini文件 [mysqld] # 设置3306端口 port330…

YOLOv5 学习记录

文章目录 整体概况数据增强与前处理自适应Anchor的计算Lettorbox 架构SiLU激活函数YOLOv5改进点SSPF 模块 正负样本匹配损失函数 整体概况 YOLOv5 是一个基于 Anchor 的单阶段目标检测&#xff0c;其主要分为以下 5 个阶段&#xff1a; 1、输入端&#xff1a;Mosaic 数据增强、…

Parity Game——种类并查集、权值并查集、离散化

题目描述 思路 怎么得到这个序列中每一段的关系&#xff1f; 我们可以把这个只包含0和1的序列看作一个数组&#xff0c;0表示当前位置为0&#xff0c;1表示当前位置为1&#xff0c;利用前缀和的性质可以知道某一段中所包含的1的数量sum1 a[r] - a[l-1] 如果sum1为偶数&…

【0到1学习Unity脚本编程】第一人称视角的角色控制器

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;【0…

深信服AC流量管理技术

拓扑图 一.保证通道针对修仙部&#xff0c;访问网站&#xff0c;邮件&#xff0c;DNS&#xff0c;IM&#xff0c;办工 OA&#xff0c;微博论坛网上银行等常见应用保证带宽最低 50%&#xff0c;最高 100% 1. 先新建线路带宽 2.新增流量管理通道&#xff08;保证关键应用&#x…

吾爱破解置顶的“太极”,太好用了吧!

日常工作和娱乐&#xff0c;都需要用到不同类型的软件&#xff0c;哪怕软件体积不大&#xff0c;也必须安装&#xff0c;否则到用时找不到就非常麻烦了。 其实&#xff0c;很多软件不一定一样不剩地全部安装一遍&#xff0c;一方面原因是用的不多&#xff0c;另一方面多少有点…

安装第三方包报错 error: Microsoft Visual C++ 14.0 or greater is required——解决办法

1、问题描述 手动安装第三方软件时&#xff0c;可以使用setup.py&#xff0c;来安装已经下载的第三方包。一般文件下会存在setup&#xff0c;在所要安装库的目录下的cmd执行&#xff1a;python setup.py install报错&#xff1a;error: Microsoft Visual C 14.0 or greater i…

【LeetCode】二叉树OJ

目录 一、根据二叉树创建字符串 二、二叉树的层序遍历 三、二叉树的层序遍历 II 四、二叉树的最近公共祖先 五、二叉搜索树与双向链表 六、从前序与中序遍历序列构造二叉树 七、从中序与后序遍历序列构造二叉树 一、根据二叉树创建字符串 606. 根据二叉树创建字符串 - …

window上Clion配置C++版本的opencv

window上Clion配置opencv 注意版本一定要对的上&#xff0c;否则可能会出错&#xff0c;亲测 widnows 11mingw 8.1.0opencv 4.5.5 mingw8.1下载地址https://sourceforge.net/projects/mingw/ 配置环境变量 cmake下载 安装完添加环境变量 来到官网&#xff0c;下载 windows 对…