如何将多个文件加载到hive中的表中?

时间:2017-03-24 11:06:23

标签: hadoop hive

有一个目录包含尚待分析的多个文件,例如file1,file2,file3。

我想

  

load data inpath 'path/to/*' overwrite into table demo

而不是

  

load data inpath 'path/to/file1' overwrite into table demo
  load data inpath 'path/to/file2' overwrite into table demo
  load data inpath 'path/to/file3' overwrite into table demo

然而,它只是不起作用。有没有更简单的方法来实现这个?

4 个答案:

答案 0 :(得分:3)

1。

load data inpath HDFS元数据操作 它唯一能做的就是将文件从当前位置移动到表格位置 而且,“移动”(与“复制”不同)是元数据操作而不是数据操作。

2

  

如果使用OVERWRITE关键字,则使用目标表的内容   (或分区)将被删除并替换为所引用的文件   通过filepath;否则将添加filepath引用的文件   桌子。

     

Language Manual DML-Loading files into tables

3

load data inpath 'path/to/file1' into table demo;
load data inpath 'path/to/file2' into table demo;
load data inpath 'path/to/file3' into table demo;

load data inpath 'path/to/file?' into table demo;

dfs -mv path/to/file? ...{path to demo}.../demo

或(来自bash)

hdfs dfs -mv path/to/file? ...{path to demo}.../demo

答案 1 :(得分:0)

使用路径作为LOCATION参数生成配置单元表将自动读取所述位置中的所有文件。 例如:

CREATE [EXTERNAL] TABLE db.tbl(
column1 string,
column2 int ...)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY (delimiter)
LINES TERMINATED BY '\n'
LOCATION '/path/to/' <- DO NOT POINT TO A SPECIFIC FILE, POINT TO THE DIRECTORY

Hive将自动解析文件夹中的所有数据,并将其“强制”加载到您创建的表语句中。 只要该路径中的所有文件都采用相同的格式,您就可以使用。

答案 2 :(得分:0)

1)目录包含三个文件

-rw-r--r--   1 hadoop supergroup        125 2017-05-15 17:53 /hallfolder/hall.csv
-rw-r--r--   1 hadoop supergroup        125 2017-05-15 17:53 /hallfolder/hall1.csv
-rw-r--r--   1 hadoop supergroup        125 2017-05-15 17:54 /hallfolder/hall2.csv

2)启用此命令

  SET mapred.input.dir.recursive=true;

3)hive&gt;

load data  inpath '/hallfolder/*' into table alltable;

答案 3 :(得分:0)

LOAD DATA [LOCAL] INPATH&#39; filepath&#39; [OVERWRITE] INTO TABLE tablename [PARTITION(partcol1 = val1,partcol2 = val2 ...)]

文件路径可以是:

相对路径,例如project / data1绝对路径,例如/ user / hive / project / data1带有scheme的完整URI和(可选)权限,例如hdfs:// namenode:9000 / user /蜂房/项目/ DATA1

加载的目标可以是表格或分区。如果表已分区,则必须通过指定所有分区列的值来指定表的特定分区。

filepath可以引用一个文件(在这种情况下Hive会将文件移动到表中),或者它可以是一个目录(在这种情况下,Hive会将该目录中的所有文件移动到表中)。在任何一种情况下,filepath都会解决一组文件。