Hive数仓操作(十七)

server/2024/10/8 9:13:44/

一、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.ppmy.cn/server/127776.html

相关文章

Kubernetes-使用不同主机终端访问k8s 集群。

2个重点 1、获取集群的CA证书。 2、获取经过这个CA认可的客户端证书以及客户端密钥。 3、通过kubectl 进行绑定,CA绑定集群 user绑定客户端 ,联合绑定为use-text. 一、获取 Kubernetes 集群的 CA 证书、客户端证书和客户端密钥 要获取 Kubernetes 集…

【HTML5】html5开篇基础(4)

1.❤️❤️前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; Hello, Hello~ 亲爱的朋友们&#x1f44b;&#x1f44b;&#xff0c;这里是E绵绵呀✍️✍️。 如果你喜欢这篇文章&#xff0c;请别吝啬你的点赞❤️❤️和收藏&#x1f4d6;&#x1f4d6;。如果你对我的…

用 Go 和 Redis 构建一个简单的任务管理系统

用 Go 和 Redis 构建一个简单的任务管理系统 在这篇博客中&#xff0c;我们将使用 Go 语言结合 Gin 框架和 Redis&#xff0c;一步步创建一个简单的任务管理系统。本系统可用于执行关键的 CRUD&#xff08;创建、读取、更新、删除&#xff09;操作&#xff0c;我们特别关注如何…

Apache POI 2024/10/2

导入Apache POI的maven坐标 通过POI向Excel文件写入文件内容 package com.sky.test;import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook;import java.io.File; import java.…

Qt day1登录界面设计

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);this->setWindowIcon(QIcon("D:/icon_图标/icon_6j5ninlne8f/xiaoxi.png"));this->setWindowT…

如何使用ssm实现基于SSM的宠物服务平台的设计与实现+vue

TOC ssm779基于SSM的宠物服务平台的设计与实现vue 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大&#xff0c;随着当前时代的信息化&#xff0c;科学化发展&#xff0c;让社会各行业领域都争相使用新的信息技术&#xff0c;对行业内的各种相关数据进行科学化&#x…

鸿蒙开发(NEXT/API 12)【硬件(传感器开发)】传感器服务

使用场景 Sensor Service Kit&#xff08;传感器服务&#xff09;使应用程序能够从传感器获取原始数据&#xff0c;并提供振感控制能力。 Sensor&#xff08;传感器&#xff09;模块是应用访问底层硬件传感器的一种设备抽象概念。开发者可根据传感器提供的相关接口订阅传感器…

[Redis][集群][下]详细讲解

目录 1.集群搭建(基于 Docker)2.主节点宕机1.宕机后会发生什么&#xff1f;2.处理流程1.故障判定2.故障迁移 3.集群扩容0.前言1.把新的主节点加入到集群2.重新分配slots3.给新的主节点添加从节点 1.集群搭建(基于 Docker) 拓扑结构如下&#xff1a; 创建目录和配置&#xff1…