如何在hive中存储microsoftword二进制文件?

uoifb46i  于 2021-05-30  发布在  Hadoop
关注(0)|答案(1)|浏览(584)

来自hadoop/hive新手的问题:如何将microsoftword(二进制)文档的内容作为参数传递给hive函数?
我的目标是能够将二进制文件(在我的特定用例中是microsoftword文档)的完整内容作为二进制参数提供给udtf。我最初的方法是将文件的内容slurp到一个暂存表中,然后在稍后的查询中提供给udtf,这就是我试图构建该暂存表的方式:

create table worddoc(content BINARY);
load data inpath '/path/to/wordfile' into table worddoc;

不幸的是,word文档中似乎有换行符(或者一些足够像换行符的东西),这导致staging表有许多行,而不是一个完整的blob,后者正是我所希望的。有没有办法确保摄取不会被分解成多行?我在这里也看到过类似的问题,关于其他二进制数据,比如图像文件,所以我猜是新行把我绊倒了。
如果所有这些都失败了,有没有一种方法可以跳过将文件的内容存储在中间配置单元表中,而在调用时直接将内容提供给udtf?在我搜索Hive内置函数的过程中,没有任何明显的跳出,但也许我遗漏了什么。
就版本而言,环境是hive0.13.1和hadoop1.2.1(尽管两个版本的升级都在等待中)。

nszi6y05

nszi6y051#

这是一个黑客的解决方法,但我最终做的是:
1) base64对二进制文档进行编码,并将编码后的文件放入hdfs中
2) 在Hive中:

CREATE TABLE staging_table (content STRING);
LOAD DATA INPATH '/path/to/base64_encoded_file' INTO TABLE staging_table;
CREATE TABLE target_table (content BINARY);
INSERT INTO target_table SELECT unbase64(content) FROM staging_table;

从理论上讲,这应该适用于任何您希望以这种方式压入配置单元的任意二进制文件。需要注意的一个问题是,确保base64编码实现生成单行文件(我的os x base64实用程序生成单行输出,而我使用的centos 6 vm中的base64实用程序生成数百行输出)-如果没有,可以在将其放入hdfs之前手动将其粘合在一起。

相关问题