向Hive外部表执行INSERT INTO是否会同步写入底层HDFS数据集?
问题解答
当你对映射到HDFS路径/dev/customer/customer_main/的ORC格式Hive外部表customer_main执行INSERT INTO customer_main VALUES()语句时,插入的行数据会直接追加到该HDFS路径对应的数据集里,绝非仅局限在Hive表内部。
原因如下:
- Hive外部表的核心设计就是元数据与实际数据存储解耦:表本身只是Hive元数据中记录的一个映射关系,实际数据完全存储在你指定的HDFS路径中。
INSERT INTO是追加写入操作,Hive会在/dev/customer/customer_main/路径下生成新的ORC数据文件(或根据配置追加到现有文件),数据直接落地到对应的HDFS目录,和你手动往该目录上传ORC文件的效果一致。
补充说明:外部表和内部表的核心差异在于删除操作——删除外部表只会清除Hive中的元数据记录,不会删除HDFS上的实际数据;而内部表删除时会同时删除元数据和对应HDFS路径的数据。但在写入数据时,两者都会将数据写入到各自关联的HDFS路径中,外部表就是写入你指定的/dev/customer/customer_main/。
内容的提问来源于stack exchange,提问作者Sudipto Dutta
相关产品推荐
相关产品推荐

