如何在Hive的同一目录下存储多个文件?

时间:2019-07-02 05:18:54

标签: hadoop hive hdfs create-table

我正在使用Hive处理我的CSV文件。我已将CSV文件存储在HDFS中,并希望根据这些文件创建表。

我使用以下命令:

create external table if not exists csv_table (dummy STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'
STORED AS TEXTFILE
LOCATION 'hdfs://localhost:9000/user/hive'
TBLPROPERTIES ("skip.header.line.count"="1");

LOAD DATA INPATH '/CsvData/csv_table.csv' OVERWRITE INTO TABLE csv_table;

因此/CsvData下的文件将被移到/user/hive中。有道理。

但是,如果我要创建另一个表怎么办?

create external table if not exists csv_table2 (dummy STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'
STORED AS TEXTFILE
LOCATION 'hdfs://localhost:9000/user/hive'
TBLPROPERTIES ("skip.header.line.count"="1");

LOAD DATA INPATH '/CsvData/csv_table2.csv' OVERWRITE INTO TABLE csv_table2;

它将引发异常,抱怨目录不为空。

ERROR : FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.MoveTask. Directory hdfs://localhost:9000/user/hive could not be cleaned up.

所以我很难理解,是否意味着我只能存储一个文件就可以理解一个目录?要存储多个文件,我必须为每个文件创建一个目录?

是否可以将所有文件存储在一起?

1 个答案:

答案 0 :(得分:1)

创建表语句不会引发异常,抱怨该目录不为空,因为在现有目录之上创建表时这是很正常的情况。

您可以根据需要在目录中存储尽可能多的文件。文件夹顶部的表将可以访问所有这些文件。

表位置是目录,而不是文件。如果您需要创建新表并使其文件不与其他表混合在一起,请创建单独的文件夹。

也请阅读此答案以明确理解:https://stackoverflow.com/a/54038932/2700344