整库同步

概述

整库同步是帮助提升用户效率、降低用户使用成本的一种快捷工具,本质上是一种批量配置同步任务的方式。假设数据库有100张表,原本可能需要配置100次数据同步任务,整库同步功能可以一次性完成100个同步任务的配置。

支持的数据源类型

目前可以支持的数据源包括:

  • MySQL

  • Polardb for MySQL 8

  • Oracle

  • SQLServer

  • PostgreSQL

  • DB2

  • 达梦

  • Greenplum

  • TiDB

  • GBase 8a

  • ClickHouse

  • 目前仅支持其他数据源至离线开发自带的Hive表配置整库同步,不能向其他Hive库,或其他类型的数据源配置整库同步

  • 当离线开发自身的引擎连接了LibrA、Greenplum等非Hadoop的引擎时,也不支持向这些引擎配置整库同步

配置整库同步

配置整库同步的入口在「数据源」页面,在待同步的数据源点击「整库同步」按钮,进入整库同步页面。
整库同步的配置包括:

  • 待同步表:将数据源指定的数据库下的所有表,以表格的形式展现出来,可以根据实际需要批量选择;

  • 高级设置

    • 表名转换:可填写表名中原有的字符,替换后的字符,例如将 ab 替换为 ods_ab 注意,表名替换中,目前会将表名所有匹配到的地方都做替换,例如表名为 abc_ab_table ,按以上规则,会被替换为 ods_abc_ods_ab_table

    • 字段名转换:原理与表名转换类似,依然会存在同个字符可能会被多次替换的情况,例如配置字段名转换规则为d->od,则MySQL中字段名address将会被转换为aododress

    • 字段类型转换:源表的字段类型转换为Hive表的字段类型

高级设置中,目前尚不支持表名前统一加前缀等操作,需注意表名可能存在多次替换的问题
  • 生效日期:整库同步生成的每个任务的生效日期

  • 具体时间:整库同步生成的每个任务的具体时间

  • 同步方式

    • 增量(根据日期字段):使用同步任务的「数据过滤」功能,根据用户填写的增量日期字段自动拼接SQL,抽取前一天的数据。使用增量方式后,系统将对每张表使用同样的增量字段,配合离线开发调度参数(${bdp.system.bizdate})形成针对每天的数据抽取条件,例如MySQL的拼接(用户点击「发布任务」按钮后,会先对增量字段进行检查,若字段不存在,则此表会配置失败):

-- MySQL
STR_TO_DATE('${bdp.system.bizdate}', '%Y%m%d') <= id
  AND
 id < DATE_ADD(STR_TO_DATE('${bdp.system.bizdate}', '%Y%m%d'), interval 1 day)
配置增量抽取时,源库每张表的增量字段名需保持一致,若无法保持一致,可分批次分别配置,否则会导致SQL拼接失败
  • 全量:不拼接增量抽取SQL,全量抽取各表的数据

    • 并发配置:为了对数据源进行保护,避免同一时间点启动大量数据同步作业带来数据库压力过大,可选择分批上传,例如:从每日0点开始,每1小时启动3个数据库表同步

  • 间隔时间:每隔xx小时同步多少张表

    • 是否保存配置:保存配置后,可在「数据源-操作-同步历史」按钮中找到历史上配置过的整库同步任务与配置结果,系统仅保留最近5次的历史记录

    • 发布任务进度:点击「发布任务」,系统将逐个生成同步任务,可在待同步表的「任务状态」一列查看每张表发布的结果,包括成功或失败信息

    • 同步历史:同步历史的入口在「数据源-操作-同步历史」按钮,系统仅记录勾选了保存同步配置,否则不会保留历史记录

任务生成的步骤

整库同步批量生成任务,按照如下步骤进行处理,每个任务单独检查,其中部分失败不会影响其他任务的生成

任务生成规则

用户完成配置,点击「发布任务」按钮时,会按照如下规则批量生成同步任务:

  • Hive表的表名、字段名和字段类型根据高级配置生成,如果没有填写高级配置,则与源表的结构完全相同。分区字段名为pt,格式为yyyyMMdd

  • 生成的同步任务,所在目录为:clone_database>数据源名称>数据源名称2hive_表名中找到生成的任务,然后对其进行更加个性化的编辑操作

  • 生成的数据同步任务是按天调度的周期任务,会在第二天凌晨自动运行,传输速率为1M/s

  • 若目标表名、任务名已存在,则该任务生成失败

  • 若增量字段不存在,则该任务生成失败,并提示「日期分区字段在表中不存在」

字段类型转换

创建目标表会根据源库的字段类型,自动转换为Hive的字段类型,规则如下所示:

1576479766680 e3dc9444 d411 41bf ac5e 0713b630d3e2

提交任务

  • 除了创建同步任务,系统还会自动创建一个虚节点,并将其他同步任务作为本任务的下游任务,方便用户执行补数据操作

  • 完成以上操作后,将虚节点和其他同步任务执行一次提交操作

  • 若用户对同一数据源多次操作补数据,则系统仅会创建一个虚节点,新创建的同步任务都会被置为此虚节点的子任务

其他说明

由于数据库的表设计规范性的问题,整库上传具有一定的约束性,具体如下:
仅提供每日增量、每日全量的上传方式

如果您需要一次性同步历史数据,则此功能无法满足您的需求,故给出以下建议:

  • 建议您配置为每日任务,而非一次性同步历史数据。您可以通过调度提供的补数据来对历史数据进行追溯(从虚节点及其下游开始补数据),这样可避免全量同步历史数据后,还需要做临时的SQL任务来拆分数据。

  • 如果您需要一次性同步历史数据,可以在任务开发页面进行任务的配置,然后单击运行,完成后通过SQL语句进行数据的转换,因为这两个操作均为一次性行为。

  • 如果您每日增量上传有特殊业务逻辑,而非一个单纯的日期字段可以标识增量,则此功能无法满足您的需求,为了更方便地增量上传,建议您在创建所有数据库表的时候都有:gmt_create或gmt_modify的字段,同时为了效率更高,建议增加id为主键。

整库上传提供分批和整批上传的方式

  • 为了保障对数据库的压力负载,整库上传提供了分批上传的方式,您可以按照时间间隔把表拆分为几批运行,避免对数据库的负载过大,影响正常的业务能力。以下有两点建议:

    • 如果您有主、备库,建议同步任务全部同步备库数据。

    • 批量任务中每张表都会有1个数据库连接,上限速度为1M/s。如果您同时运行100张表的同步任务,就会有100个数据库进行连接,建议您根据自己的业务情况谨慎选择并发数。

  • 如果您对任务传输效率有自己特定的要求,此功能无法实现您的需求。所有生成任务的上限速度均为 1M/s。