最近公司在使用Hive做项目测试,所以就在Hive上面建了一些表,做测试。
使用建表语句后发现数据被自动覆盖了,现在了解到的情况是这样的。
Hive中,表的Metadata信息全部存储在MySQL中。
而存储在MySQL中的数据是没有校验过程的。
也就是说,你可以创建一个逻辑错误的表,两个表指向同一个HDFS文件也是有可能的。
所以,在使用CREATE TABLE的时候,LOCATION必须要指定成
Path/表名
如:
create table choice(
userid int,
classname string)
row format delimited fields terminated by '\t'
LOCATION '/data/test01/dacoolbaby/choice'
;
否则在使用LOAD LOCAL DATA INPATH 命令加载本地数据的时候,
数据会互相覆盖。