Hive数仓操作(十七)
一、Hive的存储
一、Hive 四种存储格式
在 Hive 中,支持四种主要的数据存储格式,每种格式有其特点和适用场景,不过一般只会使用Text 和 ORC :
1. Text
- 说明:Hive 的默认存储格式。
- 存储方式:行存储。
- 优点:简单易用,可以通过
LOAD DATA直接加载数据。 - 缺点:占用空间较大,读取和解析速度较慢。
2. Sequence
- 说明:以序列格式存储数据。
- 存储方式:行存储,使用键值对(key-value)方式存储数据。
- 优点:在某些情况下支持高效的压缩。
- 缺点:占用空间比 Text 格式要大。
3. RC (Record Columnar)
- 说明:由 Facebook 创建的一种列存储格式。
- 存储方式:列存储,采用懒加载存储和管理数据。
- 优点:对每一行的数据进行单独压缩;查询时只读取需要的数据,提高查询速度。
- 缺点:相较于 Text 格式,导入数据不够方便。
4. ORC (Optimized Row Columnar)
- 说明:在公司工作中使用最广泛的存储格式,是 RC 的优化版本。
- 存储方式:列存储,具备懒加载特点。
- 优点:优化了文件的压缩和存储,查询性能非常高。
- 缺点:同样不支持直接使用
LOAD DATA导入。
注意事项
- 对于 Sequence、RC 和 ORC 格式,不能直接使用
LOAD DATA命令导入数据。需要先将数据导入到一个 Text 格式的表中,再使用INSERT OVERWRITE TABLE的方式将数据复制到目标表中。
二、Hive 行列存储

1. 行存储的特点(TEXT)
- 查询性能:
- 当查询需要满足条件的一整行数据时,行存储具有优势。只需找到一个值,其余的值都存储在相邻的位置,可以快速访问。
2. 列存储的特点(ORC)
- 数据读取效率:
- 在查询仅需要少数几个字段时,列存储能显著减少读取的数据量,因为每个字段的数据聚集存储。
- 数据类型一致性:
- 每个字段的数据类型相同,这使得列式存储能够针对性地设计更高效的压缩算法,优化存储空间。
三、Hive 压缩格式
1. TEXTFILE
- 压缩算法:可使用 Gzip、Bzip2 等压缩算法。
- 适用场景:适合需要频繁导入和导出的小数据量表格,压缩时一般使用 Gzip 在上传HDFS前压缩。
2. ORC
- 默认压缩:ORC 格式通常使用 Zlib 压缩。如果使用其他压缩格式,可能会导致 ORC 文件实际存储空间增大。
- 适用场景:适合处理非常大的数据集。ORC 格式的读取速度通常较快,默认使用 Zlib 进行压缩,效果优于 Snappy,一般建表时进行压缩。
压缩示例
以下是一个使用 ORC 格式创建 Hive 表的示例:
CREATE TABLE IF NOT EXISTS emp_orc_ys (empno INT,ename STRING,job STRING,mgr INT,hiredate STRING,sal FLOAT,comm FLOAT,deptno INT
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t' -- 使用制表符作为字段分隔符
STORED AS ORC
TBLPROPERTIES ("orc.compress" = "SNAPPY"); -- 改变默认压缩方式,使用 Snappy 压缩
四、Hive 建表手册
创建表的基本语法
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name (col1 type1,col2 type2,col3 type3,...colN typeN
)
[PARTITIONED BY (part_col1 part_type1, part_col2 part_type2, ...)]
[CLUSTERED BY (col_name1, col_name2, ...)]
[ROW FORMAT DELIMITED row_format]
[ROW FORMAT SERDE 'serde_name']
[FIELDS TERMINATED BY 'delimiter'] -- 指定字段分隔符
[COLLECTION ITEMS TERMINATED BY 'delimiter'] -- 用于数组、映射等
[MAP KEYS TERMINATED BY 'delimiter'] -- 用于映射
[STORED AS file_format]
[LOCATION 'hdfs_path']
[TBLPROPERTIES (compress)];
参数说明
-
EXTERNAL:可选,表示创建外部表。数据存储在外部位置,删除表时不会删除数据。 -
IF NOT EXISTS:可选,若表已经存在则不执行创建。
-
db_name.:可选,指定数据库名称。
-
table_name:表的名称。
-
col1, col2, … colN:列的名称和数据类型。
-
PARTITIONED BY:用于指定分区列及其数据类型。 -
CLUSTERED BY:指定分桶列,通常和分桶数量一起使用。 -
ROW FORMAT DELIMITED:指定行格式,通常用于定义分隔符等。 -
FIELDS TERMINATED BY:指定字段分隔符,例如FIELDS TERMINATED BY ','表示使用逗号作为分隔符。 -
COLLECTION ITEMS TERMINATED BY:如果表中包含数组或映射,指定集合项的分隔符。
-
MAP KEYS TERMINATED BY:指定映射键的分隔符。
-
ROW FORMAT SERDE:可以使用自定义的序列化和反序列化方法。
-
STORED AS:指定存储文件的格式(加TEXTFILE、ORC、SEQUENCEFILE等)。 -
LOCATION:指定表在 HDFS 上的存储路径。 -
TBLPROPERTIES:指定表在 HDFS 上的压缩方式。
示例
以下是多元复杂建表示例,创建一个包含数组和映射的 Hive 表:
CREATE EXTERNAL TABLE IF NOT EXISTS my_database.my_table (id INT,name STRING,age INT,scores ARRAY<INT>, -- 数组类型attributes MAP<STRING, STRING> -- 映射类型
)
PARTITIONED BY (country STRING)
CLUSTERED BY (id) INTO 10 BUCKETS
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
COLLECTION ITEMS TERMINATED BY '|'
MAP KEYS TERMINATED BY ':'
STORED AS ORC
LOCATION 'hdfs://hdfs_path/my_table/'
TBLPROPERTIES ("orc.compress" = "SNAPPY");
相关文章:
Hive数仓操作(十七)
一、Hive的存储 一、Hive 四种存储格式 在 Hive 中,支持四种主要的数据存储格式,每种格式有其特点和适用场景,不过一般只会使用Text 和 ORC : 1. Text 说明:Hive 的默认存储格式。存储方式:行存储。优点…...
工业和自动化领域常见的通信协议
在工业和自动化领域,有多种常见的通信协议,主要用于设备间的通信、数据传输和控制。 Modbus: 类型:串行通信协议用途:广泛用于工业自动化设备间的通信,如PLC、传感器和执行器。优点:简单、开放且…...
连夜爆肝收藏各大云服务新老用户优惠活动入口地址(内含免费试用1个月的地址),适用于小白,大学生,开发者,小企业老板....
具体请前往:云服务器优惠活动入口大全--收藏各主流云厂商的云服务器等系列产品的优惠活动入口,免费试用1个月活动入口,让新老用户都能根据使用场景和身份快速锁定优惠权益 经济下滑,被优化增多,大学生就业难࿰…...
SpringBoot+Redis+RabbitMQ完成增删改查
各部分分工职责 RabbitMQ负责添加、修改、删除的异步操作 Redis负责数据的缓存 RabbitMQ里面角色职责简单描述 RabbitMQ里面有几个角色要先分清以及他们的对应关系: 交换机、队列、路由键 交换机和队列是一对多 队列和路由键是多对多 然后就是消息的发送者&…...
【系统集成中级】线上直播平台开发项目质量管理案例分析
【系统集成中级】线上直播平台开发项目质量管理案例分析 一、案例二、小林在项目质量管理中存在的问题(一)计划阶段缺失(二)测试用例编制与执行问题(三)质量管理流程问题(四)质量保证…...
浪潮信息领航边缘计算,推动AI与各行业深度融合
在9月20日于安徽盛大召开的浪潮信息边缘计算合作伙伴大会上,浪潮信息指出,未来的计算领域将全面融入AI技术,特别是在企业边缘侧,智能应用特别是生成式人工智能应用正在迅速普及,这一趋势正引领边缘计算向边缘智算的方向…...
Koa2项目实战3 (koa-body,用于处理 HTTP 请求中的请求体)
以用户注册接口为例,需要在请求里携带2个参数:用户名(user_name)和密码(password)。 开发者需要在接口端,解析出user_name 、password。 在使用Koa开发的接口中,如何解析出请求携带…...
复盘20241012
1、 classpath "com.android.tools.build:gradle:8.5.1" 的版本 与distributionUrlhttps\://services.gradle.org/distributions/gradle-8.9-bin.zip的对应规则: Execution failed for task :app:compileDebugKotlin. 解决方案 切换 setting --> ot…...
泊松流负载均衡控制
目录 泊松流负载均衡控制 一、到达率λ 二、服务率μ 三、泊松流负载均衡控制 泊松流负载均衡控制 在探讨泊松流负载均衡控制时,我们主要关注的是到达率λ和服务率μ这两个核心参数。以下是对这两个参数及其在泊松流负载均衡控制中作用的详细解释: 一、到达率λ 定义:…...
3D打印矫形器市场报告:未来几年年复合增长率CAGR为10.8%
3D 打印矫形器是指使用 3D 打印技术制作的定制外部支撑装置。它们有助于稳定、引导、缓解或纠正肌肉骨骼状况,并根据个体患者的解剖结构进行设计,通常使用 3D 扫描和建模技术。3D 打印在矫形器方面的主要优势是能够生产精确适合患者解剖结构的定制装置&a…...
Richtek立锜科技线性稳压器 (LDO) 选型
一、什么是LDO? LDO也可称为低压差线性稳压器,适合从较高的输入电压转换成较低输出电压的应用,这种应用的功率消耗通常不是很大,尤其适用于要求低杂讯、低电流和输入、输出电压差很小的应用环境。 二、LDO的特性 LDO透过控制线性区调整管…...
Leetcode 前 k 个高频元素
使用最小堆算法来解决这道题目:相当于有一个容量固定为K的教室,只能容纳 K 个人,学生们逐个逐个进入该教室,当教室容量达到K人之后,每次进入一个新的学生后,我们将分数最低的学生(类似本题中的频率最低元素…...
[LeetCode] 面试题01.02 判定是否互为字符重拍
题目描述: 给定两个由小写字母组成的字符串 s1 和 s2,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。 示例 1: 输入: s1 "abc", s2 "bca" 输出: true 示例 2&am…...
数据结构-4.5.KMP算法(旧版上)-朴素模式匹配算法的优化
朴素模式匹配算法最坏的情况: 一.实例: 第一轮匹配失败,开始下一轮的匹配: 不断的操作,最终匹配成功: 如上述图片所述,朴素模式匹配算法会导致时间开销增加, 优化思路:主…...
STM32 QSPI接口驱动GD/W25Qxx配置简要
STM32 QSPI接口GD/W25Qxx配置简要 📝本篇会具体涉及介绍Winbond(华邦)和GD(兆易创新) NOR flash相关型号指令差异。由于网络上可以搜索到很多相关QSPI相关知识内容,不对QSPI通讯协议做深度解析。 🔖首先确保所使用的ST…...
UCI-HAR数据集深度剖析:训练仿真与可视化解读
在本篇文章中,我们将深入探讨如何使用Python对UCI人类活动识别(HAR)数据集进行分割和预处理,以及运用模型网络CNN对数据集进行训练仿真和可视化解读。 一、UCI-HAR数据集分析及介绍 UCI-HAR数据集是一个公开的数据集,…...
牛客SQL练习详解 06:综合练习
牛客SQL练习详解 06:综合练习 SQL34 统计复旦用户8月练题情况SQL35 浙大不同难度题目的正确率SQL39 21年8月份练题总数 叮嘟!这里是小啊呜的学习课程资料整理。好记性不如烂笔头,今天也是努力进步的一天。一起加油进阶吧! SQL34 统…...
k8s apiserver高可用方案
目前官方推荐有 2 种方式部署k8s apiserver 高可用 keepalived and haproxy 部署有2种方式,一种是systemd管理的,另一种是pod形式,使用那种可以根据实际情况选择 服务部署 systemd方式 可以通过包管理工具安装,正常启动之后&…...
服务器数据恢复—硬盘坏扇区导致Linux系统服务器数据丢失的数据恢复案例
服务器数据恢复环境: 一台linux操作系统网站服务器,该服务器上部署了几十个网站,使用一块SATA硬盘。 服务器故障&原因: 服务器在工作过程中突然宕机。管理员尝试重新启动服务器失败,于是将服务器上的硬盘拆下检测…...
【多线程】多线程(12):多线程环境下使用哈希表
【多线程环境下使用哈希表(重点掌握)】 可以使用类:“ConcurrentHashMap” ★ConcurrentHashMap对比HashMap和Hashtable的优化点 1.优化了锁的粒度【最核心】 //Hashtable的加锁,就是直接给put,get等方法加上synch…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...
相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...
令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...
有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...
Linux 内存管理实战精讲:核心原理与面试常考点全解析
Linux 内存管理实战精讲:核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用,还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...
基于IDIG-GAN的小样本电机轴承故障诊断
目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) 梯度归一化(Gradient Normalization) (2) 判别器梯度间隙正则化(Discriminator Gradient Gap Regularization) (3) 自注意力机制(Self-Attention) 3. 完整损失函数 二…...
STM32HAL库USART源代码解析及应用
STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...
【Kafka】Kafka从入门到实战:构建高吞吐量分布式消息系统
Kafka从入门到实战:构建高吞吐量分布式消息系统 一、Kafka概述 Apache Kafka是一个分布式流处理平台,最初由LinkedIn开发,后成为Apache顶级项目。它被设计用于高吞吐量、低延迟的消息处理,能够处理来自多个生产者的海量数据,并将这些数据实时传递给消费者。 Kafka核心特…...
