hive中如何将多个文件存放在同一个目录下?

How to store multiple files under the same directory in hive?

我正在使用 Hive 处理我的 CSV 文件。我已将 CSV 文件存储在 HDFS 中,并想从这些文件中创建 tables。

我使用以下命令:

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 中。有道理。

但是如果我想创建另一个 table 怎么办?

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.

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

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

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

您可以根据需要在目录中存储任意数量的文件。所有这些都可以访问建立在文件夹顶部的 table。

Table 位置是目录,不是文件。如果您需要创建新的 table 并保持其文件不与其他 table 混合,则创建单独的文件夹。

另请阅读此答案以获得清晰的理解: