2014-11-24 98 views
1

来自相对Hadoop/Hive新手的问题:如何将Microsoft Word(二进制)文档的内容作为参数传递给Hive函数?Microsoft Word二进制文件如何存储在Hive中?

我的目标是能够将一个二进制文件(在我的特殊用例中是一个Microsoft Word文档)的完整内容作为二进制参数提供给UDTF。我最初的方法是将文件的内容啜到一个临时表中,然后将其提供给UDTF在查询以后,这是我如何试图建立一个临时表:

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

遗憾的是,似乎有成为Word文档中的换行符(或者像换行符那样行事的东西),导致登台表有许多行而不是单个全面的blob,后者是我所希望的。有没有办法确保摄取不会爆炸成多行?我在这里看到过类似的关于其他二进制数据的问题,比如图像文件,所以我猜测它是让我绊倒的换行符。

失败所有,有没有办法跳过在中间Hive表中存储文件的内容,只是在调用时直接提供内容到UDTF?在我通过Hive的内置函数进行搜索时,没有什么明显的跳出来,但也许我错过了一些东西。

从版本角度看,环境是Hive 0.13.1和Hadoop 1.2.1(尽管升级到两者都未决)。

回答

1

这是一个黑客-Y的解决方法,但我落得这样做是这样的:

1)Base64编码的二进制文件,并把编码后的文件到HDFS

2)在蜂巢:

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; 

理论上这应该适用于任何想要以这种方式挤入Hive的任意二进制文件。需要注意的是确保你的base64编码实现生成单行文件(我的OS X base64实用程序生成单行输出,而我使用的CentOS 6 VM中的base64实用程序生成了数百行) - 如果没有,你可以手动将它粘贴到HDFS中。

相关问题