集星獭实践ETL高效对账场景

100 阅读9分钟

本文将介绍集星獭——服务编排在实际场景中的一个应用案例。服务编排能以可视化拖拉拽的方式,将业务流程拆分成小节点结构,并组合装配成新的编排流程,通过处理流程任务和数据传递,驱动业务流和数据流的高效运转。

需求简述

某全国性传媒公司,提出了一个紧急需求:因其分布在全国各地的门店会将每日的账单数据汇总同步到总部来,现在管理人员迫切需要知道 【T-1】日账单数据汇总的进度,即与监管机构的汇总数据相比,总部的汇总数据的差异,并给出账单数据不一致的门店信息和账单差异信息,定时汇报和生成数据报表。

需求分析

需求拆分:

  • 汇总数据获取:获取【T-1】日的汇总数据和监管数据。
  • 差异比对:将总部的汇总数据与监管机构的汇总数据进行比对,找出账单数据不一致的门店。
  • 差异信息报告:发送邮件通知和生成差异数据的报表,包括门店相关信息和差异信息。
  • 定时汇报:定时向相关人员汇报差异数据的对比结果。

细化步骤:

1 获取同步到总部的数据:从总部的数据库中获取每家门店的【T-1】日账单聚合数据包括日期、账单金额、账单数量等。

2 获取监管机构的汇总数据:从监管机构获取【T-1】日的账单数据汇总信息,包括日期、总账单金额等。

3 比对总部汇总数据和监管机构数据:将总部的汇总数据与监管机构的汇总数据进行比对,找出差异。

4 确定差异门店:根据比对结果,确定账单数据不一致的门店。

5 收集差异信息:收集与差异相关的门店信息和差异信息,如门店名称、账单额差异、账单数差异等。

6 定时汇报差异数据:根据需求设定的频率,定时向相关人员汇报差异数据,可以通过邮件、报表等方式进行汇报。

7 生成差异报表展示:将差异数据整理生成报表,包括门店相关信息和差异信息,以便展示和分析。

通过以上流程,可以实现门店账单数据与监管机构数据的比对,找出差异门店并汇报差异数据,以及生成差异报表进行展示。流程图如下所示:

需求实现

01 获取同步到总部的数据

根据上文的分析,已知每个门店的数据分时间分批次进行汇总的,因此如果需要获取这些汇总数据,需要将指定时间段的数据依据门店维度来进行聚合。门店同步到总部的数据存在在数据库中,应使用【DB查询】节点获取这些数据。

首先在SQL工具中调试获取数据的SQL语句,使其能够正确运行,如下所示(仅作为参考示例):

在【数据源管理】中,配置该数据库的连接配置,以备接下来的DB节点使用:

在编排定义中新增编排【STORE-门店数据统计-主程序】,新增【DB查询】节点并命名为【DB查询_数据库-A】。

数据源类型选择上一步配置的数据源信息,并粘贴测试完成的sql文本,点击【执行】按钮,查看是否配置正确,验证后即可保存节点信息。

02 获取监管机构的汇总数据

同理,作为整个对账流程的基准数据,同样需要通过【DB查询】节点获取保存在另外一个数据库中的监管机构汇总数据,将这个节点命名为【DB查询_数据库-B】,其界面配置如下:

03 比对汇总数据和监管机构数据

现在,两组需要对比的数据已经被获取到,下一步是进行对比找出差异的数据,如果按照普通的方式进行两层循环对比,实际的时间复杂度是O(n*m),伪代码如下:

该伪代码的思路是,遍历A的每个元素,然后在B中查找是否存在相同的元素。如果不存在,则将该元素添加到diff列表中。最后返回diff列表,即A和B的差异部分。

如果数据量较大,执行时间可能较长,不符合我们进行快速对账的初衷。因此,在衡量耗时和所占用存储后,我们决定使用时间复杂度是O(n)的对比方式来进行对比,伪代码如下:

该伪代码的思路是,使用集合(set)数据结构来存储A和B的元素,利用集合的快速查找特性,遍历A和B的元素,将不在对方集合中的元素添加到diff列表中,最后返回diff列表,即A和B的差异部分。由于集合的查找操作时间复杂度为O(1),因此总的时间复杂度为O(n)。

根据上述思路,我们在接下来的流程中创建两个循环节点,分别命名为【循环迭代—A数据映射到Redis】和【循环迭代—A数据和数据B对比】分别遍历数据A和数据B,在对比的过程中,将对比结果进行暂存。

将A数据存入Redis:

首先是处理【循环迭代—A数据映射到Redis】节点,根据上述步骤,我们需要将数据A暂存到Redis中,并为这些数据设置过期时间(暂存到数据库中也是可以的,这里是为了加快对比速度)。

创建新的子编排【STORE-门店数据统计-Redis存储数据】,新建节点【Redis_数据A存入Redis】,配置Redis数据源信息和存储的数据。

将B数据和A数据对比:

接下来,是处理【循环迭代_A数据和数据B对比】节点。在上述步骤中已经将A数据暂存,下一个步骤是遍历B数据,将B数据与A数据进行对比,并保存存在差异的数据信息。

创建新的子编排【STORE-门店数据统计-数据对比】,新建Redis节点【Redis_获取A数据】获取暂存的A数据,利用网关节点【网关(V2)门店数据对比】进行数据对比,根据对比结果走不同的处理流程,最后将结果暂存,整体流程如下所示:

实际编排节点实现如下:

04 汇总对比结果并发送邮件通知

经过上述的数据处理后,最终得到了暂存在数据库的对比结果,为了能够及时通知对应的负责人,需要将对比结果通过邮件的方式发送出去。新建消息节点【消息_邮件发送】,配置邮件消息参数和邮件模板所需数据,即可测试发送效果。

邮件提示效果如下所示:

经过以上步骤,最终的编排定义【STORE-门店数据统计-主程序】其界面配置如下:

05 定时汇报差异数据

自动生成对比日期:

在步骤1中,我们根据SQL语句获取了对比数据,而实际情况则是需要按天自动地获取对应日期的数据,我们使用表达式自动生成(T-1)的日期值,结果如下:

#assignTimeOffset(d,x,y) 获取指定日期偏移量后的日期,其中d为时间字符串,x为偏移量类型,值集为:year/年;month/月;days/日;hour/时;minute/分;second/秒;millisecond/毫秒,y为偏移量,整数。currentDate() 获取当前日期。

定时执行编排程序:

设置定时任务,每天10点执行数据对比。

之后每天都会准时执行,并发送对比结果。

06

生成差异数据报表

在上述步骤中,差异数据存储到了数据库中,接下来,利用集星獭底座能力【报表平台】将差异数据整理生成报表,以便展示和分析。

定义数据集:

编写sql查询语句,查询出需要展示为报表数据的字段。

报表定义:

新增【门店差异数据】报表定义,选取上一步定义的数据集,点击【初始化】列信息,完成列初始化。

报表查看:

在报表查看界面选取上述定义的报表【门店差异数据】,点击查询,即可查看报表数据

使用回顾

回顾上述需求的实现过程,我们通过服务编排将需求实现的流程拆分成多个小步骤,又将这些小步骤拆分成多个小节点,在实现这些小节点后,又将这些节点和步骤组合成一个完整的业务流程。

经过简单地节点拖拽和配置,我们快捷、高效地实现客户的需求,充分诠释了服务编排的高可用、易扩展和可视化的特点,而这些能力也为企业面对因业务增长而日益显现的技术需求保驾护航。

汉得企业级系统集成平台(中文名集星獭,英文名JeeStar),是一站式多系统集成、多云集成、多端集成、多协议集成、多设备集成、数据集成、页面集成的全域集成解决方案。集成平台沉淀了汉得多年ToB项目实施的系统集成经验,在消除企业信息孤岛、数据孤立、打通多源多端的数据断链及混合云对接等场景中提供了高效便捷的功能及策略方案。

联系我们

1.  如果您想了解集星獭更详细的功能介绍和产品信息,请查阅我们的产品文档。请在PC端打开 👉 

https://open.hand-china.com/document-center/doc/product/10167/10698?doc_id=217409&doc_code=120943


2.  如果您有疑问或者建议,可以通过开放平台进行工单反馈,问题分类请选择【产品/集星獭JeeStar】  👉

https://open.hand-china.com


3.  相关产品咨询或更多信息了解,欢迎联系我们

邮箱:jeestar@sys.hand-china.com