当前位置: 首页 > news >正文

大数据分析组件Hive-集合数据结构

Hive的数据结构

  • 前言
  • 一、array数组类型
  • 二、map键值对集合类型
  • 三、struct结构体类型

前言

Hive是一个基于Hadoop的数据仓库基础设施,用于处理大规模分布式数据集。它提供了一个类似于SQL的查询语言(称为HiveQL),允许用户以类似于关系型数据库的方式查询和分析存储在Hadoop集群中的数据。

Hive常作为离线数仓的分析工具,当面临Json数据时,Hive需要用到其数据结构构建出一张Json表才得以操作Json数据;(Hive4.0推出了Json解析)

一、array数组类型

数组是一组具有相同类型的变量的集合。 这些变量称为数组的元素,每个数组元素都有一个编号,编号从零开始。

数组类型的创建:

drop table if exists test_datatype;
create external table test_datatype(ids array<int>,
) comment '数据结构测试表'
location 'test/test_datatype';

创建表字段时,使用Array类型需要声明其泛型,如果在后续的操作中,向该表字段插入了一个包含string类型的array,Hive 在数据加载过程中会根据目标表的声明进行数据类型推断和转换。如果插入的数组元素与目标表声明的数据类型不匹配,Hive 会尝试进行隐式类型转换。在这种情况下,Hive 会尝试将字符串转换为整数类型。

Tip:隐式类型转换可能导致数据丢失或错误。如果类型转换失败Hive 可能会将其转换为 NULL 值。

以下构建一个简单的array数组对象:

====查询语句====
selectids,`array`(ids[0],ids[6]),array_contains(ids,'milet')
from (select `array`("aimyon","aimer","vaundy","Ado",1,3.6) as ids)t1====执行结果====
ids>>>["aimyon","aimer","vaundy","Ado","1","3.6"]
`array`(ids[0],ids[5])>>>["aimyon",null]
array_contains(ids,'milet')>>> false
  1. Array 类型可以存储具有相同数据类型的元素。这意味着数组中的每个元素都应该是相同的数据类型。上述的Hql中使用了string和int类型,但是查询结果显示的都是string类型。
  2. Array类型通过下标取出元素,如果下标越界,取出的元素为null
  3. array_contains()能够检索数组是否包含该元素,该函数返回布尔类型。

二、map键值对集合类型

Map 类型是一种键值对的集合,其中的键和值可以是任何 Hive 支持的数据类型。Map 类型用于表示一种关联关系,类似于其他编程语言中的字典或哈希表。

Map类型的创建:

drop table if exists test_datatype;
create external table test_datatype(dat map<string,string>
) comment '数据结构测试表'
location 'test/test_datatype';

创建Map类型时,需要声明其键值对泛型,Map 类型的语法为 MAP<key_type, value_type>,其中 key_type 和 value_type 分别表示键和值的数据类型。

以下构建一个简单的map对象:

====查询语句====
selectdat,dat['a'],map_keys(dat),`if`(array_contains(map_keys(dat),"a"),"true","false")
from (select `map`('a','b',1,'d') dat)t;====执行结果====
dat>>>{"a":"b","1":"d"}
dat['a']>>>b
map_keys(dat)>>>["a","1"]
`if`(array_contains(map_keys(dat),"a"),"true","false")>>>true

map类型使用map[‘key_name’]的方式取出值,并且hive提供了map_keys,map_values获取所用的key和value,这在一些判断场景下非常好使。

Tip:map的key的类型可以不统一,但是value类型必须统一。

三、struct结构体类型

在 Hive 中,结构体(Struct)类型是一种用于组合多个字段的复合数据类型。结构体类型允许你在一个列中存储多个相关的值,并将它们作为一个单元进行处理。

结构体类型由多个字段组成,每个字段都有一个名称和一个数据类型。你可以将结构体类型用作表的列类型,或者作为其他复合数据类型(如数组或映射)的元素类型。

struct类型的创建:

drop table if exists test_datatype;
create external table test_datatype(obj struct<id:int,name:string>
) comment '数据结构测试表'
location 'test/test_datatype';

创建struct结构体时,需要声明所有使用到的类型,结构体创建之后,其属性不能再做更改。

以下构建一个简单的struct对象:

====查询语句====
select struct('a','b','c','d') >>>{"col1":"a","col2":"b","col3":"c"}
select name_struct('a','b','c',1) >>>{"a":"b","c":1}select obj,obj.a
from (select named_struct('a', 'b', 'c', 1) obj) t1;
====执行结果====
obj>>> {"a":"b","c":1}
obj.a>>> b
  1. 结构体通过点的方式访问元素
  2. 结构体与map不同,一旦创建属性个数就不能更改。
  3. 结构体定义后,其类型不能做更改< name:string,age:int >;map类型定义后其每个元素的值类型就需要确定了map< string:stiring >

总结:

遇到Json属性为 {key1:value1,key2:value2 …}

  1. value类型都统一的,并且个数不确定的可以使用map类型。
  2. value类型不统一,并且个数确定的可以使用struct类型。

遇到类似数组的json数据:

  "actions": [{                   -- 动作(事件)"action_id": "favor_add",   -- 动作id"item": "3",                -- 目标id"item_type": "sku_id",      -- 目标类型"ts": 1585744376605         -- 动作时间戳}
  1. 数据结构可以嵌套使用:array< struct < key1:string,key2:int > >
  2. 上述json中actions为数组,元素个数不确定并且元素都能够用struct

array<泛型> map<string:string> struct<name:string,age:int>

具体问题具体分析,根据数据情况选择合适的数据结构。

相关文章:

大数据分析组件Hive-集合数据结构

Hive的数据结构 前言一、array数组类型二、map键值对集合类型三、struct结构体类型 前言 Hive是一个基于Hadoop的数据仓库基础设施&#xff0c;用于处理大规模分布式数据集。它提供了一个类似于SQL的查询语言&#xff08;称为HiveQL&#xff09;&#xff0c;允许用户以类似于关…...

单核QPS近6000S,陌陌基于OceanBase的持久化缓存探索与实践

挚文集团于 2011 年 8 月推出了陌陌&#xff0c;这款立足地理位置服务的开放式移动视频社交应用在中国社交平台领域内独树一帜。陌陌和探探作为陌生人社交领域的主流应用&#xff0c;涵盖了多种核心业务模块&#xff0c;包括直播服务、附近动态功能、即时通讯&#xff08;IM&am…...

关于css 的基础试题

CSS是什么的缩写&#xff1f; A. Creative Style SheetsB. Cascading Style SheetsC. Computer Style SheetsD. Colorful Style Sheets 在HTML中&#xff0c;通过什么标签引入CSS样式&#xff1f; A. <script>B. <style>C. <link>D. <css> 以下哪个选项…...

Keil-C语言小总结

1、 &取地址符&#xff0c;*取地址内容 int *ptr;//声明指针 2、ptr &c; // 将c的地址赋值给指针变量ptr 3、可选参数函数 4、C宏定义 5、 memset&#xff1a;最快的数据清零函数 void *memset(void *s, int ch, size_t n); 分别是 字符串 要值的数据&#xff08;0…...

react的withRouter高阶组件:

withRouter的作用就是, 如果我们某个东西不是一个Router, 但是我们要依靠它去跳转一个页面, 比如点击页面的logo, 返回首页, 这时候就可以使用withRouter来做. 在 React Router 中&#xff0c;withRouter 是一个函数&#xff0c;用于与路由相关的组件。它接受一个组件作为参数&…...

小程序 样式 WXSS

文章目录 样式 WXSS尺⼨单位样式导⼊选择器⼩程序中使⽤less 样式 WXSS WXSS( WeiXin Style Sheets )是⼀套样式语⾔&#xff0c;⽤于描述 WXML 的组件样式。 与 CSS 相⽐&#xff0c;WXSS 扩展的特性有&#xff1a; 响应式⻓度单位 rpx样式导⼊ 尺⼨单位 rpx &#xff08;…...

LLM之RAG实战(二十一)| 使用LlamaIndex的Text2SQL和RAG的功能分析产品评论

亚马逊和沃尔玛等电子商务平台上每天都有大量的产品评论&#xff0c;这些评论是反映消费者对产品情绪的关键接触点。但是&#xff0c;企业如何从庞大的数据库获得有意义的见解&#xff1f; 我们可以使用LlamaIndex将SQL与RAG&#xff08;Retrieval Augmented Generation&#x…...

Scikit-learn (sklearn)速通 -【莫凡Python学习笔记】

视频教程链接&#xff1a;【莫烦Python】Scikit-learn (sklearn) 优雅地学会机器学习 视频教程代码 scikit-learn官网 莫烦官网学习链接 本人matplotlib、numpy、pandas笔记 1 为什么学习 Scikit learn 也简称 sklearn, 是机器学习领域当中最知名的 python 模块之一. Sk…...

支持向量机(SVM)详解

支持向量机&#xff08;support vector machines&#xff0c;SVM&#xff09;是一种二分类模型。它的基本模型是定义在特征空间上的间隔最大的线性分类器&#xff0c;间隔最大使它有别于感知机。 1、线性可分支持向量机与硬间隔最大化 1.1、线性可分支持向量机 考虑一个二分…...

huggingface学习|云服务器部署Grounded-Segment-Anything:bug总会一个一个一个一个又一个的解决的

文章目录 一、环境部署&#xff08;一&#xff09;模型下载&#xff08;二&#xff09;环境配置&#xff08;三&#xff09;库的安装 二、运行&#xff08;一&#xff09; 运行grounding_dino_demo.py文件&#xff08;二&#xff09;运行grounded_sam_demo.py文件&#xff08;三…...

【最佳实践】Go 组合模式对业务解耦

在 Go 语言中&#xff0c;组合模式&#xff08;Composition&#xff09;是通过嵌入结构体&#xff08;embedding structs&#xff09;来实现的。它允许我们构建复杂的对象&#xff0c;通过将简单对象组合成树形结构来表示整个部分的层次结构。在 Go 中&#xff0c;这种模式不仅…...

arm 汇编调用C

arm64 汇编调用C函数 main.s .section .text .globl main main:stp x29, x30, [sp, -16]! //store fp x29 lr x30mov x0, #0mov x1, #1bl addmov x1, x0 // x0 return ldp x29, x30, [sp], 16 //restore fp lrretadd.c #include <stdio.h> int add(int a, int…...

Vue3+Vite使用Puppeteer进行SEO优化(SSR+Meta)

1. 背景 【笑小枫】https://www.xiaoxiaofeng.com上线啦 资源持续整合中&#xff0c;程序员必备网站&#xff0c;快点前往围观吧~ 我的个人博客【笑小枫】又一次版本大升级&#xff0c;虽然知道没有多少访问量&#xff0c;但我还是整天没事瞎折腾。因为一些功能在Halo上不太好实…...

uni-app学习与快速上手

文章目录 一、uni-app二、学习与快速上手三、案例四、常见问题五、热门文章 一、uni-app uni-app是一种基于Vue.js开发框架的跨平台应用开发框架&#xff0c;可以用于同时开发iOS、Android、H5和小程序等多个平台的应用。uni-app的设计理念是一套代码可以编译到多个平台运行&a…...

orchestrator介绍3.4 web API 的使用

目录 使用 web API API使用简单举例 查看所有的API 实例 JSON 详解 API使用举例 使用 web API orchestrator提供精心设计的 Web API。 敏锐的 Web 开发人员会注意到&#xff08;通过Firebug or Developer Tools&#xff09;Web 界面如何完全依赖于 JSON API 请求。 开发人员可…...

市场复盘总结 20240122

仅用于记录当天的市场情况&#xff0c;用于统计交易策略的适用情况&#xff0c;以便程序回测 短线核心&#xff1a;不参与任何级别的调整&#xff0c;采用龙空龙模式 昨日主题投资 连板进级率 6/39 15.3% 二进三&#xff1a; 进级率低 0% 最常用的二种方法&#xff1a; 方法…...

TCP 三次握手 四次挥手以及滑动窗口

TCP 三次握手 简介&#xff1a; TCP 是一种面向连接的单播协议&#xff0c;在发送数据前&#xff0c;通信双方必须在彼此间建立一条连接。所谓的 “ 连接” &#xff0c;其实是客户端和服务器的内存里保存的一份关于对方的信息&#xff0c;如 IP 地址、端口号等。 TCP 可以…...

yum指令——Linux的软件包管理器

. 个人主页&#xff1a;晓风飞 专栏&#xff1a;数据结构|Linux|C语言 路漫漫其修远兮&#xff0c;吾将上下而求索 文章目录 什么是软件包yum指令1.yum 是什么&#xff1f;2.Linux系统&#xff08;Centos&#xff09;的生态 3.yum的相关操作安装卸载yum的相关操作小结 软件源安…...

【WPF.NET开发】​规划WPF应用程序性能

本文内容 对各种场景进行考虑定义目标了解平台使性能优化成为一个迭代过程构建图形丰富性 能否成功实现性能目标取决于如何制定性能策略。 规划是开发任何产品的第一阶段。 本主题介绍一些非常简单的规则&#xff0c;用于开发良好的性能策略。 1、对各种场景进行考虑 场景可…...

Ubuntu22.04报错:ValueError: the symlink /usr/bin/python3 does not point to ...

目录 一、背景 二、如何解决呢&#xff1f; 三、解决步骤 1. 确定可用的 Python 版本 2. 重新设置符号链接 3. 选择默认版本 4. 验证&#xff1a; 四、update-alternatives 详解 1. 命令语法 2. 常用选项 --install添加备选项。 --config&#xff1a;选择默认版本。 …...

Debian系统简介

目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版&#xff…...

DAY 47

三、通道注意力 3.1 通道注意力的定义 # 新增&#xff1a;通道注意力模块&#xff08;SE模块&#xff09; class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...

高危文件识别的常用算法:原理、应用与企业场景

高危文件识别的常用算法&#xff1a;原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件&#xff0c;如包含恶意代码、敏感数据或欺诈内容的文档&#xff0c;在企业协同办公环境中&#xff08;如Teams、Google Workspace&#xff09;尤为重要。结合大模型技术&…...

OpenLayers 分屏对比(地图联动)

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能&#xff0c;和卷帘图层不一样的是&#xff0c;分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

Rapidio门铃消息FIFO溢出机制

关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系&#xff0c;以下是深入解析&#xff1a; 门铃FIFO溢出的本质 在RapidIO系统中&#xff0c;门铃消息FIFO是硬件控制器内部的缓冲区&#xff0c;用于临时存储接收到的门铃消息&#xff08;Doorbell Message&#xff09;。…...

JAVA后端开发——多租户

数据隔离是多租户系统中的核心概念&#xff0c;确保一个租户&#xff08;在这个系统中可能是一个公司或一个独立的客户&#xff09;的数据对其他租户是不可见的。在 RuoYi 框架&#xff08;您当前项目所使用的基础框架&#xff09;中&#xff0c;这通常是通过在数据表中增加一个…...

CSS设置元素的宽度根据其内容自动调整

width: fit-content 是 CSS 中的一个属性值&#xff0c;用于设置元素的宽度根据其内容自动调整&#xff0c;确保宽度刚好容纳内容而不会超出。 效果对比 默认情况&#xff08;width: auto&#xff09;&#xff1a; 块级元素&#xff08;如 <div>&#xff09;会占满父容器…...

虚拟电厂发展三大趋势:市场化、技术主导、车网互联

市场化&#xff1a;从政策驱动到多元盈利 政策全面赋能 2025年4月&#xff0c;国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》&#xff0c;首次明确虚拟电厂为“独立市场主体”&#xff0c;提出硬性目标&#xff1a;2027年全国调节能力≥2000万千瓦&#xff0…...

从物理机到云原生:全面解析计算虚拟化技术的演进与应用

前言&#xff1a;我的虚拟化技术探索之旅 我最早接触"虚拟机"的概念是从Java开始的——JVM&#xff08;Java Virtual Machine&#xff09;让"一次编写&#xff0c;到处运行"成为可能。这个软件层面的虚拟化让我着迷&#xff0c;但直到后来接触VMware和Doc…...

全面解析数据库:从基础概念到前沿应用​

在数字化时代&#xff0c;数据已成为企业和社会发展的核心资产&#xff0c;而数据库作为存储、管理和处理数据的关键工具&#xff0c;在各个领域发挥着举足轻重的作用。从电商平台的商品信息管理&#xff0c;到社交网络的用户数据存储&#xff0c;再到金融行业的交易记录处理&a…...