`

sqoop自定义字符串分隔符

 
阅读更多
    Sqoop提供的--fields-terminated-by选项可以支持指定自定义的分隔符,但是它只支持单字节的分隔符,对于我们特殊的需求:希望使用双字节的“<-T->”,默认的是不支持的。
Sqoop在进行每一次的导出任务时,都会调用codegen,生成一个java文件,并编译打包成一个jar,供MapReduce使用。这个java文件包装了一系列的对导出数据的访问接口,我们可以尝试通过对这个java文件进行分析,找到指定双字节分隔符的方法。
     一般地,如果是使用的--query用查询语句获取数据,生成的文件为QueryResult.java,QueryResult.jar,如果使用的是--table,则用指定的表名对相应文件命名。java文件生成在sqoop脚本的同一目录下。

1.修改QueryResult.java文件


生成QueryResult.java到 /home/ncms/sp/sqoopjar2目录中

sqoop codegen --connect jdbc:mysql://192.168.0.1:3306/admin --username admin --password admin --query "SELECT i.*,c.description FROM PUBLISH_INFO i  INNER JOIN PUBLISH_CONTENT  c 
ON i.id=c.id  where \$CONDITIONS  " --bindir /home/ncms/sp/sqoopjar2 --class-name QueryResult --outdir /home/ncms/sp/sqoopjar2 




public String toString(DelimiterSet delimiters, boolean useRecordDelim) {
    StringBuilder __sb = new StringBuilder();
    String fieldDelim ="<-T->";    //行分隔符同理,在该方法尾部 修改追加为    __sb.append("<-L->") 即可 ;
    __sb.append(FieldFormatter.escapeAndEnclose(id==null?"null":"" + id, delimiters));
    __sb.append(fieldDelim);
    __sb.append(FieldFormatter.escapeAndEnclose(IS_STRUCTURED==null?"null":IS_STRUCTURED, delimiters));
    __sb.append(fieldDelim);
    __sb.append(FieldFormatter.escapeAndEnclose(is_deleted==null?"null":"" + is_deleted, delimiters));
    __sb.append(fieldDelim);
    __sb.append(FieldFormatter.escapeAndEnclose(last_modify==null?"null":"" + last_modify, delimiters));
    __sb.append(fieldDelim);
    __sb.append(FieldFormatter.escapeAndEnclose(table_name==null?"null":table_name, delimiters));
    __sb.append(fieldDelim);
    __sb.append(FieldFormatter.escapeAndEnclose(table_name2==null?"null":table_name2, delimiters));






2.打jar包
网上找的资料不全,而且比较麻烦,我使用简单方法(针对hadoop2.*)。
a.通过eclipse打jar包 建立QueryResult项目,一个QueryResult.java文件,将  hadoop2.*中的share中jar包和sqoop1.4.1.jar 导入。使用QueryResult.java提示找不到jar包为止。
b.通过eclip打jar包。
   注意这一步 , jar包完成







3.运行命令,即可
注意: 我是将 QueryResult.jar放置当前目录下执行的,其他目录没有测试。

sqoop import --connect jdbc:mysql://192.168.0.1:3306/admin --username admin --password admin --query "SELECT * FROM PUBLISH_INFO  where \$CONDITIONS  " -m 1 --target-dir /sqoop/test232 --class-name QueryResult --jar-file QueryResult.jar


4.验证结果







  • 大小: 13.5 KB
  • 大小: 60 KB
分享到:
评论

相关推荐

    Sqoop-1.4.6 支持多分隔符

    Sqoop的1.4.6版本修改部分代码,使--fields-terminated-by支持多分隔符

    sqoop-javabean-sqoop脚本分隔符失效问题

    NULL 博文链接:https://chengjianxiaoxue.iteye.com/blog/2235797

    解决sqoop2 数据分隔符为 ',' 以及 string类型数据存在单引号('数据')问题(通过改变源码编译解决 ---可以从源头彻底解决)

    说明: 版本为:sqoop2-1.99.5-cdh5.10.2 解决数据分隔符 以及 string类型数据存在单引号问题(解决方式 通过更改源码SqoopIDFUtils 里面的分隔符来解决此问题 ) ​ 只需要将以下包进行替换 connector-sdk-1.99.5-...

    sqoop 1.99.1 for hadoop200.tar.gz

    Sqoop(发音:skup)是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql、postgresql...)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,...

    sqoop中文文档

    详细介绍sqoop技术,是初学者的入门文档。内容简洁,适合阅读。

    sqoop安装详解以及sqoop介绍

    sqoop安装详解以及sqoop内容介绍使用介绍 集群介绍 sqoop:是一个工具,主要用于导入导出,实现MySQL到Hadoop之间数据的转换 2、导入数据:从结构化数据(Mysql,oracle,db2,)导入到半结构化或非结构化hadoop中...

    sqoop1.99.7源码

    sqoop2(1.99.7版本)源代码,可以直接按需求修改一些内容,例如,默认分隔符等

    解决sqoop2导入hdfs单引号问题

    使用sqoop2从mysql导入hadoop时,导入的数据带单引号。是由于sqoop2的一个bug导致,该包上传到sqoop_home/server/lib替换原来的jar包后,重启sqoop server,即可解决。

    sqoop-1.4.7.zip

    运行Sqoop报错:找不到或无法加载主类 org.apache.sqoop.sqoop 将sqoop-1.4.7.jar包放到Sqoop的lib目录下,问题解决。

    sqoop connect sqlserver driver

    sqoop连接sqlserver的驱动工具,没有这个sqoop是连不上滴

    Sqoop集群搭建.

    Sqoop集群搭建.Sqoop集群搭建.Sqoop集群搭建.Sqoop集群搭建.Sqoop集群搭建.Sqoop集群搭建.Sqoop集群搭建.Sqoop集群搭建.Sqoop集群搭建.

    sqoop-1.4.6.jar

    sqoop-1.4.6.jar,sqoop报错找不到加载类的时候 将该文件放入sqoop的lib文件夹下

    Sqoop安装与使用

    Sqoop即 SQL to Hadoop ,是一款方便的在传统型数据库与Hadoop之间进行数据迁移的工具,充分利用MapReduce并行特点以批处理的方式加快数据传输

    实战Sqoop数据导入及大数据用户行为案例分析

    实战Sqoop数据导入及大数据用户行为案例分析(全套视频+代码+工具+课件讲义) 内容包括: 01_CDH版本框架的介绍 02_CDH版本框架的环境部署 03_Sqoop的介绍及其实现原理 04_Sqoop的安装部署及连接测试 05_Sqoop将...

    sqoop常用命令.xlsx

    sqoop的常用指令操作

    sqoop使用.txt

    sqoop数据导出工具

    sqoop-1.4.6.jar.zip

    sqoop框架开发工具使用的jar sqoop-1.4.6.jar 手动安装到maven &lt;groupId&gt;org.apache.sqoop &lt;artifactId&gt;sqoop &lt;version&gt;1.4.6 &lt;/dependency&gt;

    sqoop1.46和1.47

    sqoop框架开发工具使用的jar,目前版本有1.4.6和1.4.7两个jar包,启动Sqoop时,抛出异常:Error: Could not find or load main class .usr.local.sqoop-1.4.7.sqoop-1.4.7.jar 则可以下载资源将sqoop-1.4.7.jar放到...

    eclipse-sqoop.

    利用eclipse开发工具 远程调试sqoop一些相关问题描述。

    sqoop2的安装包

    sqoop2安装包。

Global site tag (gtag.js) - Google Analytics