全部产品
云市场

基于ADB和DMS企业版周期生成报表数据

更新时间:2020-04-13 17:28:00

背景介绍

  分析型数据库MySQL版(AnalyticDB for MySQL,下文中简称ADB)是阿里云上一款流行的实时数据仓库产品,它具有快、灵活、易用、超大规模和并发写入等特点,是企业数据分析的一款利器。但是面对用户周期性的复杂分析任务(如:按天或按小时生成数据报表),单纯使用ADB就不是很方便。本文将介绍ADB引擎与DMS企业版这对黄金搭档,通过DMS企业版中的数据开发功能,用户可以方便地创建ADB上的数据分析任务流,并对任务流进行周期调度,从而周期性地产生出数据分析结果(如:报表数据),供业务应用快速访问。引入DMS企业版数据开发功能之后,用户在ADB上做周期性数据分析可获得如下好处:

  • 任务流只需一次定义,即可周期性地自动被调度执行,大大减少人工操作的成本
  • 周期执行任务并提前产生出分析结果,业务应用可直接查询结果获得快速响应
  • 可灵活选择分析任务的执行时间,避开ADB负载高峰期,合理利用ADB上的计算资源
  • 任务流执行时产生的中间结果可被复用,用于其他的数据分析任务,从而最大化ADB的资源利用
  • 数据开发提供的数据迁移能力,可让ADB与其他数据源(如:OLTP数据库)之间的数据自由流动,方便历史数据导入ADB和分析结果回流在线业务库

操作步骤

前置条件

  • 用户已购买ADB实例和DMS企业版,并且已在DMS企业版的实例管理中录入了ADB实例
  • 业务数据库(即:存放待导入ADB做分析的数据)已录入DMS企业版
  • 用户在DMS企业版中已申请了ADB和业务数据库的相关权限,如:写入ADB需要ADB上的变更权限

创建数据开发任务流

下面介绍如何在DMS企业版数据开发工作空间里创建和配置报表生成的任务流。

创建数据导入任务

实现数据导入有多种途径,下面介绍两种常用的方法:

  DMS数据开发集成了数据迁移的能力,支持将一个/多个源库的数据迁移至目标库。下面介绍如何通过数据开发的“跨实例SQL”任务实现数据导入。

  首先,在DMS企业版里为源库(待导入数据的业务数据库)和目标库(ADB)设置DBLink。在本例中,我们将源库的DBLink名称为dblink_source;目标库的DBLink名称为dblink_adb。

  然后,我们进入数据开发的开发空间,创建出用于报表生成的任务流(名称为:生成天报表任务流),并在任务流中添加一个“跨实例SQL”任务节点(名称为:数据导入)。1

  编辑”数据导入“节点的内容,添加如下SQL语句。由于DMS企业版集成了跨实例查询能力,通过一个INSERT INTO语句即可完成数据从源库(dblink_source)到目标库(dblink_adb)的迁移。在该SQL语句中,${bizdate}是数据开发中的系统变量,指代周期性任务的业务日期,默认为运行日期减一天。表中的dt字段用于描述按天保存的记录,方便按天进行增量数据迁移。

  1. insert into dblink_adb.schema2.table2 (dt, column1, column2, column3, xxx)
  2. as select dt, column1, column2, column3, xxx from dblink_source.schema1.table1
  3. where dt = '${bizdate}';
  • 方法二:采用阿里云DTS的数据同步功能进行数据导入

  通过DTS数据同步,可将源库数据实时地同步到ADB目标库上。用户需要登录DTS的控制台进行同步任务的配置,操作步骤可参考DTS数据同步帮助文档。配置好同步作业之后,源库数据会实时写入ADB,因此,在数据开发中无需再添加”数据导入”任务节点。也就是说,用户可假设ADB中已经包含了源库中的数据,然后直接进入后续的报表任务的开发。

创建报表生成任务

  完成了数据导入的配置之后,我们就可以创建产生报表的数据分析任务了。编辑已创建好的任务流,添加“单实例SQL”任务节点,并在任务的“内容设置”tab中将数据库选为ADB数据库,即:以ADB作为引擎执行数据分析任务。单实例任务的数据库被选为ADB以后,相应的SQL需遵循ADB的语法,并且该SQL会最终被调度到ADB实例上执行。

  如果生成报表的逻辑非常复杂,则可分解为多个步骤,每个步骤对应一个任务节点。按任务的执行先后顺序将任务节点连接(编排)起来,最终形成一个任务流(如下图所示)。将复杂任务分解不但可以简化每个节点SQL的复杂度,避免SQL逻辑错误,还能通过合理的全局规划,在多人、多任务协作的数据开发场景下复用任务节点产生的中间数据,从而避免重复计算,这也是数据仓库的常见研发方式。2

任务流的执行

配置调度信息

  任务流创建完成以后,需要配置任务流调度信息,并开启调度。按具体的业务需求,可指定调度的周期(如:日),也可以指定任务流的具体执行时间和生效的起止时间。通过合理地指定任务流的执行时间,可均衡ADB实例上的负载,避开业务高峰,充分地利用ADB的计算资源。

  数据开发还提供了任务流的“试运行”功能,方便用户测试一个任务流的正确性。若试运行的结果与预期不符,用户可对任务流进行再编辑。3

查看任务流的执行状态

  开启了任务流的调度之后,数据开发平台会按调度配置自动运行任务流,产生出报表数据。若想了解任务流的执行状态,用户可进入“运行管理”进行查看。如果因某种原因任务流执行出错,在“运行管理”界面里还能查看到任务执行失败的原因,方便用户定位和解决问题。4

总结

  用户使用数据仓库的场景多种多样,本文介绍的周期性报表生成就是一个典型场景。ADB作为一款数据仓库的内核产品,拥有强大的存储和计算能力,再配合DMS企业版数据开发功能可轻松实现这一需求。通过数据开发,ADB也不再是一个数据孤岛,数据开发可以打通ADB与其他数据源,让数据在企业内自由流动和高效集成。相信ADB与数据开发的结合,能更方便和高效地挖掘出数据背后的价值,驱动业务的发展,创造更多的可能。