oraclelongraw字段处理方法

oraclelongraw字段处理方法

ID:35273689

大小:82.50 KB

页数:7页

时间:2019-03-22

oraclelongraw字段处理方法_第1页
oraclelongraw字段处理方法_第2页
oraclelongraw字段处理方法_第3页
oraclelongraw字段处理方法_第4页
oraclelongraw字段处理方法_第5页
资源描述:

《oraclelongraw字段处理方法》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、Oraclelongraw字段处理方法作者:[耿雷雨]时间:[2015.11.3]目录&文件版本说明2&参考资料2&手册目的2&声明2&名词定义和缩略语说明21问题描述32解决办法32.1SQL方式32.2Kettle方式3&文件版本说明表1版本说明版本发布时间修订章节作者12015.11.4初稿耿雷雨&参考资料无&手册目的记录日常工作中的问题,互相交流学习。&声明无&名词定义和缩略语说明表2名词定义及缩略语说明序号缩写说明121问题描述Longraw类型是oracle数据库的一个老的数据类型,属于不推荐使用的类型,这种类型的数据很难使用SQL进行操作。在ETL过程中通过如果源库中存在

2、longraw字段,通过一般存储过程或者抽取工具无法处理这种数据。2解决办法针对longraw类型,一种方法可以在源库将这个字段转换成blob字段,这个需要我们能操作源库,一般没有这个权限。另一种方法可以通过java脚本查询出数据后,将数据存储到blob字段中,这种方式一般的代码是单条处理,效率比较慢,而且独立于ETL工具和脚本。可以将代码嵌入到ETL流程中,利用工具本身多线程并行特性加快执行效率。2.1SQL方式新建一张表列为blob类型,使用to_lob函数进行数据转换。Insertintotable2(id,zp)selectid,to_lob(zp)fromtable1;2.2

3、Kettle方式一般情况下,只有源库查询权限。通过dblink无法查询lob字段,第一种方式无法实现。通过写java脚本结合kettle工具可以解决这个问题。整体处理流程如下:表输入正常查询源表数据,预览数据时发现longraw字段列为一个很长的16进制字符串。(最初时不清楚该字符串是什么编码,也不知如何将该字符串转成照片。想到kettle是java编写的,通过编写简单java类模拟表输入查询,确定了kettle内部使用的是哪个方法转换的longraw字段。后续结合百度的内容,多次尝试确定字符串为一个16进制的数据。)将该字符串转换成二进制即可将数据存储为照片。16进制转换二进制就由后

4、面的java代码块来处理。代码块代码如下:/此处代码为kettlejava代码块组件的模版生成,点击codesnippits-》commonuse-》main会自动生成代码框架,在此框架上增加自己业务代码即可。/importjava.io.;StringzpStreamField;//在此定义全局变量publicbooleanprocessRow(StepMetaInterfacesmi,StepDataInterfacesdi)throwsKettleException{Object[]r=getRow();if(r==null){setOutputDone();returnfals

5、e;}if(first){/zpStreamField为java代码块参数设置的参数/zpStreamField=getParameter("zpStreamField");first=false;}//ItisalwayssafesttocallcreateOutputRow()toensurethatyouroutputrow'sObject[]islarge//enoughtohandleanynewfieldsyouarecreatinginthisstep.//Object[]outputRow=createOutputRow(r,data.outputRowMeta.siz

6、e());//获取输入的照片字段的值,存入zpstr变量中Stringzpstr=get(Fields.In,"ZP").getString(r);//Setthevalueintheoutputfield//调用函数将16进制转换为二进制的bytebyte[]zpStream=hexStringToBytes(zpstr);//将zpStream添加到输出流中get(Fields.Out,zpStreamField).setValue(outputRow,zpStream);//putRowwillsendtherowontothedefaultoutputhop.//putRow(

7、data.outputRowMeta,outputRow);returntrue;}privatebytecharToByte(charc){return(byte)"0123456789ABCDEF".indexOf(c);}//进制转换方法publicbyte[]hexStringToBytes(StringhexString){if(hexString==nullhexString.equals("")){returnnull;}intl

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。