在大中型企业中,经常会存在多个分公司,各个分公司分别维护一套业务系统,各个业务系统的表结构一致,任务配置高度相似。通过此功能,可大幅提升同构异源表批量抽取场景下创建任务和运维任务的效率。
01
产品简介
EasyData是网易数帆打造的一站式数据开发治理平台,以DataOps为核心方法论,强调开发治理一体化,提供数据集成、数据开发、数据标准、数据资产地图、数据治理360等全方位能力,帮助企业完善数据规范、提升数据管理效率、提高数据质量,更好地沉淀企业数据资产、满足多种业务场景需求。
作为EasyData旗下的数据传输产品,数据传输支持离线同步、实时同步、本地文件导入等多种同步场景,提供了丰富的异构数据源之间高速稳定的数据同步能力,并针对数据传输的通用业务场景提供了高效的产品解决方案,帮助用户从容应对大数据量下的数据同步需求。
02
业务场景及用户痛点
2.1 业务场景
在大中型企业中,经常会存在多个分公司,各个分公司分别维护一套业务系统,各个业务系统的表结构一致,任务配置高度相似。需要通过数据传输任务,将各子公司业务系统中表结构一致的表同步至同一Hive表的不同分区。
2.2 用户痛点
如果按照每个业务表同步分别对应一个任务的方案,存在大量重复性的任务创建工作,且需要修改任务配置时需逐个任务调整,工作量大,存在漏改的风险。
如果按照所有业务表对应于同一个任务的方案,难以实现往同一Hive表的不同分区写入,且无法支持单个任务内对某个业务系统的重跑和补数据,任一业务系统需要重跑或补数据时,需要重新抽取所有业务系统的数据,任务耗时长,资源浪费严重。此外,部分用户存在业务上重要性低的表抽取失败时不影响下游依赖节点执行的需求,需求也无法满足。
03
应用实践案例
3.1 案例示例
某公司存在3个分公司:珠海、佛山、广州,每个MySQL实例分别存储一个分公司的数据。需要从各分公司的数据源分别抽取一张表结构相同的生产订单表,并写入同一Hive表的不同二级分区,一级分区为日期,二级分区为分公司编号。来源表库表名称的特征如下:库名与数据源一一对应,表名格式:表业务含义+分公司的生产制造基地编号(示例:生产订单表TISFC001+生产制造基地编号400,表全名:TISFC001400)。
以生产订单表TISFC001为例,每天凌晨抽取不同分公司的库(ndi_0_0、ndi_1_0、ndi_2_0)中300、400、500基地的数据到同一hive表dt=${azkaban.flow.1.days.ago}的不同二级分区base=300、base=400、base=500中。
3.2 实践流程概览
需要抽取不同数据源的库(ndi_0_0、ndi_1_0、ndi_2_0)中400、300、500基地的数据,至同一Hive表dt=${azkaban.flow.1.days.ago}的不同二级分区base=300、base=400、base=500中。
三个基地表抽取任务的来源与去向配置如下,可以发现:仅来源数据源、库、表,去向二级分区值存在差异。
在此案例中:
1)在项目中心(新),登记逻辑数据源,添加各分公司的物理数据源并打标。
2)在数据传输,会以珠海的生产订单表抽取任务为示例配置创建一个数据传输模板任务,把来源数据源、库、表,去向二级分区值用参数化方式表示。
3)在离线开发,会通过离线开发嵌套流节点,指定循环执行时每次循环的参数值,每个循环对应一个实例。
4)在任务运维中心,可以查看各循环的运行状态、并对单循环进行重跑和补数据。
3.3 实践流程
前置准备:珠海、佛山、广州基地的MySQL实例的数据源登记完成,数据源名称分别为:physical_mysql1、mysql2_physical、mysql3_physical。
Step1.项目中心(新):登记逻辑数据源,将多个基地的数据源关联为逻辑数据源
1)配置逻辑数据源标签
入口:项目中心(新)-项目组配置-数据源登记模板配置-逻辑数据源标签
注意:仅项目组负责人、项目组管理员有权限查看和编辑项目组配置模块。
操作说明:点击”添加“按钮添加逻辑数据源标签。
标签字段名称:Production_base
标签显示名称:生产基地
标签值域:珠海、佛山、广州
2)登记逻辑数据源
入口:项目中心(新)-数据源管理-登记逻辑数据源
配置项如下:
数据源名称:ERP系统_生产
数据源标识:erp_multibase
数据源标签:生产基地
添加物理数据源:添加名称分别为:physical_mysql1、mysql2_physical、mysql3_physical的物理数据源,并分别关联生产基地标签:珠海、广州、佛山。
Step2.离线开发:创建参数组,添加来源库名称、来源表名和去向Hive二级分区值的参数
Step3.数据传输:创建数据传输模板任务,来源数据源选择逻辑数据源+生产基地标签,来源库表和去向二级分区用参数组参数表示
由于需要抽取不同数据源的库(ndi_0_0、ndi_1_0、ndi_2_0)中400、300、500基地的数据,至同一Hive表dt=${azkaban.flow.1.days.ago}的不同二级分区base=300、base=400、base=500中,即每次调度时需要执行三个实例,实例仅来源数据源、库、表,去向二级分区值存在差异。
来源与去向配置如下:
在此案例中,仅需以珠海的生产订单表抽取任务为示例配置创建一个数据传输模板任务,实现来源数据源、库、表,去向二级分区值的参数化表示。
任务创建完成后,点击“保存并提交”,任务创建并提交完成!
任务试运行如数据符合预期,即可进入下一步!
Step4.离线开发:创建离线开发任务,拖入数据同步节并引用数据传输模板任务
1.创建离线开发任务,任务名称:ERP系统_生产订单表_模板任务
注意:离线开发任务请务必提交上线!
2.创建数据同步节点,节点引用的离线同步任务名称:ERP系统_生产订单表_模板任务
3.提交上线离线开发任务!
Step5.离线开发:创建离线开发任务,嵌套流节点循环执行
创建离线开发任务,任务名称:ERP系统_生产订单表_多生产基地抽取
离线开发任务拖入嵌套流节点,嵌套流节点引用Step4创建的离线开发任务:ERP系统_生产订单表_模板任务。
由于需要完成来自珠海、佛山、广州的共计3个生产基地表的抽取,所以需要执行3次循环,并在嵌套流节点中配置逐次循环的来源逻辑数据源标签值、来源库名、来源表名,去向二级分区值。
每次循环执行会生成一个新的实例,不同实例之间状态互相独立
试运行任务,点击“循环详情”可查看各循环的运行结果。
如数据符合预期,请提交上线并配置调度,任务配置流程到此成功完成!
Step6.任务运维相关操作:查看实例运行结果、重跑、补数据
(1)怎么查看调度过程中各循环的执行结果?
入口:实例运维-周期实例运维-节点列表-查看执行详情
可以查看任务调度的嵌套流节点每次循环的循环参数和实例执行状态。
(2)部分基地表抽取失败时,怎么实现仅重跑失败的循环?
入口:实例运维-周期实例运维-节点列表-查看执行详情
接下来请按重跑常规步骤完成剩余操作即可。
(3)如果只需对部分基地表的传输任务补数据,怎么实现仅对部分循环补数据?
入口:实例运维-补数据实例运维
勾选需补数据的离线开发任务,点击“设置”按钮
勾选需补数据的循环即可。
接下来请按补数据常规步骤完成剩余操作即可。
04
写在最后
通过此功能,可大幅提升同构异源表批量抽取场景下创建任务和运维任务的效率。未来,数据传输会围绕更多、更快、更好用的核心目标,持续扩展数据源类型,持续升级引擎版本,持续丰富通道策略,并持续围绕数据传输的通用场景打造高效易用的产品解决方案。