如何使用外部表指向单个文件

时间:2017-03-03 15:47:44

标签: hive

我尝试将hdfs数据加载为外部数据但是出现以下错误。

文件夹ml-100k有多个具有不同数据集的数据集,所以我只需要加载该特定文件。

hive> create external table movie_ratings (movie_id int, user_id int, ratings int, field_4 int) location 'hdfs://hadoop-master:8020/user/hduser/gutenberg/ml-100k/u.data'
    > ;
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException(message:hdfs://hadoop-master:8020/user/hduser/gutenberg/ml-100k/u.data is not a directory or unable to create one)

2 个答案:

答案 0 :(得分:2)

您无法创建指向文件的表,只能创建指向目录的表,但有一个功能/错误允许您将位置更改为特定文件。

create external table movie_ratings (movie_id int, user_id int, ratings int, field_4 int) location 'hdfs://hadoop-master:8020/user/hduser/gutenberg/ml-100k';

alter table movie_ratings set location 'hdfs://hadoop-master:8020/user/hduser/gutenberg/ml-100k/u.data';

答案 1 :(得分:0)

您无法在特定文件上创建Hive表,您需要提供目录。 因此,您可以在ml-100k/下创建一个子目录,并按照以下方式使用它:

create external table movie_ratings (movie_id int, user_id int, ratings int, field_4 int) location 'hdfs://hadoop-master:8020/user/hduser/gutenberg/ml-100k/new_subfilder/'

@Dudu提到的bug可以解决一个特定的情况,但它对于一般用途是不安全的,因为插入这样的表将创建新文件并且永远不会附加指定的文件!