做一张员工信息报表,往往要查员工表、部门关系表和人员信息表。表关联起来以后,还要把性别编码换成中文、统一日期格式,处理空值和重复记录。这些数据处理工作可以交给 ETL 流程完成。
DMETL 提供了数据读取、清洗转换、装载和调度组件。一个流程从源表读到数据,经过查找、过滤和转换,最后写入目标表;服务器按配置执行,客户端负责设计和查看运行情况。
ETL 是 Extract、Transform、Load 的缩写,分别对应抽取、转换和装载。
| 环节 | 要解决的问题 | 员工信息整合中的例子 |
|---|---|---|
| 抽取 Extract | 从哪里读取,读哪些数据 | 读取员工表、部门关系表和人员信息表 |
| 转换 Transform | 怎样把源数据变成业务需要的数据 | 关联部门名称,把 M/F 转成“男/女”,统一日期格式 |
| 装载 Load | 写到哪里,怎样处理已有记录 | 写入员工汇总表,按员工编号匹配已有记录 |
抽取阶段确定表、字段和过滤条件。转换阶段处理字段映射、类型、关联关系和业务规则。装载阶段决定插入哪些记录、按什么条件更新,以及怎样处理删除。
例如,源字段叫 EMP_ID,目标字段叫 EMPLOYEE_ID,配置映射就能对应起来。但如果源字段长度为 200,目标只有 50,就需要决定是调整目标结构,还是把超长记录送到问题数据输出。
DMETL 分为客户端和服务器。客户端提供流程设计、工程管理、元数据管理和监控界面;服务器负责接收请求、执行流程、处理调度,并通过数据处理层访问不同的数据源。
元数据库保存数据源、流程等配置信息,目标数据库保存处理后的业务数据。流程配置丢失时,要恢复元数据;目标表数据出现问题时,则需要检查业务数据库和装载过程。
元数据导出能够保存流程和数据源配置,但不包含流程运行日志。需要保留元数据库全部内容时,可以使用数据库备份。
执行引擎采用多线程和流水线机制,转换中的处理步骤可以异步并发运行。 源端查询慢,下游节点就要等待读取;目标端写入慢,上游产生的数据则可能积压。看流程性能时,要结合节点处理量和源目标库负载,找到耗时的环节。
工程里有转换、作业和调度。转换处理数据,作业安排任务的顺序,调度设置执行时间。
| 对象 | 作用 | 示例 |
|---|---|---|
| 数据源与数据集 | 定义连接信息,以及需要访问的表、查询或文件对象 | 员工源库连接、目标汇总表 |
| 工程 | 组织相关转换、作业、函数、变量和调度 | 员工信息整合工程 |
| 转换 | 组织数据的读取、处理和装载 | 读取员工表,查找部门,清洗后写入目标 |
| 作业 | 控制转换及其他任务的执行顺序和条件 | 检查准备条件,执行转换,处理失败分支 |
| 调度 | 设置流程的执行时间和周期 | 每天业务低峰期执行 |
转换中的连接线传递数据,作业中的连线控制后续任务。成功线在前一节点成功后继续,失败线进入失败处理,完成线则无论成功或失败都会继续。条件线按配置的表达式判断是否执行下一步。
比如,装载成功后才做数据核对,可以用成功线连接两个步骤;失败时需要记录错误,就单独配置失败分支。使用完成线时,装载失败也会继续执行后面的步骤。
定时任务由服务器上的 ETL 引擎执行。作业绑定了调度,却一直没有运行,可以检查调度是否启用、引擎是否启动。
安装时,元数据库用于存放配置,源库和目标库用于读取、写入业务数据。这几处连接应分别准备好。
部署前通常需要准备这些信息:
安装手册支持图形安装和 Linux 字符安装。下面是字符安装的写法示意,文件名需要替换为实际安装包:
'./<DMETL安装包文件名>.bin' -i
随后按向导完成授权验证、组件和目录选择、元数据库及系统服务配置。
cd '<DMETL安装目录>/server'
./dmetl_start.sh
出现 Metadata engine started 日志,表示手册所述的服务器启动过程完成。前台运行时,输入 close 可以正常停止服务;系统服务方式通过配套管理脚本启停。
全量处理读取选定范围内的全部数据,适合初始化、一次性迁移或规模可控的定期重建。增量处理获取上次处理后发生的变化,并把对应的新增、更新、删除应用到目标端。
初始化时要建立源目标数据的基线。增量表读取和装载组件提供“基表同步”,用于先保持基础数据一致,再同步后续变化。 源端持续写入时,还需要安排全量与增量的衔接,处理初始化期间产生的变化。
CDC 指变化数据捕获。DMETL 手册中的触发器、影子表等方式,都可以把捕获结果写入 CDC 辅助表。
| 增量方式 | 怎样捕获变化 | 选用时需要关注什么 |
|---|---|---|
| 触发器 | 在源表建立触发器,将变化和操作信息写入 CDC 表 | 创建权限、源端写入影响、需要跟踪的列 |
| 影子表 SHADOW | 保存一个时间点的表数据,与后续源表比较 | 辅助表空间、比较周期、扫描成本 |
| 时间戳 | 利用记录随新增或修改而更新的版本字段,与辅助表比较 | 版本字段必须可靠更新;手册中的“时间戳”不只指日期时间 |
影子表比较的是两个时点的数据状态。从这种实现方式可以推知,记录在两次比较之间多次修改,中间状态未必会被保留下来。需要保留逐次变更历史的业务,应选择并验证符合要求的捕获方式。
手册中的时间戳方式,会比较版本字段、唯一列和时间戳辅助表。如果数据库不自动维护版本字段,就要在新增、修改记录时更新它。
运行后可以从作业和转换实例查看状态、起止时间及节点处理量。有节点失败,就结合该节点日志定位;流程成功结束,则继续核对目标表和问题数据输出。
重跑范围应结合提交方式、增量进度和已有数据确定。自动重连、磁盘缓存及断点续传按所用组件配置,连接中断后的恢复结果也应在测试环境验证。
先确认作业是否绑定调度、调度是否启用,再查看 ETL 引擎状态和 START_ETL_ENGINE。
按捕获方式检查基表初始化、唯一定位列、监测字段和目标写入策略。时间戳方式检查版本字段是否更新;影子表和 MD5 方式检查比较周期及辅助对象状态。需要重新初始化 CDC 时,先查清当前进度和目标数据,再安排重建基线。
文章
阅读量
获赞
