摸鱼大数据——Hive表操作——复杂类型

news2024/11/15 10:31:54
1、hvie的SerDe机制

其中ROW FORMAT是语法关键字,DELIMITED和SERDE二选其一。本次我们主要学习DELIMITED关键字相关知识点
如果使用delimited: 表示底层默认使用的Serde类:LazySimpleSerDe类来处理数据。
如果使用serde:表示指定其他的Serde类来处理数据,支持用户自定义SerDe类。

Hive默认的序列化类: LazySimpleSerDe
包含4种子语法,分别用于指定字段之间、集合元素之间、map映射 kv之间、换行的分隔符号。
在建表的时候可以根据数据的类型特点灵活搭配使用。
COLLECTION ITEMS TERMINATED BY '分隔符' : 指定集合类型(array)/结构类型(struct)元素的分隔符
MAP KEYS TERMINATED BY '分隔符' : 表示映射类型(map)键值对之间用的分隔

2、复杂类型
复杂类型建表格式: 
...
[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
​
array类型: 又叫做数组类型。用来存储相同类型的数据集合
     建表指定类型:  array<元素的数据类型>
     取值: 字段名[索引/下标/角标]。索引是从0开始
     获取长度: size(字段名)
     判断是否包含某个数据: array_contains(字段名)
​
struct类型:又叫做结构类型。可以存储不同了类型的数据集合
     建表指定类型: struct<字段名称1:数据类型,字段名称2:数据类型...>
     取值: 字段名.key键的名称
    
map类型: 又叫做映射类型。存储的是key-value键值对数据
    建表指定类型: map<key的类型,value的类型>
    取值: 字段名[key的名称]
    获取长度: size(字段名),实际获取的是key-value键值对的对数
    获取所有key: map_keys(字段名)
    获取所有value: map_values(字段名)
    

3、array示例

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

use day07;
​
-- 创建表
create table array_tb(
    name string,
    work_location array<string>
)
row format delimited fields terminated by '\t'
collection items terminated by ','; -- 指定array数组中元素间的分隔符
​
​
-- load加载数据
load data inpath '/dir/data_for_array_type.txt' into table array_tb;
​
-- 验证数据
select * from array_tb;
​
-- array专有的操作
-- 函数:具备特殊功能的代码,例如size
-- size(work_location) 统计数组中有多少个元素。该案例中也就是统计你去多少个城市工作过
select name,size(work_location) as city_cnt from array_tb;
​
-- 数组字段名称[索引/下标/角标]。索引是从0开始
select name,work_location[-1] from array_tb;
select name,work_location[0] from array_tb; -- 取数组中的第一个元素
select name,work_location[1] from array_tb; -- 取数组中的第二个元素
select name,work_location[10] from array_tb; -- 如果根据索引取不到对应的元素,那么返回的是null空值。null值(你没有去参加考试)和0(参加考试,但是考了0分)是不一样
​
-- 判断数组中是否存在某个元素/数据
-- array_contains:是一个函数,用来判断元素在数组中是否存在。如果存在返回true;如果不存在返回false
select name,array_contains(work_location,"chengdu") from array_tb;

4、struct示例

需求: 已知data_for_struct_type.txt文件存储了用户姓名和年龄基本信息,要求建hive表把对应的数据存储起来

use day07;
​
-- 创建表
create external table singer_struct(
    id int,
    info struct<name:string,num:int>
)row format delimited fields terminated by '#'
collection items terminated by ':';-- 指定struct中元素间的分隔符
​
-- 加载数据
load data inpath '/dir/data_for_struct_type.txt' into table singer_struct;
​
-- 验证数据
select * from singer_struct;
​
-- struct中特有的操作
-- 如果想要看struct中的具体信息,需要通过 struct字段名称.key键
select id,info.name,info.num from singer_struct;
select id,info.name,info.num,info.aaaa from singer_struct;
​
-- struct中不支持size()函数
-- select id,size(info) from singer_struct;

原因: 如果访问struct中不存在的key会报如上的问题。

5、map示例

需求: 已知data_for_map_type.txt文件存储了每个学生详细的家庭信息,要求建hive表把对应数据存储起来

use day07;
​
-- 创建表
create table star_map(
    id int,
    name string,
    family map<string,string>, -- 前面的string是key的数据类型,后面的string是value的数据类型
    age int
)row format delimited fields terminated by ',' -- 指定字段间的分隔符
collection items terminated by '#' -- 指定map中key-value键值对间的分隔符
map keys terminated by ':'; -- 指定key-value键值对里面的分隔符
​
-- load导入数据到Hive表中
load data inpath '/dir/data_for_map_type.txt' into table star_map;
​
-- 数据验证
select * from star_map;
​
-- map数据类型的特殊操作
select id,name,age,family['father'] as father,family['mother'] as mother from star_map;
​
-- 获取map中所有key的信息
select id,name,age,map_keys(family) as keys from star_map;
​
-- 获取map中所有key的信息,之后,再通过array获取数据的方式,获取指定索引的元素值
select id,name,age,map_keys(family),map_keys(family)[1] as keys from star_map;
​
​
-- 获取map中所有value的信息
select id,name,age,map_values(family) as keys from star_map;
-- 获取map中所有value的信息,之后,再通过array获取数据的方式,获取指定索引的元素值
select id,name,age,map_values(family),map_values(family)[2] as keys from star_map;
​
-- size函数:在map中,是用来获取key-value键值对的对数
select id,name,age,size(family) from star_map;
​
-- array_contains函数
select id,name,age,map_keys(family),array_contains(map_keys(family),"brother") from star_map;

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

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

相关文章

香橙派AIpro开发板初体验

香橙派AIpro开发板初体验 一、引言 在当前的AI发展浪潮中&#xff0c;边缘计算逐渐成为了研究的热点。香橙派AIpro开发板作为一款基于昇腾AI技术的开发板&#xff0c;凭借其强大的算力和丰富的接口&#xff0c;为AI边缘计算提供了强大的支持。最近&#xff0c;我也是拿到了官…

揭秘SQL中的公用表表达式:数据查询的新宠儿

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 揭秘SQL中的公用表表达式&#xff1a;数据查询的新宠儿 前言公用表表述的概述非递归CTE的作用递归CTE的作用CTE性能优化 前言 你是否曾经为SQL查询的复杂性而困扰不已&#xff1f;尤其是那些读写层子…

数据结构(一)顺序表

目录 一、概念&#xff08;一&#xff09;数据结构的三元素1. 逻辑结构&#xff08;1&#xff09;线性结构&#xff08;2&#xff09;非线性结构 2. 存储结构&#xff08;1&#xff09;顺序存储&#xff08;2&#xff09;链式存储&#xff08;3&#xff09;索引存储 3. 运算 &a…

douyin-vue:使用Vue3、Pinia和Vite5打造高度还原的抖音仿制项目

一&#xff1a;引言 在前端技术日新月异的今天&#xff0c;Vue.js作为一款流行的前端框架&#xff0c;不断吸引着开发者的目光。最近&#xff0c;GitHub上出现了一个备受瞩目的项目——douyin-vue&#xff0c;这是一个基于Vue3、Pinia和Vite5的移动端短视频项目&#xff0c;旨…

CCF20220301——未初始化警告

CCF20220301——未初始化警告 代码如下&#xff1a; #include<bits/stdc.h> using namespace std; #define Max 100000 int x[Max]{0},y[Max]{0}; int main() {int n,k;int cnt1,flag0;cin>>n>>k;for(int i1;i<k;i)cin>>x[i]>>y[i];for(in…

Linux命令 jps(Java Process Status)解释

文章目录 1、第一种解释2、第二种解释3、第三种解释 1、第一种解释 jps 命令本身并不是一个标准的 Unix/Linux 命令&#xff0c;但您可能是想提到 jps 的一个变种或误写了 jps 为 jps&#xff0c;而实际上可能是想提及 jps&#xff08;Java Virtual Machine Process Status To…

虚拟化概述

虚拟存储器(Virtual Memory) 它的基本思想是对于一个程序来说,它的程序(code)、数据(data)和堆栈(stack)的总大小可以超过实际物理内存的大小&#xff1b;操作系统把当前使用的部分内容放到物理内存中&#xff0c;而把其他未使用的内容放到更下一级存储器&#xff0c;如硬盘&a…

通过 coze 快速构建自己的智能体机器人

通过 coze 快速构建自己的智能体机器人 coze 的使用 一&#xff09;coze 是什么 「Coze 扣子」AI Bot 开发平台。任何用户都可以快速、低门槛地搭建自己的 Chatbot&#xff0c;且平台支持用户将其一键发布到飞书、微信公众号、豆包等渠道。 二&#xff09;coze 怎么注册 1. …

安卓ADB通过WIFI无线连接手机[通过无线安装APK]

安卓ADB通过无线连接手机 本文摘录于&#xff1a;https://www.cnblogs.com/zhuxibo/p/14261117.html只是做学习备份之用&#xff0c;绝无抄袭之意&#xff0c;有疑惑请联系本人&#xff01; 别人给的操作确实可行,我这里实操记录如下: AdministratorpiaoranPC MINGW64 /e/Wor…

AI RAG的知识满天飞,为什么你还做不出一个像样的AI助手应用

引言 在过去的一年半里&#xff0c;随着大型语言模型&#xff08;LLM&#xff09;的崛起&#xff0c;检索增强生成&#xff08;RAG&#xff09;的概念也逐渐进入公众视野。 从微信公众号到各大自媒体&#xff0c;关于RAG的讨论几乎无处不在。然而&#xff0c;尽管这些高科技名…

小苯的排列构造,小苯的01背包(easy),小苯的01背包(hard)

小苯的排列构造 题目描述 运行代码 #include<bits/stdc.h> using namespace std; typedef long long ll; #define N 1000050 int i,j,k,n,m,t,a[N],b[N],f[N],l[N]; bool v[N]; int main(){cin>>n;for(i1;i<n;i)cin>>a[i];v[0]1;for(i1;i<n;i){if(a[…

apexcharts数据可视化之极坐标区域图

apexcharts数据可视化之极坐标区域图 有完整配套的Python后端代码。 本教程主要会介绍如下图形绘制方式&#xff1a; 基础极坐标区域图单色极坐标区域图 基础极坐标区域图 import ApexChart from react-apexcharts;export function BasicPolar() {// 数据序列const series…

Ubuntu/Linux 安装Paraview

文章目录 0. 卸载已有ParaView1. 安装ParaView1.1 下载后安装 2.进入opt文件夹改名3. 更改启动项4. 创建硬链接5. 添加桌面启动方式6. 即可使用 0. 卸载已有ParaView YUT 1. 安装ParaView https://www.paraview.org/ 1.1 下载后安装 找到下载的文件夹&#xff0c;文件夹内…

[JAVASE] String类 StringBuffer类 StringBuilder类

目录 一.String类 1.1 String字符串不可变的原因 1.2 字符串中的比较方法 1.2.1 equals 1.2.2 compareTo 与 compareToIgnoreCase 1.3 字符串中的查找方法 1.3.1 charAt 1.3.2 indexOf 与 lastIndexOf 1.4 字符串中的转换方法 1.4.1 valueOf 1.4.2 toUpperCase 与 to…

【PMP必考点】2024年PMP敏捷知识必考点-工件篇

PMP自2023年8月起启动了PMBOK第七版教材&#xff0c;考试内容的侧重点也发生了改变&#xff1a;大幅增加了敏捷相关的内容。以往考纲只有不到10%的敏捷管理的内容&#xff0c;新考纲的敏捷管理题目增加至50%。所以如果复习只用之前的题目是远远不够的&#xff0c;必须要多刷新考…

el-tabs中的下拉框被覆盖解决方法

解决方法&#xff1a; ::v-deep .el-tabs__content{// overflow:hidden 会导致 分页下拉框超出部分会被.el-tabs__content隐藏overflow: visible; }

JEPaaS 低代码平台 accessToTeanantInfo SQL注入漏洞复现

0x01 产品简介 JEPaaS低代码开发平台开源版 旨在帮助企业快速实现信息化和数字化转型。该平台基于可视化开发环境,让软件开发人员和业务用户通过直观的可视化界面来构建应用程序 ,而不是传统的编写代码方式。 用户可以在开发平台灵活各个图形化控件,以构建业务流程、逻辑和…

Linux基础学习笔记

目录 1、Linux安装 1.1 安装教程 1.2 Linux目录结构 2、Linux常用命令 2.1 ls 2.2 命令分类 2.3 目录处理命令 2.4 操作文件命令 2.5 查找文件命令 2.6 ln链接命令 2.7 进程相关命令 ​编辑3、配置网络 3.1 关闭windows防火墙 3.2 配置好虚拟机的局域网 3.3 配置…

[数据集][目标检测]红外兔子检测数据集VOC+YOLO格式96张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;96 标注数量(xml文件个数)&#xff1a;96 标注数量(txt文件个数)&#xff1a;96 标注类别数…

【Linux】常见命令:fping的介绍和用法举例

一、fping命令的安装 在终端中输入如下命令&#xff08;Ubuntu系统使用apt install&#xff0c;CentOS系统使用yum install&#xff09; sudo apt install fping安装效果&#xff08;截图&#xff09;&#xff1a; 二、fping命令的用法和选项 fping命令用于检测主机是否存在…