创建外部表但是仓库空?

时间:2015-06-04 12:28:31

标签: hadoop hive

我正在使用hive v0.13

我的数据存储在hdfs中,我使用create "CREATE external TABLE"为这些数据创建一个表。一切正常,我可以发出"select"个陈述。问题出在仓库目录(hive.metastore.warehouse.dir)下,我没有看到任何files/data被添加,这是正常的吗?我知道"external"表数据不会复制到仓库目录,但不应该存储表元数据吗?

2 个答案:

答案 0 :(得分:0)

创建内部表时,配置单元会在hive.metastore.warehouse.dir中指定的目录下创建一个包含表名的目录。对我而言/apps/hive/warehouse.

假设您已经创建了一个表名test_tbl,那么将有一个目录/apps/hive/warehouse/test_tbl和hive将元数据存储到mysql或您配置的RDBMS中以存储元数据。当您使用{{1}加载数据时命令进入这个目录。

但是在LOAD DATA INPATH中您在create语句中指定了一个位置,因此hive不会在默认仓库目录中创建任何目录,因为您已经提供了该位置。它只是在external table

中存储元数据信息

您可以使用RDBMS命令直接将数据加载到该位置,而hive会将该数据视为与该特定目录关联的表。因此,它是外部表的预期行为。

答案 1 :(得分:0)

创建外部表时元数据将存储在RDBMS中,即在Metastore数据库中,您插入或加载的数据将存储在目录中。

当您在任何表上查询时,它是外部或托管表元数据将始终位于RDBMS中,实际上将从Metastore获取表模式,而来自HDFS的数据将使用数据和显示来评估模式。

因此,不会在仓库中为外部表创建任何元数据。