Hive数仓操作(十七)

news2024/11/29 13:42:50

一、Hive的存储

一、Hive 四种存储格式

在 Hive 中,支持四种主要的数据存储格式,每种格式有其特点和适用场景,不过一般只会使用TextORC

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)

  1. 查询性能
    • 当查询需要满足条件的一整行数据时,行存储具有优势。只需找到一个值,其余的值都存储在相邻的位置,可以快速访问。

2. 列存储的特点(ORC)

  1. 数据读取效率
    • 在查询仅需要少数几个字段时,列存储能显著减少读取的数据量,因为每个字段的数据聚集存储。
  2. 数据类型一致性
    • 每个字段的数据类型相同,这使得列式存储能够针对性地设计更高效的压缩算法,优化存储空间。

三、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:指定存储文件的格式(加 TEXTFILEORC、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");

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

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

相关文章

Leetcode—763. 划分字母区间【中等】

2024每日刷题&#xff08;175&#xff09; Leetcode—763. 划分字母区间 C实现代码 class Solution { public:vector<int> partitionLabels(string s) {int rightmost[26];int l 0;int r 0;for(int i 0; i < s.length(); i) {rightmost[s[i] - a] i;}vector<…

强化学习笔记之【DDPG算法】

强化学习笔记之【DDPG算法】 文章目录 强化学习笔记之【DDPG算法】前言&#xff1a;原论文伪代码DDPG算法DDPG 中的四个网络代码核心更新公式 前言&#xff1a; 本文为强化学习笔记第二篇&#xff0c;第一篇讲的是Q-learning和DQN 就是因为DDPG引入了Actor-Critic模型&#x…

虚拟电厂可视化:智能能源管理新时代

通过图扑可视化技术&#xff0c;全方位展示虚拟电厂的运行状态&#xff0c;优化能源生产与消耗&#xff0c;提高电网效率和稳定性&#xff0c;实现智能能源管理。

第十一篇——鸡兔同笼:方程这个数学工具为什么很强大?

目录 一、背景介绍二、思路&方案三、过程1.思维导图2.文章中经典的句子理解3.学习之后对于投资市场的理解4.通过这篇文章结合我知道的东西我能想到什么&#xff1f; 四、总结五、升华 一、背景介绍 数学的伟大思想&#xff1b;不仅仅是我们解决了某一个具体问题&#xff1…

TIBCO Jaspersoft Studio 创建数据源并进行测试

1、连接数据源&#xff1a; 右键Data Adapters &#xff0c;然后新建 根自己的情况&#xff0c;进行创建&#xff0c;这里测试用的是excel表格。 2、新建Jasper Report&#xff0c;然后我们选择刚刚创建的数据源 这样report就建好了&#xff0c;然后我们进行测试。 3、先把不…

永旺梦乐城盛大开业,3300个停车位的智慧运营管理系统上线!

长沙首家&#xff01; 永旺梦乐城 9月12日正式开业&#xff01; 这座融合特色餐饮、娱乐体验的商场&#xff0c; 将为长沙消费者带来&#xff0c; 超越传统商业综合体的全新体验。 开业当日&#xff0c;占地1.3万平方米的永旺超市人声鼎沸&#xff0c;顾客络绎不绝&#x…

使用Java调用OpenAI API并解析响应:详细教程

使用Java调用OpenAI API并解析响应&#xff1a;详细教程 在现代应用程序中&#xff0c;API调用是一个非常常见的任务。本文将通过一个完整的示例&#xff0c;讲解如何使用Java调用OpenAI的ChatGPT API&#xff0c;并通过ObjectMapper处理JSON响应。本文的示例不仅适用于OpenAI…

红米Turbo 3工程固件预览 修复底层 体验原生态系统 默认开启diag端口

红米Turbo 3机型代码:peridot 国外版本:POCO F6 用于以下型号的小米机型:24069RA21C, 24069PC21G, 24069PC21I。搭载1.5K OLED屏、骁龙8s处理器、5000mAh电池+90W快充、5000万像素主摄。 通过博文了解 1💝💝💝-----此机型工程固件的资源刷写注意事项 2💝💝�…

探索MinimalModbus:Python中强大的Modbus通信库

文章目录 **探索MinimalModbus&#xff1a;Python中强大的Modbus通信库**一、背景介绍&#xff1a;为什么选择MinimalModbus&#xff1f;二、MinimalModbus是什么&#xff1f;三、如何安装MinimalModbus&#xff1f;四、MinimalModbus的基本使用4.1 读取寄存器4.2 写入寄存器4.…

【平方差 / C】

题目 思路 打表找规律 枚举小区间对于判断要妥协&#xff0c;我这里选取100内的x, y #include <bits/stdc.h> using namespace std; bool st[120]; int main() {for(int i 1; i < 100; i){for(int x 0; x < 100; x ){for(int y 0; y < 100; y){if(!st[i])i…

关于Zipf定律与TF—IDF的一个实践

在这篇文章中&#xff0c;我将通过机器学习中的线性回归来计算zipf定律中一个经验常数alpha&#xff0c;还会画TF-IDF的图像&#xff0c;此外还将简单介绍下与zipf、TF-IDF有关的知识。 在之前的一篇文章中我曾介绍过TF-IDF&#xff0c;但之后我又阅读了Ricardo Baeza-Yates和…

我开发了一个出海全栈SaaS工具,还写了一套全栈开发教程

先上目录思维导图&#x1f447; 大家好&#xff0c;我是程普。 前段时间&#xff0c;我发布了第一个出海产品 PH Copilot&#xff0c;是一个基于 Plasmo 开发的 Chrome 插件和 Next.js 开发的落地页与服务端的全栈产品。 现在我把这个产品的完整实现写成系统性教程&#xff0…

强化学习笔记之【Q-learning算法和DQN算法】

强化学习笔记&#xff08;一&#xff09;——Q-learning和DQN算法核心公式 文章目录 强化学习笔记&#xff08;一&#xff09;——Q-learning和DQN算法核心公式前言&#xff1a;Q-learning算法DQN算法 前言&#xff1a; 强化学习领域&#xff0c;繁冗复杂的大段代码里面&#…

华为平板与非华为电脑多屏协同及Bug处理

本文参考B站空降猫咪、鱼翅2002、知乎奔跑的小牛、夏风微微等博主。 电脑版本型号&#xff1a;拯救者Y7000&#xff0c;核显3050Ti,无集成显卡 平板版本型号&#xff1a;华为matepad pro解决办法&#xff1a; 下载空降猫咪的安装器PCManagerInstaller_20230801 CSDN下载链接 …

Redis中BitMap实现签到与统计连续签到功能

服务层代码 //签到Overridepublic Result sign() {//1.获取当前登录的用户Long userId UserHolder.getUser().getId();//获取日期LocalDateTime now LocalDateTime.now();//拼接keyString keySuffix now.format(DateTimeFormatter.ofPattern(":yyyyMM"));String …

网页打不开、找不到服务器IP地址

现象&#xff1a;网络连接ok&#xff0c;软件能正常使用&#xff0c;当网页打不开。 原因&#xff1a;DNS 配置错误导致网站域名无法正确解析造成。 影响DNS设置的&#xff1a;VPN软件、浏览器DNS服务选择、IPv4属性被修改。 1、VPN代理未关闭 2、浏览器DNS解析选择 3、以太…

华为eNSP:端口隔离

一&#xff0c;什么是端口隔离 端口隔离是一种网络配置技术&#xff0c;用于将不同的网络设备或用户隔离在不同的虚拟局域网&#xff08;VLAN&#xff09;中&#xff0c;以实现网络流量的隔离和安全性提升。通过在交换机或路由器上配置端口隔离&#xff0c;可以将连接到同一设…

原来大模型训练实战,是需要这些项目!!

去年侧重大模型和GPT的原理&#xff0c;今年就侧重项目实战了。找到的这个合集不仅收集了大模型训练实战&#xff0c;还有微调实战&#xff0c;分布式训练&#xff0c;真的很全。 下面汇总了我在大模型实践中训练相关的所有教程。从6B到65B&#xff0c;从全量微调到高效微调(L…

【AIGC】2021-arXiv-LoRA:大型语言模型的低秩自适应

2021-arXiv-LoRA: Low-Rank Adaptation of Large Language Models LoRA&#xff1a;大型语言模型的低秩自适应摘要1. 引言2. 问题陈述3. 现有的解决方案还不够好吗&#xff1f;4. 我们的方法4.1 低秩参数化更新矩阵4.2 将 LORA 应用于 Transformer 5. 实证实验5.1 基线5.2 ROBE…

常用组件详解(十):保存与加载模型、检查点机制的使用

文章目录 1.保存、加载模型2.torch.nn.Module.state_dict()2.1基本使用2.2保存和加载状态字典 3.创建Checkpoint3.1基本使用3.2完整案例 1.保存、加载模型 torch.save()用于保存一个序列化对象到磁盘上&#xff0c;该序列化对象可以是任何类型的对象&#xff0c;包括模型、张量…