首页 > 其他分享 >datax rdbmsreader

datax rdbmsreader

时间:2024-07-17 17:09:56浏览次数:13  
标签:-- 数据库 jar datax rdbmsreader where RDBMSReader


See: DataX/rdbmsreader/doc/rdbmsreader.md at master · alibaba/DataX



See also: Configuring Impala to Work with JDBC



1 快速介绍

RDBMSReader插件实现了从RDBMS读取数据。在底层实现上,RDBMSReader通过JDBC连接远程RDBMS数据库,并执行相应的sql语句将数据从RDBMS库中SELECT出来。目前支持达梦、db2、PPAS、Sybase数据库的读取。RDBMSReader是一个通用的关系数据库读插件,您可以通过注册数据库驱动等方式增加任意多样的关系数据库读支持。

2 实现原理

简而言之,RDBMSReader通过JDBC连接器连接到远程的RDBMS数据库,并根据用户配置的信息生成查询SELECT SQL语句并发送到远程RDBMS数据库,并将该SQL执行返回结果使用DataX自定义的数据类型拼装为抽象的数据集,并传递给下游Writer处理。

对于用户配置Table、Column、Where的信息,RDBMSReader将其拼接为SQL语句发送到RDBMS数据库;对于用户配置querySql信息,RDBMS直接将其发送到RDBMS数据库。

3 功能说明

3.1 配置样例

  • 配置一个从RDBMS数据库同步抽取数据作业:
{
    "job": {
        "setting": {
            "speed": {
                "byte": 1048576
            },
            "errorLimit": {
                "record": 0,
                "percentage": 0.02
            }
        },
        "content": [
            {
                "reader": {
                    "name": "rdbmsreader",
                    "parameter": {
                        "username": "xxx",
                        "password": "xxx",
                        "column": [
                            "id",
                            "name"
                        ],
                        "splitPk": "pk",
                        "connection": [
                            {
                                "table": [
                                    "table"
                                ],
                                "jdbcUrl": [
                                    "jdbc:dm://ip:port/database"
                                ]
                            }
                        ],
                        "fetchSize": 1024,
                        "where": "1 = 1"
                    }
                },
                "writer": {
                    "name": "streamwriter",
                    "parameter": {
                        "print": true
                    }
                }
            }
        ]
    }
}

  • 配置一个自定义SQL的数据库同步任务到ODPS的作业:
{
    "job": {
        "setting": {
            "speed": {
                "byte": 1048576
            },
            "errorLimit": {
                "record": 0,
                "percentage": 0.02
            }
        },
        "content": [
            {
                "reader": {
                    "name": "rdbmsreader",
                    "parameter": {
                        "username": "xxx",
                        "password": "xxx",
                        "column": [
                            "id",
                            "name"
                        ],
                        "splitPk": "pk",
                        "connection": [
                            {
                                "querySql": [
                                    "SELECT * from dual"
                                ],
                                "jdbcUrl": [
                                    "jdbc:dm://ip:port/database"
                                ]
                            }
                        ],
                        "fetchSize": 1024,
                        "where": "1 = 1"
                    }
                },
                "writer": {
                    "name": "streamwriter",
                    "parameter": {
                        "print": true
                    }
                }
            }
        ]
    }
}

3.2 参数说明

  • jdbcUrl

    • 描述:描述的是到对端数据库的JDBC连接信息,jdbcUrl按照RDBMS官方规范,并可以填写连接附件控制信息。请注意不同的数据库jdbc的格式是不同的,DataX会根据具体jdbc的格式选择合适的数据库驱动完成数据读取。

      • 达梦 jdbc:dm://ip:port/database
      • db2格式 jdbc:db2://ip:port/database
      • PPAS格式 jdbc:edb://ip:port/database

      rdbmsreader如何增加新的数据库支持:

      • 进入rdbmsreader对应目录,这里${DATAX_HOME}为DataX主目录,即: ${DATAX_HOME}/plugin/reader/rdbmsreader
      • 在rdbmsreader插件目录下有plugin.json配置文件,在此文件中注册您具体的数据库驱动,具体放在drivers数组中。rdbmsreader插件在任务执行时会动态选择合适的数据库驱动连接数据库。
      {
          "name": "rdbmsreader",
          "class": "com.alibaba.datax.plugin.reader.rdbmsreader.RdbmsReader",
          "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.ibm.db2.jcc.DB2Driver",
              "com.sybase.jdbc3.jdbc.SybDriver",
              "com.edb.Driver"
          ]
      }
      
      • 在rdbmsreader插件目录下有libs子目录,您需要将您具体的数据库驱动放到libs目录下。
      $tree
      .
      |-- libs
      |   |-- Dm7JdbcDriver16.jar
      |   |-- commons-collections-3.0.jar
      |   |-- commons-io-2.4.jar
      |   |-- commons-lang3-3.3.2.jar
      |   |-- commons-math3-3.1.1.jar
      |   |-- datax-common-0.0.1-SNAPSHOT.jar
      |   |-- datax-service-face-1.0.23-20160120.024328-1.jar
      |   |-- db2jcc4.jar
      |   |-- druid-1.0.15.jar
      |   |-- edb-jdbc16.jar
      |   |-- fastjson-1.1.46.sec01.jar
      |   |-- guava-r05.jar
      |   |-- hamcrest-core-1.3.jar
      |   |-- jconn3-1.0.0-SNAPSHOT.jar
      |   |-- logback-classic-1.0.13.jar
      |   |-- logback-core-1.0.13.jar
      |   |-- plugin-rdbms-util-0.0.1-SNAPSHOT.jar
      |   `-- slf4j-api-1.7.10.jar
      |-- plugin.json
      |-- plugin_job_template.json
      `-- rdbmsreader-0.0.1-SNAPSHOT.jar
      
    • 必选:是

    • 默认值:无

  • username

    • 描述:数据源的用户名。

    • 必选:是

    • 默认值:无

  • password

    • 描述:数据源指定用户名的密码。

    • 必选:是

    • 默认值:无

  • table

    • 描述:所选取的需要同步的表名。

    • 必选:是

    • 默认值:无

  • column

    • 描述:所配置的表中需要同步的列名集合,使用JSON的数组描述字段信息。用户使用代表默认使用所有列配置,例如['']。

      支持列裁剪,即列可以挑选部分列进行导出。

      支持列换序,即列可以不按照表schema信息进行导出。

      支持常量配置,用户需要按照JSON格式:
      ["id", "1", "'bazhen.csy'", "null", "to_char(a + 1)", "2.3" , "true"]
      id为普通列名,1为整形数字常量,'bazhen.csy'为字符串常量,null为空指针,to_char(a + 1)为表达式,2.3为浮点数,true为布尔值。

      Column必须显示填写,不允许为空!

    • 必选:是

    • 默认值:无

  • splitPk

    • 描述:RDBMSReader进行数据抽取时,如果指定splitPk,表示用户希望使用splitPk代表的字段进行数据分片,DataX因此会启动并发任务进行数据同步,这样可以大大提供数据同步的效能。

      推荐splitPk用户使用表主键,因为表主键通常情况下比较均匀,因此切分出来的分片也不容易出现数据热点。

      目前splitPk仅支持整形数据切分,不支持浮点、字符串型、日期等其他类型。如果用户指定其他非支持类型,RDBMSReader将报错!

      splitPk如果不填写,将视作用户不对单表进行切分,RDBMSReader使用单通道同步全量数据。

    • 必选:否

    • 默认值:空

  • where

    • 描述:筛选条件,RDBMSReader根据指定的column、table、where条件拼接SQL,并根据这个SQL进行数据抽取。例如在做测试时,可以将where条件指定为limit 10;在实际业务场景中,往往会选择当天的数据进行同步,可以将where条件指定为gmt_create > $bizdate 。

        where条件可以有效地进行业务增量同步。where条件不配置或者为空,视作全表同步数据。
      
    • 必选:否

    • 默认值:无

  • querySql

    • 描述:在有些业务场景下,where这一配置项不足以描述所筛选的条件,用户可以通过该配置型来自定义筛选SQL。当用户配置了这一项之后,DataX系统就会忽略table,column这些配置型,直接使用这个配置项的内容对数据进行筛选,例如需要进行多表join后同步数据,使用select a,b from table_a join table_b on table_a.id = table_b.id

    当用户配置querySql时,RDBMSReader直接忽略table、column、where条件的配置

    • 必选:否

    • 默认值:无

  • fetchSize

    • 描述:该配置项定义了插件和数据库服务器端每次批量数据获取条数,该值决定了DataX和服务器端的网络交互次数,能够较大的提升数据抽取性能。

    注意,该值过大(>2048)可能造成DataX进程OOM。

    • 必选:否

    • 默认值:1024

3.3 类型转换

目前RDBMSReader支持大部分通用得关系数据库类型如数字、字符等,但也存在部分个别类型没有支持的情况,请注意检查你的类型,根据具体的数据库做选择。

标签:--,数据库,jar,datax,rdbmsreader,where,RDBMSReader
From: https://www.cnblogs.com/kingron/p/18307835

相关文章

  • datax使用
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、datax的使用流程二、我踩的坑1.json格式相关2.mysql配置3.我自己蠢总结前言datax的使用流程和本人踩的坑一、datax的使用流程以mysql->mysql为例datax使用流程(macOS版本官网下......
  • DataX3的学习
    阿里云开源离线同步工具DataX3.0一.DataX3.0概览DataX是一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定高效的数据同步功能。设计理念为了解决异构数据源同步问题,DataX将复杂的网状的同......
  • ETL可视化工具 DataX -- DataX-Web安装 (三)
    引言DataX系列文章:ETL可视化工具DataX–简介(一)ETL可视化工具DataX–安装部署(二)3.1简介DataXWeb是在DataX之上开发的分布式数据同步工具,提供简单易用的操作界面,降低用户使用DataX的学习成本,缩短任务配置时间,避免配置过程中出错。用户可通过页面选......
  • ETL可视化工具 DataX -- 简介( 一)
    引言DataX系列文章:ETL可视化工具DataX–安装部署(二)1.1DataX1.1.1DataX概览DataX是阿里云DataWorks数据集成的开源版本,在阿里巴巴集团内被广泛使用的离线数据同步工具/平台。DataX实现了包括MySQL、Oracle、OceanBase、SqlServer、Postgre、HDFS、Hive、A......
  • 2.6倍!WhaleTunnel 客户POC实景对弈DataX
    作为阿里早期的开源产品,DataX是一款非常优秀的数据集成工具,普遍被用于多个数据源之间的批量同步,包括类似ApacheDolphinScheduler的Task类型也对DataX进行了适配和增强,可以直接在DolphinScheduler里面利用通用的数据源调用DataX进行数据批量同步。作为DolphinScheduler的社区支......
  • 异构数据源同步之数据同步 → DataX 使用细节
    开心一刻中午我妈微信给我消息妈:儿子啊,妈电话欠费了,能帮妈充个话费吗我:妈,我知道了,我帮你充当我帮我妈把话费充好,正准备回微信的时候,我妈微信给我发消息了妈:等会儿子,不用充了,刚刚有个二臂帮妈充上了我输入框中的(妈,充好了)是发还是不发?简单使用关于DataX,大家可以去看官网......
  • datax修改 hdfsReader源码实现空文件及目录为空时,程序退出不抛出异常
    最近在使用datax_202309时,有任务需要将hive的数据按天同步到mysql,由于同步的表由业务生成,故可能有的表当天是没有数据产生,就会抛出出现下面的错误:问题:datax读取hive分区表时,datax-hdfsReader读取空目录报错问题描述:com.alibaba.datax.common.exception.DataXException:Code:[......
  • DataX HiveReader
    DataXHiveReader来源:github-datax-hivereader1快速介绍Hivereader插件:从Hive表读取数据2实现原理实现方式是:根据配置的QuerySql,通过将查询结果保存到一张新的临时hive表中这种方式;然后获取临时表的hdfs文件地址,然后读取文件到缓冲区,最后删除临时的表。3功能说明Hiv......
  • datax 从 hive 同步数据配置
    DataXHiveReader1快速介绍Hivereader插件:从Hive表读取数据2实现原理实现方式是:根据配置的QuerySql,通过将查询结果保存到一张新的临时hive表中这种方式;然后获取临时表的hdfs文件地址,然后读取文件到缓冲区,最后删除临时的表。3功能说明Hivereader插件:从Hive表读取数据......
  • datax 抽取hive表到doris
    datax读取hive表有两种方式,一种是读取hdfs文件路径HDFSReader,因为hive是存储在hdfs上。第二种是读取hive表RDBMSReader。HDFSReader{"job":{"setting":{"speed":{"channel":3},"......