我使用以下命令创建了配置单元外部表:
use hive2;
create external table depTable (depId int comment 'This is the unique id for each dep', depName string,location string) comment 'department table' row format delimited fields terminated by ","
stored as textfile location '/dataDir/';
现在,当我查看hdfs时,我可以看到db,但是没有 depTable
在仓库里。
[cloudera@quickstart ~]$ hadoop fs -ls /user/hive/warehouse/hive2.db
[cloudera@quickstart ~]$
上面您可以看到这个数据库中没有创建表。据我所知,外部表不存储在hive仓库中。那么我说的对吗??如果是,那么它存储在哪里??
但是如果我先创建外部表,然后加载数据,那么我就可以看到里面的文件 hive2.db
.
hive> create external table depTable (depId int comment 'This is the unique id for each dep', depName string,location string) comment 'department table' row format delimited fields terminated by "," stored as textfile;
OK
Time taken: 0.056 seconds
hive> load data inpath '/dataDir/department_data.txt' into table depTable;
Loading data to table default.deptable
Table default.deptable stats: [numFiles=1, totalSize=90]
OK
Time taken: 0.28 seconds
hive> select * from deptable;
OK
1001 FINANCE SYDNEY
2001 AUDIT MELBOURNE
3001 MARKETING PERTH
4001 PRODUCTION BRISBANE
现在,如果我开枪 hadoop fs
查询我可以看到这个表下的数据库如下:
[cloudera@quickstart ~]$ hadoop fs -ls /user/hive/warehouse/hive2.db
Found 1 items
drwxrwxrwx - cloudera supergroup 0 2019-01-17 09:07 /user/hive/warehouse/hive2.db/deptable
如果删除该表,我仍然可以在hdfs中看到如下表:
[cloudera@quickstart ~]$ hadoop fs -ls /user/hive/warehouse/hive2.db
Found 1 items
drwxrwxrwx - cloudera supergroup 0 2019-01-17 09:11 /user/hive/warehouse/hive2.db/deptable
那么,外部表的确切行为是什么??当我使用 LOCATION
关键字在何处存储以及何时使用 load
声明为什么它被存储在 HDFS
删除后为什么不删除。
1条答案
按热度按时间bjg7j2ky1#
两者的主要区别
EXTERNAL
以及MANAGED
表处于删除表/分区行为中。当你掉下去的时候MANAGED
表/分区,包含数据文件的位置也被删除。当你掉下去的时候EXTERNAL
表中,包含数据文件的位置保持不变。更新:
TBLPROPERTIES ("external.table.purge"="true")
在版本4.0.0+(hive-19981)中,当在外部表上设置时,也会删除数据。EXTERNAL
表以及MANAGED
正在ddl中指定的位置存储。您可以在现有位置的顶部创建一个表,其中的数据文件已经在该位置中,这两个位置都可以使用EXTERNAL
或者MANAGED
,没关系。你甚至可以创造两者
EXTERNAL
以及MANAGED
位于同一位置顶部的表格,请参阅此答案,并提供更多详细信息和测试:https://stackoverflow.com/a/54038932/2700344如果指定了位置,则两种类型的表的数据都将存储在该位置。如果未指定位置,则数据将位于默认位置:
/user/hive/warehouse/database_name.db/table_name
对于托管表和外部表。另请参见托管表与外部表上的官方配置单元文档