五分钟DMS数仓开发之AnalyticDB for PostgreSQL

本文介绍如何通过DMS数仓开发在AnalyticDB for PostgreSQL实例上做周期性数据分析。

前提条件

背景信息

云原生数据仓库AnalyticDB PostgreSQL(原HybridDB for PostgreSQL)是阿里云上一款流行的实时数据仓库产品,提供简单、快速、经济高效的PB级云端数据仓库解决方案。

录入实例并创建数据库和Schema

  1. AnalyticDB for PostgreSQL实例录入到DMS中,详情请参见云数据库录入

    说明

    管控模式请选择安全协同安全规则请选择adb-pg-default

  2. DMS左侧的实例列表中,右键录入的AnalyticDB for PostgreSQL实例,从弹出的列表中选择数据库管理

  3. 创建数据库。

    本文以创建名称为dms_adbpg_demo_db的数据为例。

    1. 单击创建库

    2. 配置数据库名字符集(CHARACTER SET)与校验规则(COLLATE)。

      说明

      若实例的管控模式为安全协同,您需要先配置“允许执行CREATE DATABASE命令”的安全规则,更多信息,请参见SQL变更

    3. 单击确认

    4. DMS左侧的实例列表上方单击刷新,在实例列表的AnalyticDB for PostgreSQL实例中,即可查看到已创建的数据库。

  4. 创建Schema。

    1. 单击dms_adbpg_demo_db数据库,双击名为public的默认Schema。

    2. 在弹出的SQL窗口中,输入如下命令并单击执行,创建名为dms_adbpg_demo_schemadms_testSchema。

      CREATE SCHEMA dms_adbpg_demo_schema;
      CREATE SCHEMA dms_test;

申请权限

DMS中,给当前登录用户申请AnalyticDB for PostgreSQL实例的相关权限后。

  1. 登录数据管理DMS 5.0
  2. 为当前登录用户申请dms_adbpg_demo_schemadms_test库-权限以及库-OWNER,详情请参见通过工单申请资产权限

    说明

    申请库-权限时,权限类型需要勾选查询导出变更

数仓开发

创建项目空间

  1. 登录数据管理DMS 5.0
  2. 在顶部菜单栏中,选择集成与开发(DTS) > 数据开发 > 数仓开发

    说明

    若您使用的是极简模式的控制台,请单击控制台左上角的2023-01-28_15-57-17.png图标,选择全部功能 > 集成与开发(DTS) > 数据开发 > 数仓开发

  3. 单击新建项目空间

  4. 新建项目空间对话框中,配置如下参数信息:

    类别

    配置项

    说明

    基本信息

    项目空间

    输入具有业务意义的项目空间名称,便于后续识别。

    说明

    可根据OLAP需求、数仓数据、业务场景建立项目空间。本文以dms_adbpg_demo_dw为例。

    模式

    选择标准模式

    说明

    系统默认模式,测试环境和线上环境隔离,在测试库上开发、调试,然后发布到线上库调度。

    描述

    输入对项目空间的详细描述,便于后续识别。

    数仓引擎

    数仓引擎

    选择测试库和线上库的数据库类型为AnalyticDB for PostgreSQL

    测试库

    搜索dms_test并选择测试库。

    线上库

    搜索dms_adbpg_demo_schema并选择线上库。

    高级配置

    试运行免安全规则检查

    支持开启和关闭操作,默认开启。开启时,任务流试运行和测试库表结构变更前不需要通过安全规则检查,直接允许执行。

    运维免审批

    支持开启和关闭操作,默认开启。开启时,任务流和表结构变更发布不经过审批流程,直接发布到线上库。

  5. 单击确认

    您创建的项目空间,显示在项目空间区域的项目空间列表中。

创建任务流

  1. 项目空间区域,单击目标项目空间名称dms_adbpg_demo_dw

  2. 在项目空间的左侧导航栏中,右键单击默认业务场景,选择新增任务流

    说明
    • 您可以右键单击默认业务场景,根据业务需要对其重命名。

    • 您也可以单击左侧导航栏中的jai,选择业务场景,新建业务场景,并在新建的业务场景中创建任务流。

  3. 新建任务流对话框中,输入任务流名称(本文以dw_task为例)和描述。

  4. 单击确认

创建数仓表

  1. 在项目空间的左侧导航栏中,单击任务流dw_task前的5展开2图标,展开任务流的下级目录。

  2. 右键单击,选择新建表

  3. 新建表区域,根据界面提示,分别新建数仓表demo1demo2

    说明

    新建表时,测试库和线上库都需要处于登录状态。

    demo1demo2的表结构如下所示。

    --create tables demo1 and demo2
    create table demo1
    (
      id integer,
      v integer
    );
    create table demo2
    (  
      id integer,
      v integer
    );

创建单实例SQL任务

  1. 在项目空间的左侧导航栏中,双击任务流dw_task,进入任务流详情页面。

  2. 在画布左侧任务类型列表中,拖拽两个单实例SQL任务节点到画布空白区域。

  3. 配置准备数据任务。

    1. 单击一个单实例SQL任务节点并选择重命名,将任务名称为Preparation

    2. 双击Preparation任务节点,在SQL区域,输入如下SQL语句:

      --insert data into demo1
      insert into demo1 values(1, 1);
      insert into demo1 values(1, 19);
      insert into demo1 values(2, 12);
      insert into demo1 values(3, 2);
      insert into demo1 values(3, 4);
      insert into demo1 values(4, 67);
    3. 单击试运行,测试任务的正确性。

      • 如果执行日志的最后一行出现status SUCCEEDED,表明任务试运行成功。

      • 如果执行日志的最后一行出现status FAILED,表明任务试运行失败,在执行日志中查看执行失败的节点和原因,修改配置后重新尝试。

  4. 配置数据聚合任务。

    1. 单击另一个单实例SQL任务节点并选择重命名,将任务名称为Aggregation

    2. 双击Aggregation任务节点,在SQL区域,输入如下SQL语句:

      ---run aggregation operation against demo1 and insert results into demo2
      insert into demo2
      select id, sum(v) from demo1 group by id;
    3. 单击试运行,测试任务的正确性。

      • 如果执行日志的最后一行出现status SUCCEEDED,表明任务试运行成功。

      • 如果执行日志的最后一行出现status FAILED,表明任务试运行失败,在执行日志中查看执行失败的节点和原因,修改配置后重新尝试。

  5. 返回任务流dw_task的详情页面,将两个任务连接起来。

    说明

    您可以通过画布工具栏的自动布局工具自动布局,优化任务流布局。

    任务流

  6. 单击试运行,测试任务流的正确性。

    • 如果执行日志的最后一行出现status SUCCEEDED,表明任务试运行成功。

    • 如果执行日志的最后一行出现status FAILED,表明任务试运行失败,在执行日志中查看执行失败的节点和原因,修改配置后重新尝试。

  7. 在任务流画布的下方,单击任务流信息

  8. 任务流信息页签的调度配置区域,打开开启调度开关,配置调度周期。

    表 1. 调度周期配置表

    配置项

    说明

    调度类型

    选择调度类型:

    • 周期调度:周期性调度任务,例如一周执行一次任务。

    • 调度一次:在指定时间执行一次任务,仅需要配置执行任务的具体时间。

    生效时间

    选择调度周期生效的区间,默认1970-01-01~9999-01-01,表示一直生效。

    调度周期

    选择调度任务的周期:

    • 小时:按设定的小时执行任务调度,需要配置定时调度。

    • :按每日一次的频率执行任务调度,需要配置每日调度的具体时间。

    • :以周为周期,每个指定天执行一次任务调度,需要配置指定时间和具体时间。

    • :以月为周期,每个指定天执行一次任务调度,需要配置指定时间和具体时间。

    定时调度

    提供了2种定时调度的方式:

    • 固定间隔时间调度:

      • 开始时间:执行任务的开始时间。

      • 间隔时间:执行任务的间隔时间,单位为小时。

      • 结束时间:执行任务的结束时间。

      例如,配置开始时间为00:00、间隔时间为6小时、结束时间为20:59,系统将在0点、6点、12点、18点执行任务。

    • 指定时间调度:选择执行任务的目标时间点。

      例如选择和0小时和5小时,系统将在0点和5点执行任务。

    指定时间

    • 如果调度周期为周,选择星期几执行任务,支持多选。

    • 如果调度周期为月,选择每月几号执行任务,支持多选。

    具体时间

    设置执行任务流的具体时间。

    例如配置02:55,系统将在指定天的0255分执行任务。

    cron表达式

    不需要手动配置,系统会根据您配置的周期、具体时间自动展现。

  9. 发布任务流。具体操作,请参见发布或下线任务流

查看任务流的执行状态

  1. 登录数据管理DMS 5.0
  2. 在顶部菜单栏中,选择集成与开发(DTS) > 数据开发 > 数仓开发

    说明

    若您使用的是极简模式的控制台,请单击控制台左上角的2023-01-28_15-57-17.png图标,选择全部功能 > 集成与开发(DTS) > 数据开发 > 数仓开发

  3. 项目空间区域,单击目标项目空间名称dms_adbpg_demo_dw

  4. 在项目空间的左侧导航栏中,双击任务流名称dw_task,进入任务流详情页面。

  5. 单击画布右上方前往运维,在任务流运维页面查看。

    • 在任务流运维页面上方,查看任务流的创建时间修改时间调度配置情况、是否发布状态等基本信息。

    • 单击运行记录页签,选择调度触发手动触发,查看任务流运行记录。

      说明
      • 调度触发:通过调度或指定时间的方式运行任务流。

      • 手动触发:通过手动单击试运行的方式运行任务流。

      • 单击状态列前的加,查看任务流运行日志。

      • 操作列中,单击执行历史,查看任务流的操作时间操作人员操作内容

      • 操作列中,对不同执行状态的任务流进行终止重跑暂停恢复置成功的操作。

        说明
        • 对于执行成功的任务流,可以进行重跑操作。

        • 对于执行失败的任务流,可以将该任务流运行记录的状态置为成功。

        • 对于执行中的任务流,可以终止或暂停任务流运行。

    • 单击发布列表页签,查看任务流的版本ID发布人发布时间、版本详情DAG

      您还可以选中任意2版本ID,单击版本对比,查看版本的对比信息。

总结

数仓开发如何在AnalyticDB for PostgreSQL上做周期性数据分析具有如下优势:

  • 数仓任务流只需一次定义,即可周期性地自动被调度执行,大大减少人工操作的成本

  • 周期执行数仓任务并提前产生出分析结果,业务应用可直接查询结果获得快速响应

  • 可灵活选择分析数仓任务的执行时间,避开AnalyticDB for PostgreSQL负载高峰期,合理利用AnalyticDB for PostgreSQL上的计算资源

  • 任务流执行时产生的中间结果可被复用,用于其他的数据分析任务,从而最大化AnalyticDB for PostgreSQL的资源利用。