本文为您介绍DB2 Reader支持的数据类型、字段映射和数据源等参数及配置示例。

注意 DB2 Reader仅支持使用独享数据集成资源组,不支持使用公共资源组自定义资源组

背景信息

DB2 Reader插件实现了从DB2读取数据。在底层实现上,DB2 Reader通过JDBC连接远程DB2数据库,并执行相应的SQL语句,从DB2库选取数据。

DB2 Reader通过JDBC连接器连接至远程的DB2数据库,根据您配置的信息生成查询SQL语句,发送至远程DB2数据库,执行该SQL语句并返回结果。然后使用数据集成自定义的数据类型拼装为抽象的数据集,传递给下游Writer处理:
  • 对于您配置的tablecolumnwhere等信息,DB2 Reader将其拼接为SQL语句发送至DB2数据库。
  • 对于您配置的querySql信息,DB2 Reader直接将其发送至DB2数据库。

DB2 Reader使用的DB2驱动版本为IBM Data Server Driver for JDBC and SQLJ 4.11.77。DB2驱动和数据库服务之间的版本映射请参见官网文档

类型转换列表

DB2 Reader支持大部分DB2类型,但也存在个别类型没有支持的情况,请注意检查您的数据类型。

DB2 Reader针对DB2类型的转换列表,如下所示。
类型分类 DB2数据类型
整数类 SMALLINT
浮点类 DECIMAL、REAL和DOUBLE
字符串类 CHAR、CHARACTER、VARCHAR、GRAPHIC、VARGRAPHIC、LONG VARCHAR、CLOB、LONG VARGRAPHIC和DBCLOB
日期时间类 DATE、TIME和TIMESTAMP
布尔类
二进制类 BLOB

参数说明

参数 描述 是否必选 默认值
datasource 数据源名称,脚本模式支持添加数据源,此配置项填写的内容必须要与添加的数据源名称保持一致。
jdbcUrl 描述的是到DB2数据库的JDBC连接信息,jdbcUrl按照DB2官方规范,DB2格式为jdbc:db2://ip:port/database,并可以填写连接附件控制信息。
username 数据源的用户名。
password 数据源指定用户名的密码。
table 所选取的需要同步的表,一个作业只能支持一个表同步。
column 所配置的表中需要同步的列名集合,使用JSON的数组描述字段信息,默认使用所有列配置。例如[ * ]
  • 支持列裁剪,即可以导出部分列。
  • 支持列换序,即可以不根据表Schema信息顺序导出列。
  • 支持常量配置,您需要遵循DB2的SQL语法格式。例如,["id", "1", "'const name'", "null", "upper('abc_lower')", "2.3" , "true"]
    • id为普通列名。
    • 1为整型数字常量。
    • 'const name'为字符串常量(需要加上一对单引号)。
    • null为空指针。
    • upper(‘abc_lower’)为函数表达式。
    • 2.3为浮点数。
    • true为布尔值。
  • column必须显示您指定同步的列集合,不允许为空 。
splitPk DB2 Reader进行数据抽取时,如果指定splitPk,表示您希望使用splitPk代表的字段进行数据分片。数据同步系统会启动并发任务进行数据同步,以提高数据同步的效能:
  • 推荐splitPk用户使用表主键,因为表主键通常情况下比较均匀,因此切分出来的分片也不容易出现数据热点。
  • 目前splitPk仅支持整形数据切分,不支持浮点、字符串和日期等其它类型。如果您指定其它非支持类型,DB2 Reader将报错。
""
where 筛选条件,DB2 Reader根据指定的columntablewhere条件拼接SQL,并根据该SQL抽取数据。

在实际业务场景中,通常会选择当天的数据进行同步,可以指定where条件为gmt_create>$bizdatewhere条件可以有效地进行业务增量同步。如果该值为空,代表同步全表所有的信息。

querySql 在部分业务场景中,where配置项不足以描述所筛选的条件,您可以通过该配置型来自定义筛选SQL。当您配置该项后,数据同步系统会忽略tablecolumn等配置,直接使用该配置项的内容筛选数据。

例如,您需要在多表Join后同步数据,使用select a,b from table_a join table_b on table_a.id = table_b.id。当您配置querySql时,DB2 Reader直接忽略tablecolumnwhere条件的配置。

fetchSize 该配置项定义了插件和数据库服务器端每次批量数据获取条数,该值决定了数据同步系统和服务器端的网络交互次数,能够较大的提升数据抽取性能。
说明 fetchSize值过大(>2048)可能造成数据同步进程OOM。
1024

向导开发介绍

暂不支持向导开发模式。

脚本开发介绍

配置一个从DB2数据库同步抽取数据作业,使用脚本模式开发的详情请参见通过脚本模式配置任务
{
    "type":"job",
    "version":"2.0",//版本号
    "steps":[
        {
            "stepType":"db2",//插件名
            "parameter":{
                "password":"",//密码
                "jdbcUrl":"",//DB2数据库的JDBC连接信息
                "column":[
                    "id"
                ],
                "where":"",//筛选条件。
                "splitPk":"",//数据分片
                "table":"",//表名 
                "username":""//用户名
            },
            "name":"Reader",
            "category":"reader"
        },
        { 
            "stepType":"stream",
            "parameter":{},
            "name":"Writer",
            "category":"writer"
        }
    ],
    "setting":{
        "errorLimit":{
            "record":"0"//错误记录数
        },
        "speed":{
            "throttle":false,//是否限流
            "concurrent":1,//作业并发数
        }
    },
    "order":{
        "hops":[
            {
                "from":"Reader",
                "to":"Writer"
            }
        ]
    }
}

补充说明

  • 主备同步数据恢复问题

    主备同步问题指DB2使用主从灾备,备库从主库不间断通过binlog恢复数据。由于主备数据同步存在一定的时间差,特别在网络延迟等情况下,会导致备库同步恢复的数据不是一份当前时间的完整镜像,与主库有较大差别。

  • 一致性约束

    DB2在数据存储划分中属于RDBMS系统,对外可以提供强一致性数据查询接口。例如,一次同步任务启动运行过程中,有其它数据源写入数据至该库。由于数据库本身的快照特性,DB2 Reader完全不会获取到写入的更新数据。

    上述是在DB2 Reader单线程模型下数据同步一致性的特性,DB2 Reader可以根据您配置信息并发抽取数据,因此不能严格保证数据的一致性。

    DB2 Reader根据splitPk切分数据后,会先后启动多个并发任务完成数据同步。多个并发任务不属于同一个读事务且存在时间间隔。对于原始数据而言,多并发读取的快照数据可能存在不完整、不一致的情况。

    针对多线程的一致性快照需求,目前在技术上无法实现,只能从工程角度解决。工程化的方式存在取舍,在此提供以下解决思路,您可根据自身情况进行选择:
    • 使用单线程同步,即不再进行数据切片。缺点是速度比较慢,但是能够很好保证一致性。
    • 关闭其他数据写入方,保证当前数据为静态数据,例如锁表、关闭备库同步等。缺点是可能影响在线业务。
  • 数据库编码问题

    DB2 Reader底层使用JDBC进行数据抽取,JDBC天然适配各类编码,并在底层进行了编码转换。因此DB2 Reader不需您指定编码,可以自动识别编码并转码。

  • 增量数据同步的方式
    DB2 Reader使用JDBC SELECT语句完成数据抽取工作,因此可以使用SELECT…WHERE…进行增量数据抽取,方式如下:
    • 数据库在线应用写入数据库时,填充modify字段为更改时间戳,包括新增、更新、删除(逻辑删除)。对于该类应用,DB2 Reader只需要where条件后跟上一同步阶段时间戳即可。
    • 对于新增流水型数据,DB2 Reader在where条件后跟上一阶段最大自增ID即可。

    对于业务上无字段区分新增、修改数据的情况,DB2 Reader无法进行增量数据同步,只能同步全量数据。

  • SQL安全性

    DB2 Reader提供querySql语句交给您自己实现SELECT抽取语句,DB2 Reader本身对querySql不进行任何安全性校验。