Hive 特殊的数据类型 Array、Map、Struct

news2024/11/17 14:19:45

Array

数组类型,存储数据类型一致的列表数据。

我们可以使用 array 方法来创建一个数组,如下所示:

select array(1,2,3,4,5);

在这里插入图片描述

如果其中的数据类型不一致,那么它会转换成统一的数据类型(前提是能够进行转换):

-- 同时存在整型和字符型 会统一转换为整型
select array(1,"1",2,3,4,5);

在这里插入图片描述

Array 数据类型的使用

创建测试表:

create table if not exists array_test(
users array<string>
)
row format delimited fields terminated by '\t';

插入一些测试数据:

insert into table array_test values(array("Jack","Mary","Lily"));

查询表数据:

select * from array_test;

在这里插入图片描述

获取数组中的数据

select
  users,
  users[0] first_col,
  users[10] null_col
from
  array_test;

在这里插入图片描述

获取数组值的方式和我们在 Java 中一样,采用下标的方式访问,当访问的下标超过数组的长度时,并不会报错,它会返回 null 值。

如果想要判断数组中是否存在某个值,可以使用 array_contains 方法:

select
  users,
  array_contains(users,"Jack") is_save_Jack,
  array_contains(users,"Tom") is_save_Tom
from
  array_test;

在这里插入图片描述

Map

Map 是 KV 键值对类型,其中存储的字段数量可多可少,但是 KV 键值对的数据类型必须提前确定。

同样,在 Hive 中也提供了创建 Map 键值对的方法 map,如下所示:

select map(1,2,3,4);

在这里插入图片描述

它会将前面的数据当作 Key,后面的数据当作 Value,两两组合,形成 Map 集合。

如果其中的数据类型不一致,它同样会转换成统一的数据类型:

-- 同时存在整型和字符型 会统一转换为整型
select map(1,2,3,"4");

在这里插入图片描述
这里值 Value 中存在整型和字符型数据类型不统一的情况,它会统一将值 Value 都转换成字符型。

如果无法形成两两组合的键值对,则会直接报错:

select map(1,2,3,4,5);

在这里插入图片描述

Map 数据类型的使用

创建测试表:

create table if not exists map_test(
users map<string,string>
)
row format delimited fields terminated by '\t';

往刚刚创建的表中插入一些测试数据:

insert into table map_test values (map("name","Mary","age","20")),(map("name","Jack","age","21"));

查询表数据:

select * from map_test;

在这里插入图片描述

获取 Map 中的数据

select
  users,
  users["name"],
  users["age"]
from
  map_test;

在这里插入图片描述

如果获取一个不存在的键时,它会返回 null 值:

select
  users,
  users["ggg"]
from
  map_test;

在这里插入图片描述

在查询时,需要注意,Map 会区分键的大小写:

select
  users,
  users["Name"],
  users["AGE"]
from
  map_test;

在这里插入图片描述

如果想要获取所有的键或者值,可以使用 map_keys() 或者 map_values()

select
  users,
  map_keys(users),
  map_values(users)
from
  map_test;

在这里插入图片描述

Struct

Struct 是结构体数据类型,其中存储对象的相关信息,例如:用户ID、用户名、账号、密码等

Struct 中的数据数量以及类型都必须是确定的。

在 Hive 中提供了创建 Struct 键值对的方法 struct,如下所示:

select struct(1,2,3,4);

在这里插入图片描述
它会将所有的参数都当作为值,由系统自动生成键名。

如果想要用户来设置键名,那么可以使用另一个方法 named_struct

select named_struct(1,2,3,4);

和 Map 一样,它会将前面的数据当作 Key,后面的数据当作 Value,两两组合,形成结构体。

如果其中的数据类型不一致,它同样会转换成统一的数据类型:

-- 同时存在整型和字符型 会统一转换为整型
select named_struct(1,2,3,"4");

在这里插入图片描述

这里值 Value 中存在整型和字符型数据类型不统一的情况,它会统一将值 Value 都转换成字符型。

Struct 数据类型的使用

创建测试表:

create table if not exists struct_test(
users struct<id:int,name:string,age:int>
)
row format delimited fields terminated by '\t';

往刚刚创建的表中插入一些测试数据:

insert into table struct_test values (named_struct("id",1001,"name","Mary","age",20)),(named_struct("id",1002,"name","Jack","age",21)),(named_struct("id",1003,"name","Tom","age",20));

如果数据的类型与定义的类型产生冲突,它会直接报错。

查询表数据:

select * from struct_test;

在这里插入图片描述

获取 Struct 中的数据

select
  users,
  users.id,
  users.name,
  users.age
from
  struct_test;

在这里插入图片描述

如果获取一个不存在的键时,它会直接报错:

select
  users,
  users.ggg
from
  struct_test;

在这里插入图片描述

在查询时,需要注意,它和 Map 不同,忽略大小写:

select
  users,
  users.ID,
  users.NaME,
  users.Age
from
  struct_test;

在这里插入图片描述

嵌套使用

在 Hive 中,我们可以嵌套使用特殊的数据类型。

创建测试表:

create table if not exists test(
users array<struct<id:int,name:string>>
)
row format delimited fields terminated by '\t';

插入一些测试数据:

insert into table test values(array(named_struct("id",1001,"name","Jack")));

查询表数据:

select * from test;

在这里插入图片描述
获取嵌套格式中的数据

其实和前面一样,每层使用各自的访问方式就行了。

select
  users,
  users[0].id,
  users[0].name
from
  test;

在这里插入图片描述

其余格式之间的嵌套这里就不再说明了,同学们可以自己尝试。

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

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

相关文章

[leetcode] 68. 文本左右对齐

文章目录 题目描述解题方法贪心java代码复杂度分析 题目描述 给定一个单词数组 words 和一个长度 maxWidth &#xff0c;重新排版单词&#xff0c;使其成为每行恰好有 maxWidth 个字符&#xff0c;且左右两端对齐的文本。 你应该使用 “贪心算法” 来放置给定的单词&#xff…

QT day5 作业

服务器头文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTcpServer> //服务器类 #include <QTcpSocket> //客户端类 #include <QList> //链表类 #include <QMessageBox> //消息对话框类 #include <QDebu…

建筑、室内设计师如何利用AI绘画辅助完成一套设计工作流?超长干货深度好文建议收藏!

2023年是AI人工智能突然大爆发的元年 所有行业都受到了AI的冲击 对设计师来说也迎来了新一轮的效率革命 新事物的到来 有人热情学习和接受 也有人担忧害怕和拒绝 担心自己被取代 其实 取代你的并不是AI 而是会使用AI的设计师 常用的AI工具有哪些&#xff1f; 对于设…

基于单片机的直流电机控制方法研究

摘要&#xff1a;分析表明&#xff0c;我国用电设备应用数量的持续增加&#xff0c;单片机在电力领域的应用范围也在不断扩大。基 于对电动机运行转速的有效控制&#xff0c;成为自动控制系统关注的重点。研究单片机控制直流电机运行状态的 方法。 关键词&#xff1a;单片机&a…

KAN网络最全解析——比肩MLP和Transformer?

1 基本思路 1.1 MLP与Spline的优缺点 多层感知器 (MLP)是深度学习的基础理论模块&#xff0c;是目前可用于逼近非线性函数的默认模型&#xff0c;其表征能力已由通用逼近定理证明。但MLP也有明显的缺点&#xff0c;例如在 Transformer中&#xff0c;MLP 的参数量巨大&#xf…

VSCode:隐藏工程中的文件和目录

VSCode&#xff1a;设置搜索时的排除目录_vscode全局搜索排除掉某些目录-CSDN博客 介绍了如何排除搜索目录 有时也需要隐藏工程中不必关注的文件和目录。 假设工程中的文件结构如下 $ tree . ├── doc │ └── readme.txt ├── m.cpp └── user_guide 可以通过如下方…

关于Matplotlib如何在网页中使用?

目录 一、如何在网页中使用matplotlib 二、如何使用mpld3在网页中显示图表 三、如何使用matplotlibflask在网页中显示图表 一、如何在网页中使用matplotlib Matplotlib是Python中一个非常流行的可视化库。然而&#xff0c;Matplotlib主要是为桌面应用程序设计的&#xff0c;…

llm.c的Makefile

源码 CC ? clang CFLAGS -Ofast -Wno-unused-result -Wno-ignored-pragmas -Wno-unknown-attributes LDFLAGS LDLIBS -lm INCLUDES CFLAGS_COND -marchnative# Find nvcc SHELL_UNAME $(shell uname) REMOVE_FILES rm -f OUTPUT_FILE -o $ CUDA_OUTPUT_FILE -o $# N…

洁净环境微生物监测的解决方案

药品污染控制 Manufacturing 无菌药品生产污染控制意义 01 CCS策略 无菌药品生产污染控制策略&#xff08;CCS) &#xff1a;来自于现行产品和工艺理解&#xff0c;为确保工艺性能和产品质量&#xff0c;所计划的一套体系&#xff0c;针对微生物、热原/内毒素和微粒的控制方…

文本提取新技能:学会按行数批量提取,轻松应对各种需求

在数字化时代&#xff0c;文本处理成为我们日常生活和工作中不可或缺的一部分。无论是从网页、文档还是数据库中提取信息&#xff0c;文本提取技能都显得尤为重要。而按行数批量提取文本内容&#xff0c;更是文本处理中的一项高效且实用的技能。本文将介绍办公提效工具如何按行…

工业机器人应用实践之玻璃涂胶(篇一)

工业机器人 工业机器人&#xff0c;即面向工业领域的机器人。工业机器人是广泛用于工业领域的多关节机械手或多自由度的机器装置&#xff0c;具有一定的自动性&#xff0c;可依靠自身的动力能源和控制能力实现各种工业加工制造功能。工业机器人被广泛应用于电子、物流、化工等…

Verlog-流水灯-FPGA

Verlog-流水灯-FPGA 引言&#xff1a; ​ 随着电子技术的飞速发展&#xff0c;现场可编程门阵列&#xff08;FPGA&#xff09;已成为电子设计自动化&#xff08;EDA&#xff09;领域中不可或缺的组件。FPGA以其高度的灵活性和可定制性&#xff0c;广泛应用于通信、图像处理、工…

【系统分析师】软件架构设计

文章目录 1、构件与软件复用1.1 主流构件标准1.2 构件获取与管理1.3 构件复用的方法 2、软件架构概述3、软件架构建模4、软件架构风格4.1 经典架构风格4.2 层次架构风格4.3 富互联网应用-RIA 5、面向服务的架构5.1 SOA概述5.2 SOA的关键技术5.3 SOA的实现方法 6、软件架构评估6…

ARM时钟树结构(GD32)

时钟树的简易框图 初始化配置系统时钟 配置系统初始化时钟&#xff08;参考手册&#xff09; 对应hal库函数 使用72MHz的系统时钟 do -----------while&#xff08;0&#xff09;的使用方法 系统时钟 #include <stdint.h> #include "gd32f30x.h"int main(void)…

实现MYSQL8.3.0 版本流量抓取

实现MYSQL8.3.0 版本流量抓取 根据测试需求&#xff0c;需要抓取MYSQL8.3.0流量包&#xff0c;使用wireshark 数据库客户端实现 安装数据库服务端 这里就不给详细操作方法&#xff0c; 网上教程一大堆&#xff0c;小编这里是最新的MYSQL 8.3.0版本 安装成功后&#xff0c;创…

PyQt6--Python桌面开发(7.QTextEdit多行富文本框控件)

QTextEdit多行富文本框控件 保存文件到本地QLine多行文本框.ui import sys import time from PyQt6.QtGui import QValidator,QIntValidator from PyQt6.QtWidgets import QApplication,QLabel,QLineEdit,QTextEdit from PyQt6 import uic,QtGuiif __name__ __main__:appQApp…

管道液位传感器可以应用在哪些领域

管道液位传感器是一种利用光学原理来检测水管液位的传感器&#xff0c;其工作原理基于光线在水和空气中折射率不同的特性。通过光电管道传感器&#xff0c;可以有效解决传统机械式传感器存在的低精度、卡死失效等问题&#xff0c;同时也避免了电容式传感器因感度衰减而导致的不…

差分信号的前世今生

网上搜索到一篇简洁文章&#xff0c;描述差分信号&#xff0c;我觉得挺好&#xff0c;和大家一起分享&#xff0c;同时也发表个人的浅浅想法。 一、原文摘录 所谓差分方式传输&#xff0c;就是发送端在两条信号线上传输的幅值是相等的&#xff0c;相位是相反的电信号&#xff…

30年赚1000亿美元--“量化之王”和他最传奇的基金“大奖章”的秘密

文艺复兴是华尔街最成功、最神秘的机构之一。从1988-2018年的30年里&#xff0c;文艺复兴仅向内部员工开放的旗舰基金“大奖章”累计创造了超过1000亿美元的收益&#xff0c;年均回报率高达39%。作为对比&#xff0c;同期“股神”巴菲特的年均回报率为20.5%。 而且&#xff0c;…

怎么将一张包含多个帧的精灵图分割成一帧一帧的小图

工具 图片分割 - 图文工具箱 - imgtool.net 设置行列 下载即可