hive怎么建立表存储格式

发布时间:2021-07-29 19:32:19 作者:chen
来源:亿速云 阅读:236
# Hive怎么建立表存储格式

## 目录
1. [Hive表存储格式概述](#hive表存储格式概述)
2. [常见的存储格式对比](#常见的存储格式对比)
   - [TextFile](#textfile)
   - [SequenceFile](#sequencefile)
   - [RCFile](#rcfile)
   - [ORCFile](#orcfile)
   - [Parquet](#parquet)
3. [创建不同存储格式表的语法](#创建不同存储格式表的语法)
   - [TextFile格式](#textfile格式)
   - [SequenceFile格式](#sequencefile格式)
   - [RCFile格式](#rcfile格式)
   - [ORCFile格式](#orcfile格式)
   - [Parquet格式](#parquet格式)
4. [存储格式选择建议](#存储格式选择建议)
5. [性能优化技巧](#性能优化技巧)
6. [实际应用案例](#实际应用案例)
7. [常见问题解答](#常见问题解答)

## Hive表存储格式概述

Hive作为Hadoop生态系统中的数据仓库工具,支持多种数据存储格式。存储格式的选择直接影响查询性能、存储空间利用率和数据读写效率。Hive的表存储格式决定了数据在HDFS上的物理组织方式,不同的格式有不同的特点和适用场景。

在Hive中,存储格式主要通过`STORED AS`子句指定,同时可以结合`ROW FORMAT`、`SERDE`等参数进行更精细的控制。选择合适的存储格式可以显著提升Hive作业的执行效率,有时性能差异可达数倍甚至数十倍。

## 常见的存储格式对比

### TextFile
**特点**:
- 默认存储格式
- 纯文本形式存储
- 可读性强,可直接查看内容
- 不支持块压缩(只能文件级别压缩)

**适用场景**:
- 数据交换
- 临时数据存储
- 需要人工查看原始数据的场景

### SequenceFile
**特点**:
- 二进制键值对存储格式
- 支持块压缩
- 可分割(splitable)
- 比TextFile更紧凑

**适用场景**:
- 需要中间存储的MapReduce作业
- 小文件合并

### RCFile
**特点**:
- 行列混合存储(Record Columnar File)
- 先按行分组,再按列存储
- 压缩比高
- 支持向量化查询

**适用场景**:
- 需要列式存储但Hive版本较旧的场景
- 查询只涉及部分列的情况

### ORCFile
**特点**:
- 优化的行列式存储(Optimized RC)
- 支持ACID操作
- 内置轻量级索引(min/max/bloom filter)
- 压缩比极高
- 支持谓词下推

**适用场景**:
- Hive主要推荐格式
- 大数据量分析场景
- 需要事务支持的场景

### Parquet
**特点**:
- 列式存储格式
- 特别适合嵌套数据结构
- 跨生态支持(Spark/Flink等)
- 优秀的压缩性能

**适用场景**:
- 跨平台数据共享
- 嵌套数据结构处理
- Spark等生态系统中使用

## 创建不同存储格式表的语法

### TextFile格式
```sql
CREATE TABLE textfile_table (
  id INT,
  name STRING,
  value DOUBLE
)
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY '\t'
STORED AS TEXTFILE;

SequenceFile格式

CREATE TABLE sequencefile_table (
  id INT,
  name STRING,
  value DOUBLE
)
STORED AS SEQUENCEFILE;

RCFile格式

CREATE TABLE rcfile_table (
  id INT,
  name STRING,
  value DOUBLE
)
STORED AS RCFILE;

ORCFile格式

基础创建:

CREATE TABLE orc_table (
  id INT,
  name STRING,
  value DOUBLE
)
STORED AS ORC;

带压缩设置:

CREATE TABLE orc_compressed_table (
  id INT,
  name STRING,
  value DOUBLE
)
STORED AS ORC
TBLPROPERTIES ("orc.compress"="SNAPPY");

Parquet格式

基础创建:

CREATE TABLE parquet_table (
  id INT,
  name STRING,
  value DOUBLE
)
STORED AS PARQUET;

带压缩设置:

CREATE TABLE parquet_compressed_table (
  id INT,
  name STRING,
  value DOUBLE
)
STORED AS PARQUET
TBLPROPERTIES ("parquet.compression"="GZIP");

存储格式选择建议

  1. 默认选择:新项目优先考虑ORC或Parquet
  2. 兼容性需求:跨平台使用优先选择Parquet
  3. 更新频繁:需要ACID支持选择ORC
  4. 嵌套数据:复杂JSON结构选择Parquet
  5. 临时数据:中间结果可使用TextFile或SequenceFile
  6. 压缩需求:ORC和Parquet都支持多种压缩算法

性能优化技巧

  1. 压缩算法选择

    • ZLIB:高压缩比,但CPU开销大
    • SNAPPY:平衡选择,推荐默认使用
    • LZO:需要额外安装,但性能不错
  2. ORC特定优化

    SET hive.exec.orc.default.compress=ZLIB;
    SET hive.exec.orc.default.block.size=268435456; -- 256MB
    SET hive.optimize.index.filter=true; -- 启用索引过滤
    
  3. Parquet特定优化

    SET parquet.block.size=268435456; -- 256MB块大小
    SET parquet.compression=SNAPPY;
    SET hive.parquet.filter.pushdown=true;
    
  4. 通用优化

    • 合理设置文件大小(通常256MB-1GB)
    • 对常用查询列建立合适的索引
    • 分区和分桶结合存储格式使用

实际应用案例

电商日志分析场景

-- 创建ORC格式的分区表
CREATE TABLE user_behavior (
  user_id BIGINT,
  item_id BIGINT,
  behavior_type STRING,
  timestamp BIGINT
)
PARTITIONED BY (dt STRING)
STORED AS ORC
TBLPROPERTIES ("orc.compress"="SNAPPY");

-- 添加分区
ALTER TABLE user_behavior ADD PARTITION (dt='2023-01-01');

物联网传感器数据

-- 创建Parquet格式表处理嵌套数据
CREATE TABLE sensor_data (
  device_id STRING,
  location STRUCT<lat:DOUBLE, lon:DOUBLE>,
  readings ARRAY<STRUCT<time:TIMESTAMP, value:DOUBLE>>,
  metadata MAP<STRING,STRING>
)
STORED AS PARQUET;

常见问题解答

Q1: 如何查看现有表的存储格式?

DESCRIBE FORMATTED table_name;
-- 在输出结果中查找"Storage DescParams"部分

Q2: 能否修改已有表的存储格式? 可以,但需要通过CTAS(Create Table As Select)方式:

CREATE TABLE new_orc_table STORED AS ORC AS SELECT * FROM old_table;

Q3: ORC和Parquet的主要区别是什么? - ORC是Hive原生格式,对Hive集成更好 - Parquet更适合嵌套数据和跨平台场景 - ORC支持ACID,Parquet不支持

Q4: 存储格式会影响Hive SQL语法吗? 不会,所有格式都支持相同的SQL语法,只是底层实现效率不同

Q5: 小文件问题如何解决? - 使用ORC/Parquet格式 - 配置合适的文件大小 - 定期执行合并操作:

  SET hive.merge.smallfiles.avgsize=128000000;
  SET hive.merge.size.per.task=256000000;
  SET hive.exec.dynamic.partition.mode=nonstrict;

通过合理选择和使用Hive表存储格式,可以显著提升大数据处理效率。建议在实际项目中根据具体场景进行基准测试,选择最适合的存储方案。 “`

推荐阅读:
  1. Hive的存储格式对比
  2. HIVE数据类型及存储格式

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

hive

上一篇:Linux系统开机启动过程介绍

下一篇:c++类模板和函数模板的区别是什么

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》