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

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.mzph.cn/bicheng/18849.shtml

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

相关文章

【python 进阶】 绘图

1. 将多个柱状绘制在一个图中 import seaborn as sns import matplotlib.pyplot as plt import numpy as np import pandas as pd# 创建示例数据 categories [A, B, C, D, E] values1 np.random.randint(1, 10, sizelen(categories)) values2 np.random.randint(1, 10, siz…

代码随想录35期Day53-Java

Day53题目 LeetCode.1143最长公共子序列 核心思想:这道题是我动态规划的启蒙题目,已经做了很多遍了,dp数组的变化方法是:相同则是左上角1, 不相同则是上和左中的最大值 class Solution {public int longestCommonSubsequence(String text1, String text2) {int[][] dp new …

前端Vue自定义轮播图组件的设计与实现

摘要 随着技术的发展&#xff0c;前端开发的复杂性日益增加。传统的整块应用开发方式在面对频繁的功能更新和修改时&#xff0c;往往导致整体逻辑的变动&#xff0c;从而增加了开发和维护的难度。为了应对这一挑战&#xff0c;组件化开发应运而生。本文将以Vue中的自定义轮播图…

GEE 利用增强的Sentinel-2像元物候特征精确提取水稻分布

题目&#xff1a;An enhanced pixel-based phenological feature for accurate paddy ricemapping with Sentinel-2 imagery in Google Earth Engine 期刊&#xff1a;ISPRS Journal of Photogrammetry and Remote Sensing&#xff08;IF:14.9&#xff09; 第一作者&#xff1a…

HiWoo Box工业4G网关

在飞速发展的工业4.0时代&#xff0c;数据已成为驱动工厂智能化、自动化的核心力量。而如何将这些散布在工厂各个角落的数据高效、安全地汇集起来&#xff0c;成为企业提升生产效率、降低运营成本的关键。今天&#xff0c;我们将为您介绍一款4G网关产品——HiWoo Box&#xff0…

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

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

服务器数据恢复—RAID5阵列崩溃如何恢复上层OA和oracle数据库的数据?

服务器数据恢复环境&故障&#xff1a; 某公司的一台服务器中的raid5磁盘阵列有两块磁盘先后掉线&#xff0c;服务器崩溃。故障服务器的操作系统为linux&#xff0c;操作系统部署了oa&#xff0c;数据库为oracle。oracle数据库已经不再对该oa系统提供后续支持&#xff0c;用…

图形学初识--矩阵和向量

文章目录 前言正文向量什么是向量&#xff1f;向量涉及哪些常见计算&#xff1f;1、取模2、归一化3、向量加法4、向量减法5、向量与标量乘6、向量点乘&#xff08;内积&#xff09;7、向量投影 向量有哪些基本应用&#xff1f; 矩阵什么是矩阵&#xff1f;矩阵涉及哪些常见计算…

数据库中的六大锁

目录 一、死锁 二、锁的区间划分 1、间隙锁&#xff08;Gap Locks&#xff09; 2、临键锁&#xff08;Next-key Locks&#xff09; 三、锁的粒度划分 1、表级锁&#xff08;Table-level lock&#xff09; 2、行级锁&#xff08;Record Locks&#xff09; 3、页级锁 四、…

一分钟教你学浪app视频怎么缓存

你是否在学浪app上苦苦寻找如何缓存视频的方法&#xff1f;你是否想快速、轻松地观看自己喜欢的视频内容&#xff1f;那么&#xff0c;让我们一起探索一分钟教你如何缓存学浪app视频的技巧吧&#xff01; 学浪下载工具我已经打包好了&#xff0c;有需要的自己下载一下 学浪下…

【JavaScript】ECMAS6(ES6)新特性概览(二):解构赋值、扩展与收集、class类全面解析

&#x1f525; 个人主页&#xff1a;空白诗 &#x1f525; 热门专栏&#xff1a;【JavaScript】 文章目录 &#x1f33f; 引言五、 Destructuring Assignment - 解构赋值&#xff0c;数据提取的艺术 &#x1f3a8;&#x1f4cc; 数组解构&#x1f4cc; 对象解构&#x1f4cc; 特…

动态规划之单词拆分

这次分享一道关于动态规划的leetcode&#xff0c;单词拆分。 单词拆分 给你一个字符串 s 和一个字符串列表 wordDict 作为字典。如果可以利用字典中出现的一个或多个单词拼接出 s 则返回 true。注意&#xff1a;不要求字典中出现的单词全部都使用&#xff0c;并且字典中的单词…

【技术】汉诺塔的递归问题解析及多语言实现

汉诺塔的递归问题解析及多语言实现 汉诺塔&#xff08;Hanoi Tower&#xff09;问题是一个非常经典的递归问题。它起源于一个古老的传说&#xff1a;有三个柱子和64个大小不一的金盘&#xff0c;开始时这些金盘按从小到大的顺序放在柱子A上&#xff0c;目标是在柱子B上按同样的…

Java——Java开发环境

一、JDK 1、什么是JDK JDK&#xff08;Java Development Kit&#xff0c;Java 开发工具包&#xff09;是用于开发 Java 应用程序的核心工具包。它包含了编写、编译、调试和运行 Java 程序所需的一切工具和库。JDK 是每个 Java 开发者必备的工具。 2、JDK 主要组件 JDK主要包…

HNU-计算机体系结构-实验3-缓存一致性

计算机体系结构 实验3 计科210X 甘晴void 202108010XXX 文章目录 计算机体系结构 实验31 实验目的2 实验过程2.0 预备知识2.0.1 多cache一致性算法——监听法2.0.1.1 MSI协议2.0.1.2 MESI协议2.0.1.3 本题讲解 2.0.2 多cache一致性算法——目录法2.0.2.1 有中心的目录法2.0.2…

A2B V2.0协议学习笔记(非正式版本)

一、说明 A2B全称是 Automotive Audio Bus 汽车音频总线,主要是解决传统音频总线线多、线重、成本贵等问题。 A2B V2.0总线相对V1.0主要变化点: 速率提升,高达98.304Mbps,全双工模式 编码方式,由之前的曼彻斯特编码变为QPSK(正交相移键控)编码,每个符合2bit数据,因此…

随手记:多行文本域存数据有换行,回显数据换行展示

1.在新增的时候存储数据 <el-input type"textarea"v-model"XXXX"></el-input> 2.详情页返回的数据&#xff1a; replace一顿操作确实复杂 最快的方法直接写个样式:style"white-space: pre-line" 即可行内或者class样式都可以 …

B2126 连续出现的字符

连续出现的字符 题目描述 给定一个字符串&#xff0c;在字符串中寻找第一个连续出现次数不低于 k k k 次的字符。 输入格式 2 2 2 行。第 1 1 1 行是 k k k&#xff1b;第 2 2 2 行是仅包含大小写字母的字符串。 输出格式 字符串中第一个连续出现次数不低于 k 次的字符…

Python面试宝典:Python中与动态规划和排序算法相关的面试笔试题(1000加面试笔试题助你轻松捕获大厂Offer)

Python面试宝典:1000加python面试题助你轻松捕获大厂Offer【第二部分:Python高级特性:第十二章:高级数据结构和算法:第二节:Python中实现各类高级数据结构与算法三】 第十二章:高级数据结构和算法第二节:Python中实现各类高级数据结构与算法2.3、python中与动态规划和排…

网页如何给js后台传递数字类型参数

网页无法通过get方法传递数字参数给js后台&#xff0c;就是网页端写的是数字参数&#xff0c;传递给后台也变成了数字字符串。而js对数字类型和字符串类型是不相同的。由于我们的代码是通过中间件挂载接口的&#xff0c;通过joi库检查参数。 const Joi require(joi); //注意&…