hive 创建外部表和内部表 如何指定 ORC/Parquet 存储方式
在Hive中创建内部表和外部表时,可通过STORED AS子句指定ORC或Parquet列式存储格式,同时需区分两者的数据管理机制。以下是具体语法和场景说明:
一、内部表(Managed Table)
特点:Hive全权管理数据,删除表时会同时删除元数据和HDFS数据。
创建语法(以ORC为例):
CREATE TABLE internal_table (
id INT,
name STRING
)
STORED AS ORC; -- 指定ORC格式
-- 可选添加压缩设置:TBLPROPERTIES ("orc.compress"="SNAPPY")
创建语法(以Parquet为例):
CREATE TABLE internal_parquet ( id INT, name STRING ) STORED AS PARQUET; -- 指定Parquet格式
🟢 二、外部表(External Table)
特点:仅管理元数据,删除表时只删除表定义,HDFS数据保留。需用EXTERNAL关键字和LOCATION指定数据路径。
创建语法(ORC格式):
CREATE EXTERNAL TABLE external_table ( id INT, name STRING ) STORED AS ORC LOCATION '/user/hive/external_table'; -- 指定HDFS数据目录
创建语法(Parquet格式):
CREATE EXTERNAL TABLE external_parquet ( id INT, name STRING ) STORED AS PARQUET LOCATION '/user/hive/external_parquet';
⚠️ 三、关键区别与注意事项
数据生命周期
内部表:删除表 → 数据连带删除
外部表:删除表 → 仅删元数据,HDFS数据保留
存储格式优势
ORC/Parquet:列式存储,支持高效压缩(Snappy/Zlib)、谓词下推(跳过无关数据块)、向量化查询。
ORC特性:内置轻量级索引(加速查询);
Parquet特性:更适合嵌套数据结构(如JSON)。
使用场景
内部表:临时表或可丢弃的中间表;
外部表:底层数据仓库(防误删)、共享HDFS数据(如Spark/Flink共用)。
🔧 四、扩展设置
添加表属性(如压缩算法):
CREATE TABLE ... STORED AS ORC
TBLPROPERTIES ("orc.compress"="ZLIB"); -- 使用ZLIB压缩
分区表示例(外部表+Parquet):
sql
Copy Code
CREATE EXTERNAL TABLE logs (
log_time TIMESTAMP,
message STRING
)
PARTITIONED BY (dt STRING) -- 按日期分区
STORED AS PARQUET
LOCATION '/data/logs/';
💡 总结:通过STORED AS指定列式格式,结合EXTERNAL和LOCATION区分表类型。ORC/Parquet显著提升查询效率,外部表保障数据安全,适合生产环境核心数据层。
自动化学习。

浙公网安备 33010602011771号