有一个目录包含多个有待分析的文件,例如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条答案
按热度按时间fslejnso1#
将数据[local]inpath'filepath'[overwrite]加载到表tablename[partition(partcol1=val1,partcol2=val2…)]
文件路径可以是:
相对路径,如project/data1绝对路径,如/user/hive/project/data1带有scheme和(可选)权限的完整uri,如hdfs://namenode:9000/用户/配置单元/项目/数据1
加载到的目标可以是表或分区。如果表已分区,则必须通过为所有分区列指定值来指定表的特定分区。
filepath可以引用一个文件(在这种情况下,hive会将文件移到表中),也可以是一个目录(在这种情况下,hive会将该目录中的所有文件移到表中)。无论哪种情况,filepath都会寻址一组文件。
xmjla07d2#
1) 目录包含三个文件
2) 启用此命令
3) Hive>
uplii1fm3#
1.
load data inpath
是hdfs元数据操作。它所做的唯一事情就是将文件从当前位置移动到表位置。
同样,“移动”(不像“复制”)是一个元数据操作,而不是数据操作。
2.
如果使用overwrite关键字,则目标表(或分区)的内容将被删除并替换为filepath引用的文件;否则,filepath引用的文件将添加到表中。
语言手册dml加载文件到表中
3.
或者
或
或(来自bash)
aiqt4smr4#
生成一个以路径为位置参数的配置单元表将自动读取所述位置中的所有文件。例如:
配置单元将自动解析文件夹中的所有数据,并将其“强制馈送”到您创建的表语句中。只要该路径中的所有文件的格式相同,就可以继续。