Hadoop 与配置单元中的外部表混淆

Hadoop 与配置单元中的外部表混淆,hadoop,hive,create-table,external-tables,hiveddl,Hadoop,Hive,Create Table,External Tables,Hiveddl,我已使用以下命令创建了配置单元外部表: 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 loca

我已使用以下命令创建了配置单元外部表:

 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时,我可以看到数据库,但仓库内没有
depTable

[cloudera@quickstart ~]$ hadoop fs -ls /user/hive/warehouse/hive2.db
[cloudera@quickstart ~]$ 
在上面,您可以看到此数据库中没有创建表。据我所知,外部表不存储在蜂巢仓库中。那么我说的对吗??如果是,则存储在哪里??
但是如果我先创建外部表,然后加载数据,那么我就能够看到
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
中;删除后为什么它不被删除

外部和托管表之间的主要区别在于拖放表/分区行为。 当您删除
MANAGED
表/分区时,包含数据文件的位置也会被删除。 当您放下
EXTERNAL
表时,包含数据文件的位置保持原样

更新:
TBLProperty(“external.table.purge”=“true”)
在4.0.0+()版中,当在外部表上设置时,也会删除数据

外部
表以及
管理的
存储在DDL中指定的位置
。您可以在现有位置的顶部创建表,该位置中已有数据文件,它将同时适用于
外部
管理
,这无关紧要

您甚至可以在同一位置上创建
EXTERNAL
MANAGED
表,请参阅此答案,并提供更多详细信息和测试:

如果指定了位置,则两种类型的表的数据都将存储在该位置。如果未指定位置,则对于托管表和外部表,数据将位于默认位置:
/user/hive/warehouse/database\u name.db/table\u name


另请参见

上的官方配置单元文档我创建了指向HDFS中数据的外部表,但在warehouse文件夹中看不到它。所以我的问题是外部表存储在哪里??若我使用load命令创建外部表,它的行为就像托管表一样。你能帮我吗?你的回答帮不了我。我知道基本概念,但对HDFS中的存储有一些疑问。我希望我的声音洪亮clear@RushHour位置“/dataDir/”是什么意思?在这两种情况下都应该是HDFS dir。Iocal dir不能是表位置是的,我知道,但我的问题不同。为什么我看不到仓库中现有的外部表??是否有其他目录可以查看它???@RUSHHOURE create external table不创建文件夹,只修改元数据。加载文件后,它出现在HDFS中