5.1location关键字不补充说明|内部表数据文件

外部表内部表__外部数据和内部数据的区别

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创建表,可以看到这种操作是可以的;

_外部数据和内部数据的区别_外部表内部表

为您推荐

5.1location关键字不补充说明|内部表数据文件

5.1location关键字不补充说明|内部表数据文件

Hive 内部表与外部表使用详解...

2023-07-19 栏目:互联网+

当前非电脑浏览器正常宽度,请使用移动设备访问本站!