5.1location关键字不补充说明|内部表数据文件
Hive 内部表与外部表使用详解...
4.2.2 上传数据文件到 /stu目录
上传外部表数据文件
hdfs dfs -put ./students.txt /stu
上传内部表数据文件
hdfs dfs -put ./students.txt /user/hive/warehouse/test.db/student
上传完成后就可以直接查看表数据了
4.2.3 内部表删除
接下来我们执行一下drop table tablename 命令,分别在Hive中和HDFS中查看效果
在当前的数据库下该表被删除了,切换到hdfs目录下查看,表对应的数据文件也删掉了;
简单来说就是,内部表执行删除的时候,hive会将内部表自身的元数据信息,连同hdfs数据文件一并删除;
4.2.4 外部表删除
删除外部表后再次去hdfs目录查看,发现此时数据文件仍然存在;
总结来说就是,删除外部表时只删除hive上的元数据信息,hdfs上面的数据仍然保留,因为这个特性,可以一定程度上确保原始数据的安全性;
4.3 如何选择内、外部表
根据上面的操作演示,在内部表与外部表的选择上做如下的建议:
五、内部表、外部表与location的关系
通过上面的操作演示,好奇的同学不仅会在脑海里冒出下面的几个思考:
5.1 location关键字不补充说明
1)在创建外部表的时候,可以使用location指定存储位置路径,如果不指定会如何?
如果不指定location,外部表的默认路径也是位于/user/hive/warehouse,由默认参数控制
2)创建内部表的时候,是否可以使用location指定?
内部表可以使用location指定位置的
3)是否意味着Hive表的数据在HDFS上的位置不是一定要在/user/hive/warehouse下?
不一定,Hive中表数据存储位置,不管内部表还是外部表,默认都在/user/hive/warehouse,当然可以在建表的时候通过location关键字指定存储位置在HDFS的任意路径
5.2 操作演示 5.2.1 创建外部表,不指定location
create external table student_ext_nolocation(
num int,
name string,
sex string,
age int,
dept string)
row format delimited
fields terminated by ',';
执行创建表的sql;
再在hdfs目录中检查,发现就在默认的路径下:/user/hive/warehouse/test.db
5.2.2 创建内部表,指定location
create table student_inner(
num int,
name string,
sex string,
age int,
dept string)
row format delimited
fields terminated by ','
location '/stu';
执行sql创建表,可以看到这种操作是可以的;
当前非电脑浏览器正常宽度,请使用移动设备访问本站!