首页
看点啥
插画图片
首页 科技看点 (三)新一代数据湖仓工作流开发指南:从规范到实操全解析

(三)新一代数据湖仓工作流开发指南:从规范到实操全解析

2026-10-29 0

《新兴数据湖仓设计与实践手册:数据湖仓与 DataOps 开发规范(2025)》是一份面向数据工程师、数据架构师与企业数据团队的系统性实践指南,全面总结了当下湖仓一体架构在企业落地过程中的关键设计方法、开发规范与工程经验。本手册不仅覆盖项目规划、权限体系、工作流编排、ETL 与实时/离线融合开发模式,同时结合 WhaleStudio 与 Apache DolphinScheduler 的实际能力,为读者提供可在真实生产环境中直接复用的架构与流程参考。

本文为手册第三部分,重点讲解 数据湖仓工作流开发规范上,涵盖调度任务开发规范、逻辑任务开发规范、工作流配置参数、SQL脚本开发规范等,为工作流开发提供详细指南。

工作流是承载着一系列有组织的任务作业流程。它代表着一组完整的业务逻辑,每个特定的业务拆分成至少一个或多个存在依赖关系的工作流。同时,工作流也是执行调度的基本单位,工作流中的任务将通过工作流的手动执行或定时调度批量实例化。进行工作流开发时,应遵循以下规范标准:

wps_doc_15

wps_doc_16

WhaleStudio 工作流中可供使用的任务组件包括Shell, Cmd, Python, Procedure, SQL, Spark, Flink, Http, Hivecli, Informatica, MR, 数据质量, DataX, Sqoop, SeaTunnel, MLflow等数十种。这些任务之间可以通过编排工作流流程前后依赖执行和变量传递。在创建任务组件时,需要对每个组件配置调度参数以及执行脚本:

至此,用户已经完成了任务的基本调度参数配置。不同的任务组件有各自专属的配置。点击右侧边栏中的脚本,进入当前任务的IDE编辑器继续设置任务脚本。

wps_doc_17

工作流中提供逻辑任务组件处理依赖判断、条件检查、状态检查、嵌套流程、动态生成等流程逻辑。在调度执行中可根据其判断结果实现切换执行分支、自动暂停流程执行、循环执行流程等效果。

嵌套子流程

在流程中添加SUBPROCESS任务可实现当流程执行至该节点时,另外触发关联的工作流调度执行,在关联的工作流完成执行后,返回原工作流继续向后执行的效果。子流程可以选择本项目或跨项目下的任一工作流定义。子流程内允许再次嵌套子流程,将按照同样的运行逻辑执行。

wps_doc_18

依赖工作流、任务

DEPENDENT依赖任务用于检查业务上存在依赖关系的其他工作流或任务是否完成执行。在流程中添加依赖任务,当执行至该节点时就会对执行的工作流或者任务进行依赖检查,当检查到依赖对象已经完成执行后,DEPENDENT就会判断成功继续向后执行流程。在设置依赖的时候需要选择:

事件坚控触发

TRIGGER任务文件、消息、数据是否到达,当对象到达时触发后续流程执行。文件时填写具体的文件路径,开启切换租户后选择远程连接可以远程服务器的文件,需要在源中心先配置SSH连接远程服务器并授权当前项目;KAFKA消息时填写消息服务器和TOPIC相关信息;数据时需要配置对,象所在的数据库表以及SQL脚本,也需要在源中心先配置数据源的连接实例。

自动暂停流程(进阶功能)

当流程中的部分业务执行需要进行外部审批时,可以在流程中穿插BREAKING任务节点。当流程执行至该节点时将自动暂停工作流,并发送中断流程的告警通知。

状态条件判断(进阶功能)

CONDITION任务用于针对流程中的任务,根据其运行状态判断切换不同的下游分支执行。

条件判断(进阶功能)

SWITCH任务用于执行判断条件脚本,根据当次的条件脚本执行结果判断切换不同的下游分支执行,若没有条件符合时,则会运行默认分支。请使用javax.script.ScriptEngine.eval执行表达式填写判断条件。

动态生成实例(进阶功能)

如果您需要循环执行某个任务或某一段业务流程,每次循环需要传入不同的参数变量,那么可以使用DYNAMIC动态任务组件。Dynamic动态节点支持通过输入一组或多组的数值、数组、上游传递的参数,根据设置好的任务脚本,动态的生成"一个" 或 "多个task的组合"实例。

翻牌更换业务日期(进阶功能)

NEXT LOOP任务的效果是将指定的牌值(业务时间)翻至下一个牌值(业务时间),即翻牌节点执行后,会触发调度的业务日期的变更。关于牌的更多使用说明,可以参阅查询使用手册。

完成任务开发后,您可以通过直接运行、调度运行和API触发的方式实例化工作流。一个工作流定义可以同时生成多个工作流实例而工作流实例之间互不影响,可以单独进行运行维护和修改。WhaleScheduler的工作流版本管理,允许用户随时回退任一版本执行作业。

手动执行

在开发完成工作流和任务后,用户可以点击画布上或工作流定义列表中的立即运行工作流。在进行手动执行时,一般需要进行设置:

定时调度

为工作流设置定时调度,需要先进行定时的参数配置,再将定时策略与工作流进行绑定。完成绑定定时策略操作后,请将工作流进行上线。工作流上线后将在指定时间进行自动调度。请跟随以下操作步骤进行设置:

第一步:设置定时日历

在配置中心的日历管理中创建用于定时的调度工作日历:

第二步:设置定时策略

同样在配置中心的定时管理中,使用刚才的定时日历创建定时策略。若为每天定时调度,可以不创建日历。

第三步:为工作流绑定定时

完成定时的策略配置后,返回项目管理下的工作流定义,为完成开发的工作流绑定定时策略。

第四步:上线工作流等待调度

完成定时配置后,将当前工作流进行上线。工作流上线后将会在指定时间进行自动调度。

补数运行

补数执行可以高效的进行大批量的数据回填作业。在立即运行的参数配置页面,勾选补数开启补数模式。工作流将根据补数策略生成对应的调度实例进行数据回填。您可以灵活的控制补数的并发量,通过补数策略中的串行补数或并行补数模式,在短时间完成多天的回填任务。

完成设置后将根据所选的数据日期从开始到结束依次生成补数实例。

在选择SQL任务的时候,首先应该配置资源池,避免高并发对数据仓库有不必要的压力,然后再选择合适的数据连接,如果是多条SQL,有注释的情况,可以勾选相关选择。建议清空表的操作可以在前置SQL中使用,这样重试的时候不会清空表,如果需要每次重试都清空表,那么就在SQL中书写。如果需要把SQL的结果以邮件形式发出来,可以选择发送邮件。

wps_doc_19

具体SQL脚本规范如下:

1. 注释规范

  1. 文件头部注释

    • 脚本名称

    • 创建日期

    • 作者姓名

    • 数据处理目的

    • 来源表及目标表

    • 运行环境(如MySQL版本)

    • 修改历史

  2. 脚本内注释

    • 重要逻辑和复杂SQL段落需添加行内注释

    • 每个步骤前须说明其功能

    • 参数化配置部分需清晰描述用途

  1. 表别名

    • 简洁明了,使用表名的前几个字母。

    • 避免单字母(如 a、b),除非特殊情况。

  2. 列别名

    • 清晰表达列含义,尽量避免重名。
  3. 变量与参数

    • 使用全小写字母,单词之间用下划线分隔(如 start_date)。
  1. 语法规范

    • 关键字全部大写(如 SELECT、FROM)。

    • 保持缩进整齐,嵌套查询需每层缩进。

  2. 安全性规范

    • 使用事务控制(START TRANSACTION / COMMIT)。

    • 禁止直接删除数据表(如 DROP TABLE)。

    • 涉及删除或更新数据时,应先备份。

  3. 性能优化

    • 避免使用 SELECT *,明确指定需要的字段。

    • 优化索引使用,避免全表扫描。

例如如下案例,这样未来识别SQL的来源和目标会更加清晰:

\\-- 脚本名称: monthly_sales_summary.sql\\-- 创建日期: 2024-11-24\\-- 作者: 张三\\-- 数据处理目标: 汇总月度销售数据,包括订单数量和总金额。\\-- 来源表: sales_order, product_info, customer_info\\-- 目标表: monthly_sales_summary\\-- 运行环境: MySQL 8.0\\-- 修改历史:\\-- 2024-11-24: 初始版本\\-- 开始事务START TRANSACTION;\\-- Step 1: 删除目标表中当月数据,避免重复插入\\--来源表:monthly_sales_summaryDELETE FROM monthly_sales_summaryWHERE sales_month = DATE_FORMAT(CURDATE(), \\'%Y-%m\\');\\-- Step 2: 汇总销售数据并插入到目标表\\--来源表:sales_order, product_info, customer_infoINSERT INTO monthly_sales_summary (sales_month,product_category,customer_region,total_sales,total_revenue)SELECTDATE_FORMAT(o.order_date, \\'%Y-%m\\') AS sales_month, \\-- 订单月份p.product_category, \\-- 产品分类c.customer_region, \\-- 客户区域COUNT(o.order_id) AS total_sales, \\-- 销售数量SUM(o.order_amount) AS total_revenue \\-- 销售收入FROMsales_order o \\--来源表:订单信息JOINproduct_info p ON o.product_id = p.product_id \\--来源表:产品信息JOINcustomer_info c ON o.customer_id = c.customer_id \\--来源表:客户信息WHEREo.order_status = \\'COMPLETED\\' \\-- 只统计已完成订单AND o.order_date \\>= DATE_FORMAT(CURDATE(), \\'%Y-%m-01\\') \\-- 本月起始AND o.order_date \\< LAST_DAY(CURDATE()) + INTERVAL 1 DAY \\-- 本月结束GROUP BYp.product_category, c.customer_region;\\-- 提交事务COMMIT;

下篇预告:数据集成任务开发规范

",
喜欢(0)

上一篇

乱斗西游2盘古阵容如何搭配-乱斗西游2盘古如何搭配阵容

乱斗西游2盘古阵容如何搭配-乱斗西游2盘古如何搭配阵容

下一篇

智能浏览器:为AI智能体打造的无头浏览器自动化工具 - Openclaw Skills

猜你喜欢