2

我正在使用 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.

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

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

4

1 回答 1

2

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

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

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

另请阅读此答案以获得清晰的理解:https ://stackoverflow.com/a/54038932/2700344

于 2019-07-02T06:17:19.890 回答