datax日期为空报错

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了datax日期为空报错相关的知识,希望对你有一定的参考价值。

参考技术A 题主是否想询问“datax日期为空报错怎么解决 ”?将所赋值的字段重置为空。在dataX脚本读取reader中判断时间类型的字符串为空时,赋一时间戳类型的时间默认值,这个默认值应该是容易与数据真实时间值区分的时间。在写入writer中postSql中处理,datax日期为空报错应将所赋值的字段重置为空。DataX是阿里云DataWorks数据集成的开源版本。DataX 是阿里云 DataWorks数据集成 的开源版本,在阿里巴巴集团内被广泛使用的离线数据同步工具平台。

Datax连接mySql8.0.11升级驱动

Datax连接mySql8.0.11升级驱动方法

  • 需求:用datax技术把数据从gauseDb导入到mySql数据库

  • 问题:按正常datax配置pgsqlReder和mySqlWriter后,报错信息如下:

2021-06-13 00:36:13.310 [job-0] ERROR JobContainer - Exception when job run
com.alibaba.datax.common.exception.DataXException: Code:[DBUtilErrorCode-07], Description:[读取数据库数据失败. 请检查您的配置的 column/table/where/querySql或者向 DBA 寻求帮助.].  - 执行的SQL为: delete from wjybjy.wjybjy_sy where t_month=\'2021-05\' 具体错误信息为:java.sql.SQLException: Could not retrieve transation read-only status server
  • 解决问题:搜索错误信息‘Could not retrieve transation read-only status server’

    得到结果是jdbc驱动包和mysql的版本对不上,目标库mysql是8.0.11版本,而datax中jdbc的版本是5.1.32


    开始驱动升级

  1. 第一步下载源码:

    https://github.com/alibaba/DataX/archive/master.zip下载。

    2.二步修改mysql-connector-java驱动的版本号:

  找到位于 {DataX_source_code_home}/mysqlreader/ 和 {DataX_source_code_home}/mysqlwriter/ 下的 pom.xml文件,将version的值改为8.0.X(可以直接搜索‘mysql-connector-java’快速定位,X写你自己想要的 版本号)

img

如果你只用到了mysql的写,可以只修改mysqlwriter目录下的xml文件。

3.第三步修改zeroDateTimeBehavior的值convertToNull 为 CONVERT_TO_NULL:

  编辑{DataX_source_code_home}/plugin-rdbms- util/src/main/java/com/alibaba/datax/plugin/rdbms/util/DataBaseType.java

  全文替换 convertToNull 为 CONVERT_TO_NULL;

​ 全文替换"com.mysql.jdbc.Driver"为"com.mysql.cj.jdbc.Driver",

4.第四步通过maven打包:(本人是参考Git上开发者提供的操作步骤来的)

下载maven并按装,配置环境变量

用maven重新编辑构建发布mvn -U clean package assembly:assembly -Dmaven.test.skip=true

在这里可以修改DataX目录下的pom.xml和package.xml,只构建打包需要的reader和writer.

打包成功后的DataX包位于 {DataX_source_code_home}/target/datax/datax/ ,查看datax/plugin/writer/mysqlwriter/libs/目录,已经包含新版的驱动jar包

拷贝整个 {DataX_source_code_home}/target/datax/目录下的datax目录,到需要用到服务器。

json格式如下:

{

    "job": {
            "setting": {
                "speed": {
                "channel": 1
                }
            },
      "content": [
         {
           "reader": {
           "name": "postgresqlreader",
           "parameter": {
           "connection": [
          {
          "querySql":["select t_month,t_code,t_type,t_name,t_value from mdl_ddpt_wjy.wjybjy_sy where t_month=\'$month\'"],
          "jdbcUrl": ["jdbc:postgresql://192.123.84.11:25308/DB_ZTK"]
          }
       ],
      "password": "Liantong12#$",
      "username": "renshedb1"
           }
    }, 
      "writer": {
                    "name": "mysqlwriter",
                    "parameter": {
                        "writeMode": "insert",
                        "username": "root",
                        "password": "Perfect1",
                        "column": [
                            "t_month",
                            "t_code",
                            "t_type",
                            "t_name",
                            "t_value"
                        ],
                        "session": [
                        	"set session sql_mode=\'ANSI\'"
                        ],
                        "preSql": [
                            "delete from wjybjy.wjybjy_sy where t_month=\'$month\'"
                        ],
                        "connection": [
                            {
                                "jdbcUrl": "jdbc:mysql://192.125.30.169:3306/wjybjy?useUnicode=true&characterEncoding=gbk&useSSL=false&serverTimezone=UTC",
                                "table": [
                                    "wjybjy_sy"
                                ]
                            }
                        ]
                    }
                }
    }]
      }
    }

其中mysqlwriter 中:

"jdbcUrl": "jdbc:mysql://192.125.30.169:3306/wjybjy?useUnicode=true&characterEncoding=gbk&useSSL=false&serverTimezone=UTC",

需要注意的几点:1.writer中不能带[]; reader中必须带[]。

2.需要加&useSSL=false&serverTimezone=UTC"

3."setting": {
"speed": {
"channel": 1
}
},

必须设置速度,但不能设置byte。

以上是关于datax日期为空报错的主要内容,如果未能解决你的问题,请参考以下文章

freemarker 表达式为空报错 遍历list 判空

「React Native」子组件Render中props为空报错问题

java将数据转换成json时,日期类型为空时报错, 我不想让报错 ,为空时 就直接转为空

os模块,sys模块,序列化模块,异常处理

Linq

datax字段名不一样