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显著提升查询效率,外部表保障数据安全,适合生产环境核心数据层‌。

posted @ 2025-07-01 22:21  ARYOUOK  阅读(96)  评论(0)    收藏  举报