知识库 : 数据迁移之PIG篇—如何处理HBASE数据含换行符问题

Edit Document

数据 迁移之PIG 篇—如何 处理 HBASE数据 含换行符问题

 

目录

一、背景

二、 PIG 代码修改

三、示例

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

背景

H Base 关系库迁移 数据 的时候, 方便 的工具不多, PIG是 可选工具之一。 当HB ase 表字段 数据中含有换行符的时候,所有工具可能都会失效, PIG也 不例外 。通过 本文给大家介绍如何通过 PIG处理 这个问题。

看下, 通过PIG导 HB ase 数据 脚本是怎样的。

导出 数据时,可以指定列分割符 (P igStorage 第一个 参数),但是 没有可以指定换行符的 地方 ,如果导出时,我们可以自定义换行符,那么 前面 我们提到的问题就可以迎刃而解了。

二、 PIG 代码 修改

翻看 PIG的 代码,发现 PIG的 输出主要由 PigTextOutputFormat 内部 PigLineRecordWriter 处理 ,其中对行结束符的处理代码如下:

通过 源码,我们可以看到 在PIG的 输出中, 结束符是程序写死的‘ \n 看来 我们 就不得不改造下 PIG代码 了。

的修改方式是增加 P igStorage 行结束符的构造函数,然后 这个行结束符 带到 输出 类中 ,当然也可以采用其它方式处理,这里就不一一介绍了。

详细 修改就不一一列举,只提几处关键修改点。

增加 PigTextOutputFormat 带行 结束符的构造函数。

传入 PigTextOutputFormat 行结束符传递给 PigLineRecordWriter

增加P igStorage 行结束符的构造函数。

传入的行结束符传递给 PigTextOutputFormat

把编译 后的文件放到 PIG的 pig-0.12.0-cdh5.0.4-withouthadoop .jar、 pig-0.12.0-cdh5.0.4 .jar里 就可以使用了。

三、 示例

假设HBASE表test的f1:info字段 里含有换行符 \n,以此为 例,看如何把该表数据正确导入到 ORACLE库中。

第一步 PIG脚本 ,我们指定行结束符’$$’ ,脚本 如下:

第二步 ,对输出文件进行处理( 替换 数据 字段 里的换行符,替换$$ 为\n 处理脚本 (shell脚本 )如下 (test. sh)

 

第三步 ,处理 PIG输出 文件

第一个 参数是 PIG的 输出文件,第二个参数 PIG指定 的行结束符,第三个是处理后的文件。

第四步 把处理 后的数据文件导入到 ORACLE中 ,这个可选方式就比较多了,不作说明。

,把导入后的数据 内容替换 换行符\n。

以ORACLE为 例:    update  mytest set sinfo = replace(sinfo,'##',chr(10))

最终 结果:

 

如需要 修改后的 PIG JAR 可联系 kongml@yonyou.com

Attachments:

数据迁移之PIG篇—如何处理HBASE数据含换行符问题.docx (application/vnd.openxmlformats-officedocument.wordprocessingml.document)