2016-09-11 38 views
0

在Hue - > Hive查询浏览器中,我在Hive中创建了一个外部表,并使用以下语句将数据从我的一个CSV文件加载到它中:Hive:即使当表是外部时,源数据也被移动到hive数据仓库

CREATE EXTERNAL TABLE movies(movieId BIGINT, title VARCHAR(100), genres VARCHAR(100)) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' STORED AS TEXTFILE; 

LOAD DATA INPATH '/user/admin/movie_data/movies' INTO TABLE movies; 

我看到源文件“电影”从HDFS中消失并转移到配置单元数据仓库。我的印象是外部表格只能作为原始源数据的链接。

如果外部表不是独立于源数据 - 如果我要删除表,源文件仍然会保留?我如何创建这样的外部表格?

回答

0

外部表格将数据存储在我们创建表格时提到的hdfs位置中。因此,如果我们在创建表时不提供位置,它将默认为仓库hdfs文件夹。 尝试运行“use mydatabase_name; show create table mytable_name;”获取表定义以查看它指向的位置。 如果你需要一个非默认值的hdfs位置,你需要在创建table时提及它。查询如下查询 [创建外部表测试(col1字符串)位置'/ data/database/tablename';] 其次LOAD INPATH不会将数据从INPATH移动到外部hdfs位置,它会将数据从INPATH插入到表格表中(更像是将数据从inpath复制到表格的hdfs位置)

+0

是否没有办法创建只是“指针”的外部表到源数据并独立于它(如在元数据表中)?这就是文档似乎谈论的内容。 –

+0

当您使用外部关键字创建表格时,其外部表格指向hdfs位置。备份数据并删除表格,数据不会被删除...只要看看它就可以了。 –