`

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-javabean-sqoop脚本分隔符失效问题

    默认情况下, Sqoop使用制表符(\t)作为字段分隔符,但你可以根据需要自定义。问题可能出在以下几个方面: 1. **命令行参数设置**:确保你在运行Sqoop命令时正确指定了`--fields-terminated-by`选项。例如,如果...

    Sqoop-1.4.6 支持多分隔符

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

    解决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常用命令参数-中文1

    - `--hive-delims-replacement`:用自定义字符串替换数据中的特殊字符,如回车和制表符。 - `--hive-drop-import-delims`:导入数据到 Hive 时,自动删除特定的分隔符。 - `--map-column-hive`:映射 Hive 字段...

    hue平台oozie工作流操作sqoop,把mysql.pdf

    --fields-terminated-by:字段分隔符。 --hive-import:导入数据到Hive表。 --hive-table:指定Hive表名。 --split-by:用于数据分割的字段名。 -m:Map任务数量。 3. Oozie工作流的创建和配置: 在Hue平台中创建一...

    Sqoop导Oracle数据到Hive

    - `--null-string ''` 和 `--null-non-string '0'`:指定字符串类型的NULL值表示为空字符串,非字符串类型的NULL值表示为数字`0`。 ##### 步骤4:清理HDFS中的旧数据 在导入新数据之前,可能需要先清除HDFS上的旧...

    sqoop1使用必备

    - **连接字符串**:`jdbc:mysql://localhost:3306/hive`,表示连接的是本地 MySQL 数据库中的 hive 数据库。 - **用户名**:root,即数据库的登录用户。 - **密码**:123456,该用户的登录密码。 - **表名**:TBLS2...

    Sqoop安装与使用

    Sqoop 安装与使用 Sqoop 是一款方便的在传统型数据库与 Hadoop 之间进行数据迁移的工具,充分利用 MapReduce 并行特点以批处理的方式加快数据传输。Sqoop 工具是 Hadoop 下连接关系型数据库和 Hadoop 的桥梁,支持...

    sqoop需要导入的包

    还可以使用 `--map-column-java` 或 `--fields-terminated-by` 等选项自定义列分隔符。 6. **运行 Sqoop 命令**: 最后,运行 Sqoop 命令开始数据迁移过程。 关于 `json-to-sqoop.jar`,由于没有提供具体细节,其...

    大数据技术基础实验报告-sqoop的安装配置与应用.doc

    例如,将 `user` 表导入到 `/sqoop/test1` 目录,并设置字段分隔符(`--fields-terminated-by`)和Map数量(`-m`)。如果Map数量为1,不需要`--split-by`,否则需要指定分桶列。 - (2)条件导入:使用 `--where` ...

    Sqoop中文文档

    * –input-null-non-string &lt;null-str&gt;:在生成的java文件中,可以将null字符串设为想要设定的值(比如空字符串’’)。 * –input-null-string &lt;null-str&gt;:同上,设定时,最好与上面的属性一起设置,且设置同样的...

    sqoop-jar.zip

    - **性能优化**: 可以通过设置并行度(--num-mappers)、分隔符、列名和列类型等参数来优化导入导出性能。 - **安全性**: 在生产环境中,确保使用安全的方式传递数据库凭证,避免明文存储密码。 6. **其他高级...

    sqoop-1.4.7.tar.gz.zip

    Sqoop 支持多种数据类型,包括分隔符文件、Avro 数据、HBase 表、Parquet 文件等。 2. 导出:将 HDFS 中的数据写回到关系型数据库。 Sqoop 可以更新已有的表,或者创建新表来存储数据。 3. 批量插入:为了提高...

    SQOOP导入和导出参数.pdf

    - **--null-non-string**:如果指定列为非字符串类型,使用指定字符串替换值为null的该类列的值。 ##### 2.2 连接参数 - **--connect**:指定JDBC连接字符串,用于连接关系型数据库。 - **--connection-manager**:...

    Sqoop使用手册(高清书签)

    Sqoop允许用户自定义列映射、指定字段分隔符,并支持数据的压缩存储。 对于增量导入,Sqoop支持两种场景:一种是只导入新增加的数据,适用于日志文件等场景;另一种是可变数据的增量导入,这通常需要记录上一次导入...

    sqoop-1.4.6.tar.gz

    要使用 Sqoop,你需要首先配置你的数据库连接信息,然后通过命令行工具指定导入或导出的表、字段、分隔符等参数。例如,从 MySQL 导入数据到 HDFS 的基本命令可能如下: ```bash sqoop import --connect jdbc:mysql...

    sqoop导入数据到hdfs路径

    7. **`--hive-drop-import-delims`**:该选项告诉Sqoop在导入数据时不要使用任何分隔符。这通常用于导入非结构化或半结构化数据,例如CSV文件,但在此上下文中,意味着不希望在导入的数据中包含特定的分隔符。 8. **...

    Apache Sqoop Cookbook

    此外,书中还详细解释了如何使用Sqoop进行数据导入和导出,如使用`import`和`export`命令,以及如何处理复杂的数据类型和分隔符。 对于数据转换,Sqoop提供了丰富的转换操作,如使用自定义MapReduce任务进行数据...

Global site tag (gtag.js) - Google Analytics