有一个目录包含尚待分析的多个文件,例如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
。
然而,它只是不起作用。有没有更简单的方法来实现这个?
答案 0 :(得分:3)
load data inpath
是 HDFS元数据操作
它唯一能做的就是将文件从当前位置移动到表格位置
而且,“移动”(与“复制”不同)是元数据操作而不是数据操作。
如果使用OVERWRITE关键字,则使用目标表的内容 (或分区)将被删除并替换为所引用的文件 通过filepath;否则将添加filepath引用的文件 桌子。
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 ...)]
文件路径可以是:
加载的目标可以是表格或分区。如果表已分区,则必须通过指定所有分区列的值来指定表的特定分区。
filepath可以引用一个文件(在这种情况下Hive会将文件移动到表中),或者它可以是一个目录(在这种情况下,Hive会将该目录中的所有文件移动到表中)。在任何一种情况下,filepath都会解决一组文件。