原链接:https://blog.csdn.net/shuaikang666/article/details/80357075
今天偶然间发现hive中一个我之前没有注意到的一个小细节(我怀疑你们之前也可能没有注意到):
那就是当我们试图从HDFS上导入数据到我们自己所创建的表中的时候
load data inpath '/xxx/xxx/test.txt' into table mytable;
发现原来存在于HDFS上的数据/xxx/xxx/test.txt 竟然消失不见了
我试图寻找它的一丝踪迹却发现它消失的无影无踪,它就像一个消失的爱人一样
于是乎查阅网上资料以及自己的动手实践发现:
原来它被移动到我们在hive中所创建的mytable下了,很神奇!我不知道设计hive的那群人为什么要这样搞,我想也许他们是想让我今晚写的博客有干货
【在没有指location时,hive load数据后将会搬移到缺省目录/user/hive/warehouse】
那么我们要想让HDFS上的数据不被移动而老老实实的待在原地踏步,该怎么办呢?
首先请允许我创建一个外部表
create external table if not exists outable(id int,name string)
row format delimited fields terminated by ' ,'
location '/mytable/';
然后我们从本地向 '/mytable/'中插入我们需要的数据
hadoop fs -put test.txt /mytable
然后这个test.txt就会存在于HDFS上的/mytable下
这时候我们就不用再load data inpath… (向outable插数据)
直接select * from outable;
就会显示出你想要的数据了
很神奇,有木有!
今天在做项目的时候突然想起来这个问题了,原来我之前创建的是hive内部表,内部表会由hive自身来管理这些数据
当执行load data inpath ‘/xxx/xxx/test.txt’ into table mytable; 之后,这个数据就会被移动到/user/hive/warehouse/xxxxx.db
文件夹下面去了。(ps:当你删除这个表的时候,文件夹下面的数据同样会被删除掉) -----------------------2019/09/10