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

bfhwhh0e  于 2021-05-31  发布在  Hadoop
关注(0)|答案(1)|浏览(382)

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

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 删除后为什么不删除。

bjg7j2ky

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 对于托管表和外部表。
另请参见托管表与外部表上的官方配置单元文档

相关问题