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

时间:2014-07-01 09:11:04

标签: hadoop hive

我有10MB的日志,我需要将其加载到HIVE中。稍后我需要在现有表中添加更多日志文件。有人可以帮我这个吗?

3 个答案:

答案 0 :(得分:11)

只需使用标准的Hive语法:

LOAD DATA INPATH 'filepath' INTO TABLE tablename

这里的filepath可以参考:

  • 相对路径,例如project/data1
  • 绝对路径,例如/user/hive/project/data1
  • 带有方案的完整URI和(可选)权限,例如hdfs://namenode:9000/user/hive/project/data1

filepath 可以是目录,该目录中的所有文件都将被移动到表中。

来源:Hive Language Manual

答案 1 :(得分:2)

为什么不通过指定某个位置并将文件转储到该特定位置来在Hive中创建外部表。您的外部表将自动获取该文件夹中转储的任何文件(如果架构相同)。

答案 2 :(得分:1)

A)以下命令可以多次使用来加载多个文件:

LOAD DATA INPATH 'file_1/path/hdfs' INTO TABLE tablename;
LOAD DATA INPATH 'file_2/path/hdfs' INTO TABLE tablename;
.......

or

LOAD DATA LOCAL INPATH 'file_1/path/local' INTO TABLE tablename;
LOAD DATA LOCAL INPATH 'file_2/path/local' INTO TABLE tablename;

...

INTO关键字将数据文件追加到文件之后。不要误用OVERWRITE。

B)当文件在一个目录中时:

LOAD DATA INPATH 'dir/path/hdfs' INTO TABLE tablename;
or,
LOAD DATA LOCAL INPATH 'dir/path/local' INTO TABLE tablename;

IMP:当目录包含非数据文件(很可能是HDFS)时,上面的命令会抛出错误。 例如,pig(或其他工具)生成了一个名为my_data_dir的目录。在my_data_dir下有两个数据文件 / my_data_dir / part-m-00000 & / my_data_dir / part-m-00001 。还有一个名为 / my_data_dir / _logs

的日志文件

在这种情况下,如果您运行上面的命令,则会提示错误提及日志文件。删除日志文件和上面的命令工作正常。