DataX 使用rdbms插件同步数据库

Posted 福州-司马懿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DataX 使用rdbms插件同步数据库相关的知识,希望对你有一定的参考价值。

Hana数据库

简介

SAP HANA是一款支持企业预置型部署和云部署模式的内存计算平台 ,提供高性能的数据查询功能,用户可以直接对大量实时业务数据进行查询和分析,而不需要对业务数据进行建模、聚合等。SAP内存数据库的数据并不是只在内存里,也会不停写到硬盘里

教程

https://www.w3cschool.cn/sap_hana/

引用库信息

名字备注
Driver Classcom.sap.db.jdbc.Driver
HANA JDBC Driverngdbc.jar下载地址 https://repo1.maven.org/maven2/com/sap/cloud/db/jdbc/ngdbc/2.9.12/
JDBC URLjdbc:sap://***.***.***.***:30015?reconnect=true

maven依赖

<dependency>
    <groupId>com.sap.cloud.db.jdbc</groupId>
    <artifactId>ngdbc</artifactId>
    <version>2.9.12</version>
    <type>pom</type>
</dependency>

DataX同步数据到hana

有时候我们要同步某些数据库,但发现DataX并未提供该数据库插件。此时,我们可以通过rdbms插件进行同步,该插件使用了jdbc方式进行数据同步,因此可以适用于绝大部分的数据库

如果声明和jar包放在源文件中,则需要重新编译;若直接在生成的target文件下修改,则可以直接使用。

查阅说明

datax暂时没有独立插件支持hana,需要使用通用RDBMS;这里是写入hana,使用rdbmswriter。查看官网介绍文档:https://github.com/alibaba/DataX/blob/master/rdbmswriter/doc/rdbmswriter.md
在这里插入图片描述
在这里插入图片描述

声明驱动

需要修改~/Documents/DataX-master/rdbmswriter/src/main/resources/plugin.json,注册数据库驱com.sap.db.jdbc.Driver

{
    "name": "rdbmswriter",
    "class": "com.alibaba.datax.plugin.reader.rdbmswriter.RdbmsWriter",
    "description": "useScene: prod. mechanism: Jdbc connection using the database, execute select sql, retrieve data from the ResultSet. warn: The more you know about the database, the less problems you encounter.",
    "developer": "alibaba",
    "drivers":["dm.jdbc.driver.DmDriver", "com.sybase.jdbc3.jdbc.SybDriver", "com.edb.Driver", "com.sap.db.jdbc.Driver"]
}

添加驱动

~/Documents/DataX-master/rdbmswriter/src/main/libs 目录下添加驱动 ngdbc-2.9.12.jar
在这里插入图片描述

重新编译

由于是修改源码,一定要重新编译,命令为mvn -U clean package assembly:assembly -Dmaven.test.skip=true,才会影响到target目录

生成配置文件

在dataX目录下,执行命令 python target/datax/datax/bin/datax.py -r mysqlreader -w rdbmswriter 生成配置文件,然后进行修改。

注意:rdbms不能使用writeMode参数,要手动去掉

{
    "job": {
        "content": [
            {
                "reader": {
                    "name": "mysqlreader", 
                    "parameter": {
                        "column": [], 
                        "connection": [
                            {
                                "jdbcUrl": [], 
                                "table": []
                            }
                        ], 
                        "password": "", 
                        "username": "", 
                        "where": ""
                    }
                }, 
                "writer": {
                    "name": "rdbmswriter", 
                    "parameter": {
                        "column": [], 
                        "connection": [
                            {
                                "jdbcUrl": "", 
                                "table": []
                            }
                        ], 
                        "password": "", 
                        "preSql": [], 
                        "session": [], 
                        "username": "", 
                        "writeMode": ""
                    }
                }
            }
        ], 
        "setting": {
            "speed": {
                "channel": ""
            }
        }
    }
}

可能遇到的错误

写入模式(writeMode)配置有误

在这里插入图片描述查看源码https://github.com/alibaba/DataX/blob/master/rdbmswriter/src/main/java/com/alibaba/datax/plugin/reader/rdbmswriter/RdbmsWriter.java,可知rdbms的writeMode仅支持insert,所以不用填,填了反而会报错

在这里插入图片描述

未找到库

声明并添加好驱动之后,一定要重新编译 mvn -U clean package assembly:assembly -Dmaven.test.skip=true。否则配置不会被更新到 target 目录
注意:重新编译后job目录下的文件都会被清空!!!
在这里插入图片描述

没找到对应驱动jar包

检查~Documents/DataX-master/target/datax/datax/plugin/writer/rdbmswriter/libs目录下是否存在该jar包
检查~Documents/DataX-master/target/datax/datax/plugin/writer/rdbmswriter/plugin.json是否正确设置驱动
在这里插入图片描述

以上是关于DataX 使用rdbms插件同步数据库的主要内容,如果未能解决你的问题,请参考以下文章

datax实现mysql数据同步

去O数据同步助手-DataX

去O数据同步助手-DataX

Datax官方笔记总结

使用dataX将数据从Mysql数据库同步到Oracle数据

阿里异构离线数据同步工具/平台DataX