更新时间:2024-10-18 GMT+08:00
分享

源端为PostgreSQL,目的端为DWS

本章节适用于配置实时处理集成作业的PostgreSQL到DWS链路,期望将源端1个或多个PostgreSQL实例的数据实时同步到目的端为DWS数据库的场景。

  • 整库:适用于将1个源端为PostgreSQL实例上的多个数据库表实时同步到1个目标端为DWS实例的多个库表。
  • 分库分表:适用于将多个源端为PostgreSQL实例上的多个分库中的分表实时同步到1个目标端为DWS实例的汇聚表。

支持单机/主备PostgreSQL实例类型下的全量和增量数据迁移。

该链路目前需申请白名单后才能使用。如需使用该链路,请联系客服或技术支持人员

约束限制

  • 适用PostgreSQL 9.4+版本。
  • 不支持源端无主键表迁移。
  • 不支持增量位点启动,即增量启动不支持用户修改时间,默认使用启动时的时间。
  • 不支持DDL能力。
  • Postgres数据源复制槽数达到上限时,无法执行新的作业,可以通过设置max_replication_slots的数值提高复制槽的使用上限或手动删除复制槽(Postgres数据源不支持自动删除复制槽)解决,手动删除请参见PostgreSQL数据源如何手动删除复制槽?

整库场景

  1. 源端配置。
    添加数据源,选择需要迁移的PostgreSQL表。
    图1 选择库表

    库与表均支持自定义选择,即可选择一库一表,也可选择多库多表。

  2. 目标端配置。
    图2 配置目标端参数
    • 源库表和目标匹配策略:
      • Schema匹配策略:配置目标数据Schema的匹配策略,使数据按照规划迁移至目标库。
        用户需要提前创建对应数据库,否则可能导致后续自动建表失败。
        • 与来源库同名:会迁移至目的端对应与来源库同名的数据库中。
        • 自定义:支持用户指定目的端库名,也支持通过#{source_db_name}给源数据库名添加自定义字段变成目的端DWS表的库名。

          如果包含内置参数#{source_db_name},则会迁移至DWS目的端对应Schema中,如果不包含该内置参数,则会迁移至与源端数据库同名的Schema中。

      • 表匹配策略:配置目标数据表的匹配策略,使数据按照规划迁移至目标表。同步对象为库级同步时,无此配置项。

        用户不需要提前创建对应数据表,后续作业时自动建表。

        • 与来源表同名:会迁移至目的端对应与来源表同名的表中。
        • 自定义:支持用户指定目的端表名,也支持通过内置参数#{source_table_name}给源表名添加前后缀,变成目的端Hudi表的表名。
      • 写入模式:选择数据写入模式。

        UPSERT MODE为批量更新入库模式,COPY MODE为DWS专有的高性能批量入库模式。

      • 批写最大数据量:根据表数据大小和作业内存使用,适当调整,数据范围1-10000000。
      • 定时批写时间间隔:数据定时入库的间隔时间,时间1-1000, 单位为秒。
      • 高级配置:通过设置以下参数配置数据写入的高级属性。
        • sink.buffer-flush.max-size:根据作业配置内存和数据大小设置批写最大内存,单位:Mb。
        • sink.case-sensitive:是否对字段大小写字母敏感,可选:true/false,当写入模式为COPY MODE,主键名称含大写字母时,需要设置为true。
    • 源表与目标表映射:同步对象为库级同步时,无此配置项。
      图3 配置源表与目标表映射
      • 附加字段编辑:单击操作列“附加字段编辑”可为迁移后的DWS表中增加自定义字段,附加字段会成为一个新的字段加入到DWS表的建表中。
        表1 附加字段值支持情况

        类型

        示例

        常量

        -

        内置变量

        • 源端host ip地址:source.host
        • 源端schema名称:mgr.source.schema
        • 源端table名称:mgr.source.table
        • 目的端schema名称:mgr.target.schema
        • 目的端table名称:mgr.target.table

        字段变量

        -

        udf方法

        • substring(#col, pos[, len]): 截取源端col列的子串, 范围在[pos, pos+len)。
        • date_format(#col, time_format[, src_tz, dst_tz]): 将源端col列按time_format格式化, 可选转换时区。
        • now([tz]): 获取指定时区的当前时间。
        • if(cond_exp, str1, str2): 满足条件表达式cond_exp时返回str1, 否则返回str2。
        • concat(#col[, #str, ...]): 拼接多个参数, 可为源端列或字符串。
        • from_unixtime(#col[, time_format]): 将unix时间戳按time_format格式化。
        • unix_timestamp(#col[, precision, time_format]): 将时间转成unix时间戳, 可显式定义时间格式及转换后精度。

        对于新建的表,用户可以在已有的源表字段基础上添加附加字段,可以自定义字段名(如custom_defined_col)、选择字段类型、填写字段值。

        用户可同时添加多个附加字段。

      • 自动建表:单击“自动建表”为列表中的表按照已配置规则自动建表。成功后表建立方式会显示为使用已有表。

分库分表场景

对于不同库上表可以聚合为一个表,同步时会被统一写入一个目标表中,匹配的分库分表需要保证结构的一致性。

  1. 源端配置。
    图4 添加逻辑表

    已添加的逻辑表支持预览,单击操作列的预览即可。

    预览逻辑表,源表数量越多,等待时间可能越长,需要几分钟到几十分钟不等。

    图5 逻辑表预览
  2. 目标端配置。
    • 源库表和目标匹配策略:
      • 目标端库名:自定义目标端库名。
      • 表匹配策略:默认为与源端逻辑表同名,不可更改。
      • 写入模式:选择数据写入模式。

        UPSERT为批量更新入库模式,COPY为DWS专有的高性能批量入库模式。

      • 批写最大数据量:根据表数据大小和作业内存使用,适当调整,数据范围1-10000000。
      • 定时批写时间间隔:数据定时入库的间隔时间,时间1-1000, 单位为秒。
      • 高级配置:通过设置以下参数配置数据写入的高级属性。
        • sink.buffer-flush.max-size:根据作业配置内存和数据大小设置批写最大内存,单位:Mb。
        • sink.case-sensitive: 是否对字段大小写字母敏感,可选:true/false,当写入模式为COPY MODE,主键名称含大写字母时,需要设置为true。
    • 源表与目标表映射:
      图6 配置源表与目标表映射
      • 附加字段编辑:单击操作列“附加字段编辑”可为迁移后的DWS表中增加自定义字段,附加字段会成为一个新的字段加入到DWS表的建表中。
        表2 附加字段值支持情况

        类型

        示例

        常量

        -

        内置变量

        • 源端host ip地址:source.host
        • 源端schema名称:mgr.source.schema
        • 源端table名称:mgr.source.table
        • 目的端schema名称:mgr.target.schema
        • 目的端table名称:mgr.target.table

        字段变量

        -

        udf方法

        • substring(#col, pos[, len]): 截取源端col列的子串, 范围在[pos, pos+len)。
        • date_format(#col, time_format[, src_tz, dst_tz]): 将源端col列按time_format格式化, 可选转换时区。
        • now([tz]): 获取指定时区的当前时间。
        • if(cond_exp, str1, str2): 满足条件表达式cond_exp时返回str1, 否则返回str2。
        • concat(#col[, #str, ...]): 拼接多个参数, 可为源端列或字符串。
        • from_unixtime(#col[, time_format]): 将unix时间戳按time_format格式化。
        • unix_timestamp(#col[, precision, time_format]): 将时间转成unix时间戳, 可显式定义时间格式及转换后精度。

        对于新建的表,用户可以在已有的源表字段基础上添加附加字段,可以自定义字段名(如custom_defined_col)、选择字段类型、填写字段值。

        用户可同时添加多个附加字段。

      • 自动建表:单击“自动建表”为列表中的表按照已配置规则自动建表。成功后表建立方式会显示为使用已有表。

相关文档