乐趣区

关于数据库:数仓ETL系统给强大的心脏配上超级流水线

摘要: 在数据仓库平台建设过程中,数据的加载、卸载,各层数据模型之间的数据流转,业务规定的实现等等数据加工过程都会以 ETL 工作的形式实现。

本文分享自华为云社区《给弱小的“心脏”配上“超级流水线”- GaussDB(DWS) 数据仓库平台 ETL 零碎建设计划》,原文作者:babu1801。

一、前言

在数据仓库平台建设过程中,数据的加载、卸载,各层数据模型之间的数据流转,业务规定的实现等等数据加工过程都会以 ETL 工作的形式实现。构建 ETL 子系统是数据仓库系统实施的一个十分重要的环节,在仓库平台建设过程中搭建一个残缺、规范的 ETL 子系统是数据仓库平台建设的基础性指标之一。

ETL 是 Extraction(数据抽取),Transform(数据转换)和 Loading(数据加载)这三个数据处理动作的缩写,也是晚期数据仓库建设的数据流转解决程序,因而造成的专用术语沿用至今。然而随着作为数据仓库外围的数据库引擎技术的一直倒退,ETL 模式也在一直倒退和扭转,逐步造成了 E -L-T,E-T-L- T 等不同模式。对于 GaussDB DWS 为代表的 MPPDB 数据仓库平台,则多以 ELT 或是 ETLT 模式为主来构建 ETL 子系统。

二、ETL 子系统逻辑参考架构

ETL 子系统的建设目标是将企业中的扩散、零乱、规范不对立的异构数据源的业务数据整合到一起,进行必要的荡涤和转换,造成高质量的对立的数据模型,或者是便于用户查问,剖析和摸索的维度模型。

图 1 数据仓库子系统参考架构

2.1 数据抽取 (Extraction)

数据抽取是从数据仓库的上游零碎(通常是外围零碎,业务零碎或内部零碎)进行全量或增量数据抓取的过程。而随着企业外部信息底层架构的欠缺和数据平台性能的划分,不同平台通常采纳松耦合的形式进行关联。传统中下游零碎间接到上游零碎进行数据抽取的这种形式并不合乎以后技术的发展趋势。一方面,上游零碎间接到上游零碎进行数据抽取操作牵涉到权限的凋谢治理,减少了上游零碎的数据安全危险。另一方面,自身数据抽取操作也该当在业务零碎本身失常业务实现后的工夫窗口进行,以防止数据抽取时对失常作业流程的资源竞争。因而数据抽取这个环节的操作,通常是上下游零碎进行接口协商,由上游零碎依照接口标准进行数据卸载操作。或者对于更成熟的企业,会构建对立的数据交换平台来实现企业外部对立的数据抽取 / 卸载工作。

对于数据仓库平台来说,数据抽取的工作更多的是造成对立的接口标准。

2.2 数据转换 (Transform)

狭义上的数据转换包含数据荡涤,数据关联加工,数据标准化解决,数据汇总聚合等操作。大部分基于业务规定和数据模型的数据转换操作在 MPPDB 数据库内实现比在数据库外的 ETL 服务器上进行实现效率更高。而这种转换操作在数据库内通过 SQL 实现 T 过程,也比通过 ETL 工具实现 T 过程更具备标准化和开放性,适宜业务人员参加 T 过程的开发,校验。

2.3 数据加载 (Loading)

对于数据仓库而言,不仅仅是数据加载,还包含数据卸载,也就是 Loading 和 Unloading 过程。典型的场景就是在数据达到的高峰期进行大量的文件加载入库的操作。而库内数据加工实现后,及时地进行数据卸载操作,造成接口文件推送给上游零碎。所以高效地批量数据加载和卸载操作是数据仓库 ETL 零碎要面对的次要挑战之一。而随着客户对实时数据仓库的需要越来越广泛,数据库和音讯队列,数据流组件之间的实时数据加载和卸载的技术则是以后 ETL 零碎构建时面临的又一个技术挑战。

三、ETL 子系统的两种实现架构

依靠 GaussDB(DWS) 数据库构建 ETL 零碎个别有两种实现形式:重 ETL Server 计划和 MPPDB 计划。如下图

图 2 两种架构示意图

3.1 重 ETL Server 计划

这种计划借助专业化的 ETL 软件:Informatica, DataStage, Kettle 等软件,采纳分布式的 / 基于共享存储的 ETL 服务器集群形式部署 ETL 软件。在执行 ETL 工作的时候,数据从 MPPDB 读取进去,数据处理过程在 ETL 服务器实现,解决完后果再推送到数据库服务器,其中有些操作能够通过 SQL Push down 在数据库内实现。

这种计划的特点在于整个 ETL 开发和部署过程图形化操作和脚本化操作形式联合,基于工具过程的开发也能够对 ETL 过程进行基于元数据的血统剖析,影响性剖析;作业自动化编排,调度方面 ETL 工具的性能弱于业余的调度软件。

基于 ETL 工具计划对于 ETL 开发过程来说须要业余的开发人员,要对 ETL 工具自身有很深刻的理解,从这方面来说,过于专业化的工具门槛不利于企业外部的业务专家和剖析人员染指 ETL 开发过程。而 ETL 方面对于软硬件的投入老本也是须要纳入考量的一个问题。

3.2 MPPDB 计划

  • 本计划中 ETL 服务器轻量化,生产环境个别提供主备服务器防止单点故障即可。次要特点如下:
  • 利用 MPPDB 并行处理引擎,海量数据 ETL 解决效率更高。
  • ETL 过程 SQL 模板化,疾速开发和迭代的过程代价低;
  • 汇总层和集市层的 ETL 解决逻辑个别和业务规定强相干,SQL 规范对于业务人员开发门槛低
  • 与第三方 ETL 服务器解耦,通过工具封装,能够防止适度依赖某一个 ETL 工具;
  • 须要对 ETL 脚本模板进行定制化封装式开发,为运维,优化,数据治理等过程提供底层数据。

3.3 简略比照

重 ETL Server 计划适宜基于文件的数据荡涤类 ETL 工作:对于字符集的转换解决;依照接口标准对接口数据的预处理(判断文件大小,记录行数等文件信息和属性方面的数据质量检查);文件的分组,拆分,压缩,解压缩等;以及延长进来的文件监控和传输性能。

MPPDB 计划实际上就是基于 SQL 的实现计划,适宜数据规范化解决:如业务编码转换,业务逻辑主键生成,合乎业务标准的数据转换解决;数据转换解决:汇总,聚合,过滤,关联,拆分,转换等。

四、GaussDB(DWS)ETL 零碎实现要点

对于 GaussDB(DWS) 而言,大多数场合下举荐采纳 MPPDB 计划。实现这种计划实际上要实现 ETL SQL 模板的封装,把 ETL 开发过程与内部 ETL 调度零碎的联合进行分层解决。通过模板形式实现与调度软件,和操作系统的接口封装,把 SQL 实现业务的模块封装在 GSQL 工具中,凋谢给业务人员和开发人员,令其聚焦在业务实现自身,而不必在意外部环境对于 ETL 过程操作的影响。

4.1 基于 MPPDB 的 ETL 环境逻辑视图

图 3 逻辑视图

  • ETL 调度

数据仓库平台的 ETL 作业系统是一种后盾非交互方式运行的批量数据处理系统。ETL 作业调度是将数据仓库零碎中运行的各种后台作业自动化,并监督和管制作业的运行。应用调度软件实现作业调度。作业能够散布在多个服务器平台上,可能设定作业定义、依赖关系、程序关系、工作组关系等,不便地对作业进行主动调度、运行和治理。

调度监管平台能够图形形式动静监督和管制作业的运行,对作业执行中呈现的谬误 / 正告提供具体的信息。

  • ETL 脚本封装

GSQL 是执行 SQL 的工具,然而与调度软件之间的联合还有肯定的性能缺失,如参数解析,日志解析,异样解决等,所以须要对 GSQL 进行必要的封装,进步和调度软件之间的符合度。

  • gsql 模板

对加工解决的 etl 过程进行形象,总结,造成算法模板。

指定必要的输出参数,设定会话启动的公共参数,为后续的优化和跟踪埋点打桩。

  • 调用模式

调度工具 ->Python 或其余脚本工具模板 ->GSQL->{.gsql}

4.2 GSQL 封装

图 4 GSQL 封装示意图

减少封装的必要性:

GSQL 和调度软件解耦:调度软件都具备调用 Python/Perl/Shell 脚本的能力,通过脚本封装,把 GSQL 和调度软件解耦,升高 GSQL 和调度软件的适配兼容性危险;

封装模板须要考量的性能点:

  • 调度命令到 GSQL 运行命令的转换:

调度命令绝对简略,和业务逻辑相干:如业务子系统代码,算法模板代码,数据日期等;

GSQL 的运行参数不须要或不该当裸露在调度零碎接口下:如登录明码,verbose 参数等级等与业务无关的或者为了便于运维,性能跟踪的额定参数;

  • 登录明码加密解密:

GSQL 登录明码不容许明文存储,须要密文形式保留在 ETL 服务器上,执行时候也须要避免出现在后盾命令行中被 ps 指令查看到;

  • 异样解决:

GSQL 脚本运行出错后的异样解决性能:如重跑,告警告诉等;

  • 运行日志解析:

GSQL 的运行日志解析:针对 GSQL 脚本中不同语句,不同事务的执行工夫解析跟踪,谬误,告警代码的解析跟踪,为性能剖析提供最具体的底层数据;

五、小结

本文对数据仓库构建 ETL 子系统进行了初步介绍,阐明了以后较为支流的两种 ETL 子系统实现架构,比对 MPPDB 数据库的 ETL 架构进行了比照阐明。最初对 GaussDB(DWS) 下的 ETL 子系统的实现要点进行了梳理,重点对 etl 实现的逻辑视图以及 GSQL 封装的性能要点进行了论述。在今后的篇章,作者会对 gsql 的具体封装实现的最佳实际做个更为具体的介绍。

点击关注,第一工夫理解华为云陈腐技术~

退出移动版