在 Hive 中将表存储为不同的格式,主要分为文件级格式(ORC, Parquet)和表级格式/数据湖格式(Iceberg, Hudi, Paimon, Delta Lake)两类。
1. 文件级格式 (ORC, Parquet)
这是 Hive 最基础的存储方式,直接在 CREATE TABLE 时通过 STORED AS 指定。
| 格式 | 特点 | 创建语法 |
| ORC | Hive 原生格式,压缩比极高,支持向量化读取和 ACID 事务。 | CREATE TABLE table_name (...) STORED AS ORC; |
| Parquet | 跨平台兼容性最好(Spark/Impala/Flink),适合嵌套数据。 | CREATE TABLE table_name (...) STORED AS PARQUET; |
2. 数据湖格式 (Iceberg, Hudi, Paimon, Delta Lake)
这类格式不仅是文件,还包含了一层元数据管理。在 Hive 中使用它们通常需要通过 StorageHandler 插件。
Apache Iceberg
Iceberg 在 Hive 4.0+ 中已内置支持,低版本需手动引入 iceberg-hive-runtime.jar。
-
创建语法:
CREATE TABLE table_iceberg (id INT, name STRING) STORED BY 'org.apache.iceberg.mr.hive.HiveIcebergStorageHandler' TBLPROPERTIES ('table_type'='ICEBERG');
Apache Hudi
Hudi 提供了专门的 HoodieParquetStorageHandler。它在处理 Upsert(更新)场景时表现优异。
-
创建语法:
CREATE EXTERNAL TABLE table_hudi (id INT, name STRING) STORED BY 'org.apache.hudi.hadoop.HoodieParquetStorageHandler' LOCATION '/path/to/hudi_data';
Apache Paimon
Paimon 针对流式写入(如 Flink CDC 入湖)做了极致优化。
-
创建语法:
CREATE TABLE table_paimon (id INT, name STRING) STORED BY 'org.apache.paimon.hive.PaimonStorageHandler';
Delta Lake
Delta Lake 与 Spark 绑定较深,在 Hive 中主要通过生成 Manifest 文件来读取,或使用特定的 Connector。
-
创建语法(需环境支持 Delta 插件):
CREATE TABLE table_delta (id INT, name STRING) STORED BY 'io.delta.hive.DeltaStorageHandler' LOCATION '/path/to/delta_table';
总结对比与选型建议
| 维度 | ORC / Parquet | Iceberg | Hudi | Paimon |
| 管理粒度 | 文件夹级(物理路径) | 表级(元数据快照) | 记录级(日志合并) | LSM 树(流式合并) |
| 核心优势 | 稳定、零外部依赖 | 模式演进、引擎通用性 | 高效更新 (Upsert) | Flink 实时入湖性能 |
| 查询性能 | 离线计算极快 | 大表元数据过滤极快 | 增量读取性能好 | 适合流批一体查询 |
| 小文件处理 | 需手动补丁/任务 | 自动 Compaction | 自动合并 | 自动压缩 |
操作贴士:
-
Jar 包依赖:对于 Iceberg/Hudi/Paimon,必须先将对应的
runtime-jar放入 Hive 的auxlib目录或在会话中ADD JAR。 -
Hive 版本:建议使用 Hive 3.1.2 或 Hive 4.0 以上版本,低版本对数据湖格式的支持非常有限且配置复杂。

浙公网安备 33010602011771号