火山引擎数据飞轮实践:在电商场景中,如何建设全链路数据血缘?

news/2024/7/7 17:29:03/文章来源:https://www.cnblogs.com/bytedata/p/18283829
数据作为新型生产要素,正支撑企业的数智化转型。但企业数字化建设也存在管理成本高、数据产品使用门槛高、数据资产价值不够的问题,其原因在于业务和数据之间没有形成双向良性驱动。
 
结合新时代企业数字化转型需求,火山引擎基于字节跳动十余年数据驱动的实践经验,对外发布企业数智化升级新范式“数据飞轮”,帮助企业实现数据驱动。
 
具体来说,数据消费是数据飞轮的核心,通过一个又一个具体业务中的数据消费,在上层“业务应用轮”实现决策科学、行动敏捷,带来业务价值提升;在下层“数据资产轮”,也通过频繁的数据消费和业务收益,有的放矢建设高质量、低成本的数据资产,更好支撑业务应用。
 
构建扎实的数据资产轮能更好支撑企业上层数据应用。那么,在企业实践中,究竟应该如何做呢?
 
作为数据资产轮的支撑产品之一,火山引擎DataLeap在资产建设治理层面,能提升数据质量,实现效率提升和成本优化。本文将从电商角度出发,聚焦在数据血缘建设层面,具体介绍如何建设血缘底座、电商场景的血缘应用实践。

数据全链路血缘介绍

在电商场景中,我们建设数据全链路血缘的核心目的,是对数据从源头到终端全过程进行追踪和管理。
以零售行业举例,数据包括商品数据、物流信息、用户反馈等,其全流程包括:
  • 通过数据采集,如业务日志、埋点、表格、存储;
  • 经过ETL数据加工,包括离线和实时两种任务;
  • 再到数据服务中的物理表、逻辑表,以及服务编排;
  • 最后透传到数据应用,比如接口、页面、报表、指标等。
在业务发展过程中,我们常常会遇到如下问题:
首先,随着业务的快速发展,数据不断膨胀。数据量到大,但数据产生的实际价值在哪里?数据血缘则可以帮助我们更好评估数据价值,并在满足业务需求的同时,控制存储计算资源的膨胀速度。与此同时,数据血缘还能够衡量数仓建设的优劣,并且做好数仓体系化建设。
第二,如何做好数仓变更监控?在数仓的日常开发过程中,我们经常会遇到上下游变更,变更后希望能及时、准确地衡量数据变更的影响。由于数据来源变更丰富,需要通过数据血缘将数据变更及时通知下游关联方。
第三,数仓研发提效。我们希望通过数据血缘及时完成表重构,理清字段的来源以及加工口径,并且进行任务精准回溯。
最后,通过数据血缘助力指标体系化建设,保证指标一致性,避免重复开发。在指标体系化建设中,数据血缘可以帮助将新增的指标绑定到已有的指标上。

解决数据不断膨胀的问题

针对数据膨胀的问题,数据血缘可以明确数据流转路径,优化资源配置。血缘关系可以精确衡量数仓对业务的价值,实现数据治理,控制资源膨胀,并且能够精准地完成影响面评估。

帮助数仓开发提效

随着业务发展,我们经常面临模型重构的问题,比如一些旧表要切换到新表。数据血缘分析可以帮助我们快速定位模型重构的切入点,提升数据处理的效率。基于算子级的血缘关系,数据血缘可以实现任务的精准回溯优化,减少数据修复流程时间,减少错误传播。

保障数据一致性

在数据一致性方面,通过全链路血缘等手段,我们实现了指标从定义到生产消费的完整自动化流程,提升了指标的管理效率,减少了人为失误。通过血缘分析加解析能力,我们能识别出重复加工的字段,优化数据流程,从而减少不必要的资源消耗。
 

如何构建数据血缘底座

血缘底座是全链路数据血缘的基石。接下来,我将从整体架构、质量评估体系和应用层血缘三个方面来介绍血缘底座的建设。

整体架构

整体架构-关系图谱
 
如上图所示,关系图谱中有一些关键特点,如点、边、节点存储和边存储等。
  • 点(Node):代表各种类型的节点,如指标、任务等
  • 边(Edge):表示节点之间的血缘关系,如数据流向、任务依赖等
  • 节点存储:每个节点类型对应一个或多个图中的点
  • 边存储:节点间的血缘关系通过边来表示,边包含方向和类型信息
一般数仓加工链路会进行分层,如ODS贴源层、DWD明细层、DWS汇总层等,最终透传到数据产品的前端页面。
如果用传统的离线数仓来实现以上架构,且有明确关系的表模型,是非常困难的。最终,我们选择了字节自研图数据库来实现血缘数据的底层存储。

血缘质量度量体系

血缘质量是整个全链路血缘从应用到实践的最核心评测标准。
举个例子,如果某个业务要基于字段级的血缘回溯下游,但是由于血缘质量不达标,预期要回溯10个任务,最终查出来11个或者9个,出现一定误差。
在电商场景中,我们搭建了一套完整的血缘质量度量体系,从血缘解析的准确率、成功率、覆盖率、查询能力等维度来度量血缘的数据质量,评估血缘质量的健康程度,并且定期自动化检验血缘数据与实际数据流向的一致性。我们通过定期巡检机制发现bad case,并随之更新、迭代对应的血缘模块。

应用层血缘

应用层调度链路
 
应用层数据采集方案
 
应用层血缘,与常规理解的数仓链路血缘不同。
 
对于数据链路血缘来说,我们针对异构数据源的SQL进行解析,在数据平台上维护了很多丰富的元数据,可以更好解析数仓之间的链路关系。但是对于应用层则不同,在电商场景中,我们维护了很多数据应用,如果逐一推进应用接入全链路血缘能力,成本很高。数据流转是从产品页面经过HTTP或者thrift接口请求后端服务,经过数据服务层打到数仓底表。
 
右图将该过程划分层级,通过低代码平台搭建前端页面、业务产品页面、数据产品页面,再通过接口的形式请求后端服务,最终映射到在one service上,形成对应的API,其底层就是刚才提到的数仓链路的血缘。
 
为了解决业务应用接入成本高的问题,我们实现了网关层自动参数上报,通过日志平台以及网关平台、服务平台间的合作,在前端请求接口时会自动上报URL refer参数,再通过日志采集系统把所有前端请求的日志采集下来,经过清洗,最终实现应用程序血缘的数据采集。
 
但在整个过程中,我们会遇到爬虫乱传参数、不传参数等问题,对血缘质量造成污染。为了解决该问题,我们通过脚本对域内的爬虫进行补全。通过自定义爬虫脚本,对全域的前端接口进行抓包,替换外部污染的数据。
 

电商场景的血缘应用实践

接下来重点介绍一下血缘应用在电商场景的实践,包含新旧表切换、字段口径探查、指标自动化拆解三个部分。

新旧表切换

开发人员使用IDE修改一个方法时,会改方法名、方法的入参以及方法的出参,IDE则提供代码级的替换能力。
而对于数仓研发人员来说,没有类似的能力可以做切换的操作。一般在重构中,数仓研发人员拿到要切换的表,通过人工查询,获取切换旧表影响的任务,进而手动拉群,做切换表的通知,下游的接收人收到消息后,更改任务代码,并进行数据比对,如果发现有问题需要再与上游进行沟通,如果没有问题则上线代码。
基于一站式新旧表切换功能,上述人工操作可以由平台自动完成,大幅降低了切换的工作量,提高了工作效率和质量。
通过平台能力,数仓研发人员只需要在系统中录入旧表信息,以及新旧表的映射关系,就可以自动生成切换后的代码。在生成代码、跑数之后,平台还支持与旧表的历史数据进行比对。对比结果无误的情况下,下游无需做任何调整。除此之外,平台还提供了批量切换的能力,可以同时进行多张表的切换。
对于下游切换者来说,原本由于切换收益不大,导致操作意愿不强。但现在通过平台提供的切换收益量化的能力,如SLA和稳定性提升,提升下游切换意愿。
下面介绍技术实现。用户输入需要切换的旧表之后,平台通过旧表的产出任务进行解析,获取语法树文件,并基于语法树文件做裁剪、替换。基于用户输入的新旧表映射关系生成切换后的SQL,再提交到比对平台,最终完成整体比对。
在这一过程中,用户不希望原生代码遭到太多破坏,如注释被溶解,或对一些写法造成影响。针对这种情况,我们会在SQL解析前把注释的关键信息保留下来,拿到比对完成的SQL之后再做补全,最终把原始任务的SQL尽可能相似地提供出来。

字段口径探查

作为一名数仓研发人员或BI分析师,经常需要阅读其他人代码,如果代码复杂度高,对读码的专业性要求会比较高。为解决这个问题,平台提供可视化页面辅助转译。
 
如上图中的例子,将一段SQL转译成图的形式,可以更好帮助不写代码的角色更好理解这段SQL。
 
在大多数使用场景中,用户只想看到某个字段,或者某几个字段在任务中的加工逻辑。平台能力实现了在任务中裁剪出所需字段加工逻辑的能力,最终裁剪掉超90%的无关代码。原本需要从100行代码中提取出来某个字段的加工口径,现在借助平台能力,只需要阅读几行代码就可以完成需求。
此外,我们希望将整个数仓链路中分层维护的SQL进行溶解。
 
一个传统数仓链路有ODS层、DWD层、DWM层、APP层等等,每层都会维护一段SQL。用户需要梳理APP层的SQL里面的某个字段从ODS层哪里来的,过程比较复杂。
基于平台的能力,我们把4个任务的SQL先展开成一段大SQL,再进行内敛,最终变成从ODS层溯源到APP层的字段。平台内敛之后进行裁剪。代码的展开和收敛,是通过自研的一套语义解析引擎实现,该引擎已经申请了专利。
核心步骤如下:
 
  • 第一步,对SQL算子进行优化,平台功能必须对算子级别SQL进行裁剪;
  • 第二步,语法糖溶解,一段SQL要不断内敛,基于血缘关系找到上游表,放到替换掉这个实际的物理表名称中,在这个过程中,就会涉及到很多语法糖的溶解,在传统离线数仓里命名很多临时表,平台会进行完整的语法糖溶解;
  • 第三步,基于此加上算子重写,获取关系代数,最终unparse成一段SQL返回给用户。

指标自动化拆解

左图是传统数据指标体系化建设架构,包含配置信息、原子指标、度量、时间周期、修饰词等。每个指标种类不一样,衍生指标来源于原子指标,复合指标来源于衍生指标。
指标体系化建设的核心目的就是保证指标的一致性,避免指标重复建设。
在电商场景中,我们早期推进指标体系化建设有一个核心的步骤——指标拆解,即把字段关联到录入好的配置信息里面。如果发现绑定已有的衍生指标,则避免了重复建设的工作。
在该过程中,通过进行用户调研,我们发现,在做拆解的过程中,用户有几个核心环节,如通过字段口径了解字段真实的来源链路,同时还要看字段整体的加工逻辑,再人工用该SQL做拆解工作。最后,用户在指标平台里面维护好元信息。应用层的指标开发完成之后,再去评审最终拆解结果的质量。
指标自动化拆解-技术实现
 
上图为指标自动化拆解-技术实现过程。
第一,工程能力。工程能力底层是字段口径探查的能力,将应用层的指标透传到明细数据层表,同时平台进行单指标粒度的裁剪,裁剪完成之后拿到字段应该绑定的DWD表,最终内敛到DWD表的极简SQL,过程中不需要人为查询代码完成逻辑梳理。
第二,底层数据能力。关键是必须维护好高质量的元数据。在电商场景中,我们维护了万级别的指标关系,在指标关系中再维护类似于业务过程度量的SQL逻辑,如where条件。
第三,大模型的能力。基于大模型能力,我们结合裁剪之后的SQL、待选SQL完成召回。裁剪之后的SQL,基于元数据及大模型能力,与规则方法论进行匹配,最终把标的元素判断出来。也就是说,研发人员只需要输入新开发的表,就可以知道该表是否存在重复开发的问题。
判断过程:根据拆解过程找到对应SQL,原子指标、修饰词、时间周期三个元素生成衍生指标,该衍生指标如果存在,就是存在重复开发,如果不存在,则可以在系统里绑定,供给数据应用使用。
 

总结与展望

数据血缘底座是提升数据管理效率和数据质量的关键。我们希望能不断提升全链路数据血缘的能力,在上文提到的新旧表切换、数仓价值评估、指标拆解等场景中,更好结合大模型等能力优化功能和用户体验,为业务提供更多价值。以上就是本次分享的内容,谢谢大家。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/738075.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IIS发布modules错误和403.14

1、解决IIS启动后报<modules>错误的方案C:\windows\system32\inetsrv\appcmd unlock config -section:system.webServer/modules参考:https://blog.csdn.net/sinat_39826352/article/details/784434322、IIS部署问题之403.14 这是因为一般情况下,IIS接受到请求后,如果…

教你5分钟完成OnlyFans注册,轻松绑卡完成订阅

OnlyFans是一个内容服务平台,内容创作者可以通过这个平台发布视频、照片、甚至直播,并设定付费墙,粉丝需支付一定费用才能解锁内容。BinGoCard可以完美解决包括OnlyFans在内的海外平台订阅问题。什么是OnlyFans? OnlyFans是一个内容服务平台,内容创作者可以通过这个平台发…

669分,武汉市第四十九中传来喜讯,璞公英「教师增值评价系统」助力学业提升!

星光熠熠,梦想启航 武汉第四十九中学传来喜讯! 高三(5)班物理类考生潘俊安同学 以总分669分的优异成绩脱颖而出! 潘俊安同学不仅实现了自我超越, 更为学校的高考历史增添了浓墨重彩的一笔。 三年磨一剑,今朝试锋芒 学霸秘诀就是它! 学霸风采:潘俊安 潘俊安:高考总分6…

(面向土木工程研究生)abaqus结构分析(免费)视频教学

土木工程专业的研究生,很多都需要做数值分析,而数值分析的平台很多人都是选择abaqus。然而,很多研究生却是从未使用过abaqus的,即,对于abaqus,他们是真正的新手,常常会“不知从何下手”!就我所知,他们可能还会遇到的另外一个困难就是“他们的导师可能完全不懂数值分析…

CentOS7修复OpenSSH漏洞升级到OpenSSH 9.8 RPM一键更新包

OpenSSH是SSH(Secure Shell)协议的开源实现,它支持在两个主机之间提供安全的加密通信,广泛用于Linux等系统,通常用于安全远程登录、远程文件传输和其它网络服务。 2024年7月1日,OpenSSH Server中存在的一个远程代码执行漏洞(CVE-2024-6387,又被称为regreSSHion)细节被…

stoi字符串转十进制数越界问题

原因 在项目开发过程中需要将字符串转化成十进制数,起初没有问题。但是在之后的开发过程中程序在运行时突然发生崩溃,由于没有做异常处理,报错信息也不明显。最后发现是因为某个字符串转化的字符串转化的十进制数超过了int的范围。 c++中各数据类型取值范围解决方法 改用sto…

C#-听说有人不推荐使用Linq!?

先说结论 linq和直接遍历的性能差异点主要还是迭代方式,数组和字符串这类的foreach都是专门有优化的,而linq都是通用的泛型调用迭代器,如果刚好遇到这类数据又需要高性能就尽量不用linq,其他类型或性能要求不高的还是linq香。(ps:linq写的不好不能怪linq) 背景 起初是看到有…

曙光服务器系统蓝屏数据恢复

一、蓝屏原因分析 首先,需要分析导致曙光服务器系统蓝屏的具体原因。蓝屏通常是由于操作系统或硬件设备驱动程序遇到致命错误所致。可能的原因包括软件冲突、硬件故障(如内存条问题、硬盘故障)、驱动程序过时或不兼容等。 二、安全措施 在进行数据恢复之前,务必确保服务器的…

服务器存储金蝶数据库丢失恢复

一、检查备份情况 确认备份存在: 首先,需要确认是否有金蝶数据库的备份存在。备份是数据恢复的基础,没有备份的情况下恢复数据将非常困难。 检查备份的完整性和时效性: 验证备份文件的完整性和时效性,确保备份文件没有损坏且包含丢失数据之前的数据库状态。二、使用备份恢…

威联通NAS维修

涉及多个方面,包括硬件故障维修、数据恢复等。 一、维修内容 硬件故障维修: 针对威联通NAS出现的各种硬件故障,如电源故障、主板故障、硬盘故障等,提供检测和维修。 在维修过程中,会仔细检查每个部件,确保找到故障根源并进行修复。 数据恢复: 当威联通NAS中的数据因硬盘…

Fastapi 脚本接口规范优化

Fastapi 脚本接口规范优化 在编写Fastapi脚本提供自动化接口操作时,我们不仅要实现接口功能实用性,也要考虑接口的规范管理,这边以Fastapi官方文档作为一个切入点。 官方接口文档 默认官方接口文档如下图所示,宛如大杂烩一样 /doc接口文档 /redoc接口文档 优化方案 1、根据…

面试官:Java类是如何被加载到内存中的?

类的生命周期都有哪些阶段?类加载的过程是怎样的?面试连环callJava类是如何被加载到内存中的? Java类的生命周期都有哪些阶段? JVM加载的class文件都有哪些来源? JVM在加载class文件时,何时判断class文件的格式是否符合要求?类生命周期 一个类从被加载到虚拟机内存开始,…

招募贴 | 第四期自动驾驶OS开发初阶营报名开启

招募贴 | 第四期自动驾驶OS开发初阶营报名开启 第四期国家智能网联汽车创新中心自动驾驶OS开发初阶训练营将于2024年7月22日开营,现已开启报名,诚邀对自动驾驶底层软件开发感兴趣的学员加入,一起驶入自动驾驶的快车道,共同探索未来的无限可能。从训练营能学到什么? 训练营…

STM32L073RZT 调试SPI问题

现象描述: spi通信一次后,第二次通信spi的SR寄存器异常0xFF31(MODF, CRCERR, RXNE),通信失败。 以下为调用流程及相关代码:NFC_ID(); NFC_REG_B_TEST();//SPI 读 void SPI_Read_Data(uint8_t* w_data, uint32_t w_size, uint8_t* r_data, uint32_t r_size) {SET_SPI_CSS(G…

Spark大数据处理:技术、应用与性能优化(全)PDF书籍推荐分享

本书从一个系统化的视角,秉承大道至简的主导思想,介绍Spark中最值得关注的内 容,讲解Spark部署、开发实战,并结合Spark的运行机制及拓展,帮读者开启Spark技术之旅。 Spark大数据处理:技术、应用与性能优化(全)PDF下载 Spark已经在全球范围内广泛使用,无论是Intel、Yahoo…

LaTeX 编辑协作平台 Overleaf 安装和使用教程

在学术界和科技行业,LaTeX 已成为撰写高质量文档的标准工具。然而,传统的 LaTeX 使用体验常常伴随着以下挑战:学习曲线陡峭 环境配置复杂 多人协作困难 实时预览不便当然,市面上不乏很多在线 LaTeX 编辑平台,但它们大多是封闭的商业服务,无法完全满足用户对数据隐私和自主…

半个月6次面试,终于进百度HR面了

和大家分享一下来自粉丝的面经投稿,他在最近半个月内疯狂的面试,光百度就约面了两个岗位,一共进行了6场面试,并且其中一个进到了 HR 面。今天和大家分享一下来自粉丝的面经投稿,他在最近半个月内疯狂的面试,光百度就约面了两个岗位,一共进行了6场面试,并且其中一个进到…

使用钉钉Oauth2授权登录Odoo配置

准备工作 需要用到的模块: Odoo/auth_oauth OCA/server-auth/auth_oidc 因为钉钉的Oauth授权流程比较特殊,需要继承改造res.users上的几个方法 models\res_users.pyclass ResUsers(models.Model):_inherit = "res.users"dingtalk_userid = fields.Char(Dingtalk Us…

推荐一款Win11主题WPF UI框架

最近在微软商店,官方上架了新款Win11风格的WPF版UI框架【WPF Gallery Preview 1.0.0.0】,这款应用引入了前沿的Fluent Design UI设计,为用户带来全新的视觉体验。最近在微软商店,官方上架了新款Win11风格的WPF版UI框架【WPF Gallery Preview 1.0.0.0】,这款应用引入了前沿的…

图论总结

重链剖分 树上修改,查询路径信息之类的 最多经过logn个轻边, 这样可以更好地划分 注意点: 修改边权可以转化到点权上面: 注意lca的位置不要修改, 应该是update(id[y]+1,id[x]) 例题: 轻重边: https://www.luogu.com.cn/problem/P7735 判断是不是重边,信息转化到点上面,…