ApsaraDB For OceanBase是阿里云和蚂蚁金服自主研发的金融级分布式关系数据库,本文将为您介绍ApsaraDB For OceanBase Writer的实现原理、参数说明及配置示例。

注意 ApsaraDB For OceanBase Writer仅支持使用新增和使用独享数据集成资源组,不支持使用默认资源组和自定义资源组

背景信息

ApsaraDB For OceanBase在金融行业创造了三地五中心的城市级故障自动无损容灾的新标准,在普通硬件上实现了金融高可用。同时具备在线水平扩展能力,是在功能、稳定性、可扩展性、性能方面都经历严格检验的国产数据库。

ApsaraDB For OceanBase Writer面向ETL开发工程师,通过ApsaraDB For OceanBase Writer从数仓导入数据至ApsaraDB For OceanBase。同时ApsaraDB For OceanBase Writer可以作为数据迁移工具,为数据库管理员等用户提供服务。

ApsaraDB For OceanBase Writer通过数据集成框架获取Reader生成的协议数据,根据您的配置生成相应的SQL插入语句。

使用限制

  • insert into...:当主键或唯一性索引冲突时,无法写入冲突的行。Oracle租户模式下仅支持insert into
  • insert into...ON DUPLICATE KEY UPDATE...:当主键或唯一性索引未冲突时,与insert into的行为一致。当主键或唯一性索引冲突时,新行会替换指定的字段。MySQL租户模式下支持insert into...insert into...ON DUPLICATE KEY UPDATE...
  • 目的表所在数据库必须是主库才能写入数据。
    说明 整个任务需要至少具备insert into...的权限。是否需要其它权限,取决于您配置任务时,在preSqlpostSql中指定的语句。
  • 建议您使用batch的方式批量写入数据,当行数累计到预定阈值时,再发起写入请求。
  • ApsaraDB For OceanBase包括Oracle和MySQL两种租户模式,您在配置preSqlpostSql时,需要符合对应租户模式的SQL语法约束,否则SQL语句可能执行失败。
  • ApsaraDB For OceanBase Writer通过OceanBase数据库驱动访问ApsaraDB For OceanBase,您需要确认驱动和您的ApsaraDB For OceanBase服务之间的兼容能力。数据库驱动使用如下版本。
    <dependency>
        <groupId>com.alipay.OceanBase</groupId>
        <artifactId>OceanBase-connector-java</artifactId>
        <version>3.1.0</version>
    </dependency>

参数说明

参数 描述 是否必选 默认值
datasource 如果您使用的DataWorks版本支持添加ApsaraDB For OceanBase数据源,即可在此处根据数据源名称引用您添加的ApsaraDB For OceanBase数据源。

包括jdbcUrlusername两种配置方式。

jdbcUrl 到对端数据库的JDBC连接信息,jdbcUrl包含在connection配置单元中。
  • 在一个数据库上只能配置一个值,不支持同一个数据库存在多个主库的情况(双主导入数据情况)。
  • jdbcUrl的格式和ApsaraDB For OceanBase官方一致,并可以连接附加参数信息。例如,jdbc:mysql://127.0.0.1:3306/database
username 数据源的用户名。
password 数据源指定用户名的密码。
table 需要同步写出的表名称,使用JSON的数组进行描述。
说明 table必须包含在connection配置单元中。
column 目标表需要写入数据的字段,字段之间用英文所逗号分隔。例如,"column": ["id", "name", "age"]
说明 column配置项必须指定,不能为空。
writeMode 控制写入数据至目标表使用的模式,包括insert into ON DUPLICATE KEY UPDATE
preSql 写入数据至目标表前,会先执行此处的标准语句。如果SQL中有需要操作的表名称,请使用@table表示,以便在实际执行SQL语句时,对变量按照实际表名称进行替换。
postSql 写入数据至目标表后,会执行此处的标准语句。
batchSize 一次性批量提交的记录数大小,该值可以极大减少数据同步系统与服务器端的网络交互次数,并提升整体吞吐量。
说明 fetchSize值过大(>2048)可能造成数据同步进程OOM。
1,024

向导开发介绍

暂不支持向导模式开发。

脚本开发介绍

使用脚本模式开发的详情请参见通过脚本模式配置任务

向ApsaraDB For OceanBase写出数据的JSON配置,如下所示。
{
    "type":"job",
    "version":"2.0",//版本号。
    "steps":[
        {
            "stepType":"stream",
            "parameter":{},
            "name":"Reader",
            "category":"reader"
        },
        {
            "stepType":"apsaradb_for_OceanBase",//插件名。
            "parameter":{
                "datasource": "数据源名",
                "column": [//字段。
                    "id",
                    "name"
                ],
                "table": "apsaradb_for_OceanBase_table",//表名。
                "preSql": [ //执行数据同步任务之后率先执行的SQL语句。
                    "delete from @table where db_id = -1"
                ],
                "postSql": [//执行数据同步任务之前率先执行的SQL语句。
                    "update @table set db_modify_time = now() where db_id = 1"
                ],
                "writeMode": "insert",
            },
            "name":"Writer",
            "category":"writer"
        }
    ],
    "setting":{
        "errorLimit":{
            "record":"0"//错误记录数。
        },
        "speed":{
            "throttle":true,//当throttle值为flase时,mbps参数不生效,表示不限流;当throttle值为true时,表示限流。
            "concurrent":1, //作业并发数。
            "mbps":"12"//限流
        }
    },
    "order":{
        "hops":[
            {
                "from":"Reader",
                "to":"Writer"
            }
        ]
    }
}