从HDFS目录仅加载少量文件

时间:2018-12-17 08:59:29

标签: hive

我想将HDFS目录中的某些文件加载​​到表中。

HDFS目录中的文件如下。

/data/log/user1log.csv
/data/log/user2log.csv
/data/log/user3log.csv
/data/log/user4log.csv
/data/log/user5log.csv

现在我要加载/data/log/user1log.csv和/data/log/user2log.csv文件。

我尝试了以下方法。

CREATE EXTERNAL TABLE log_data (username string,log_dt string)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
tblproperties ("skip.header.line.count"="1");

load data inpath '/data/log/user1log.csv' into table log_data;
load data inpath '/data/log/user2log.csv' into table log_data;

但是将数据加载到表文件中之后,这些文件就从HDFS位置消失了。 但是我们应该将文件保存在HDFS位置。

请帮助我。

谢谢。

1 个答案:

答案 0 :(得分:2)

我认为不可能,当您执行Load inpath时,它移动数据而不是复制。

但是,您有一个外部表,因此即使不使用Load inpath

也可以加载数据

这是您的操作方法。

指定配置单元表的位置

CREATE EXTERNAL TABLE log_data (username string,log_dt string)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
tblproperties ("skip.header.line.count"="1");
location '/data/log_data/table'

将文件复制到位置

hdfs dfs -cp /data/log/user1log.csv /data/log_data/table/
hdfs dfs -cp /data/log/user2log.csv /data/log_data/table/