干货 | 携程数据血缘构建及应用

干货 | 百亿节点,毫秒级延迟,基于nebula的大规模图应用实践 这个例子是用一种边进行回溯,实际查询中可能会涉及到 2~3 跳,且存在异构边(打电话是一种边,点外卖又是一种边,下单酒店机票是一种边,都是不同类型的边),而这种异构图的数据都具有回溯特征,因此实际的关系人图回溯查询也会变得复杂。带来的成本是:每写一条边,同时需要更新2个点属性来记录点的关联边情况,而且需要保证幂等(保证重复提交不会叠加属性+1),当插入一条边的时,先去图里面查询边是否存在,不存在才会进行写边以及点属性 +1 的操作。简言之,系统通过多种维度的数据关联不同的用户,这便是关系人图。 阅读详情

作者简介

 

cxzl25,携程软件技术专家,关注大数据领域生态建设,对分布式计算和存储、调度等方面有浓厚兴趣。

一、前言

Data lineage includes the data origin, what happens to it and where it moves over time. Data lineage gives visibility while greatly simplifying the ability to trace errors back to the root cause in a data analytics process. ──百科Data lineage

大数据时代,数据的来源极其广泛,各种类型的数据在快速产生,数据也是爆发性增长。从数据的产生,通过加工融合流转产生新的数据,到最终消亡,数据之间的关联关系可以称之为数据血缘关系。

数据血缘是元数据管理、数据治理、数据质量的重要一环,追踪数据的来源、处理、出处,对数据价值评估提供依据,描述源数据流程、表、报表、即席查询之间的流向关系,表与表的依赖关系、表与离线ETL任务,调度平台,计算引擎之间的依赖关系。数据仓库是构建在Hive之上,而Hive的原始数据往往来自于生产DB,也会把计算结果导出到外部存储,异构数据源的表之间是有血缘关系的。

数据血缘用途:

  • 追踪数据溯源:当数据发生异常,帮助追踪到异常发生的原因;影响面分析,追踪数据的来源,追踪数据处理过程。

  • 评估数据价值:从数据受众、更新量级、更新频次等几个方面给数据价值的评估提供依据。

  • 生命周期:直观地得到数据整个生命周期,为数据治理提供依据。

  • 安全管控:对源头打上敏感等级标签后,传递敏感等级标签到下游。

本文介绍携程数据血缘如何构建及应用场景。第一版T+1构建Hive引擎的表级别的血缘关系,第二版近实时构建Hive,Spark,Presto多个查询引擎和DataX传输工具的字段级别血缘关系。

二、构建血缘的方案


2.1 收集方式

方案一:只收集SQL,事后分析。

当SQL执行结束,收集SQL到DB或者Kafka。

优点:当计算引擎和工具不多的时候,语法相对兼容的时候,用Hive自带的LineageLogger重新解析SQL可以获得表和字段级别的关系。

缺点:重放SQL的时候可能元数据发生改变,比如临时表可能被Drop,没有临时自定义函数UDF,或者SQL解析失败。

方案二:运行时分析SQL并收集。

当SQL执行结束后立即分析Lineage,异步发送到Kafka。

优点:运行时的状态和信息是最准确的,不会有SQL解析语法错误。

缺点:需要针对各个引擎和工具开发解析模块,解析速度需要足够快。


2.2 开源方案


Apache Atlas

Apache Atlas是Hadoop社区为解决Hadoop生态系统的元数据治理问题而产生的开源项目,它为Hadoop集群提供了包括数据分类、集中策略引擎、数据血缘、安全和生命周期管理在内的元数据治理核心能力。官方插件支持HBase、Hive、Sqoop、Storm、Storm、Kafka、Falcon组件。

Hook在运行时采集血缘数据,发送到Kafka。Atlas消费Kafka数据,将关系写到图数据库JanusGraph,并提供REST API。

其中Hive Hook支持表和列级别血缘,Spark需要使用GitHub的hortonworks-spark/spark-atlas-connector,不支持列级别,Presto则不支持。

Linkedin DataHub

WhereHows项目已于2018年重新被LinkedIn公司设计为DataHub项目。它从不同的源系统中采集元数据,并进行标准化和建模,从而作为元数据仓库完成血缘分析。

社区提供了一个Demo,演示地址:https://demo.datahubproject.io/

与Airflow集成较好,支持数据集级别血缘,字段级别在2021Q3的Roadmap。

三、携程方案

携程采用了方案二,运行时分析SQL并收集分析结果到Kafka。由于开源方案在现阶段不满足需求,则自行开发。

由于当时缺少血缘关系,对数据治理难度较大,表级别的血缘解析难度较低,表的数量远小于字段的数量,早期先快速实现了表级别版本。

在16-17年实现和上线了第一个版本,收集常用的工具和引擎的表级别的血缘关系,T+1构建关系。

在19年迭代了第二个版本,支持解析Hive,Spark,Presto多个查询引擎和DataX传输工具的字段级别血缘关系,近实时构建关系。


四、第一个版本-表级别血缘关系


4.1 处理流程

针对Hive引擎开发了一个Hook,实现ExecuteWithHookContext接口,从HookContext可以获得执行计划,输入表,输出表等丰富信息,异步发送到Kafka,部署的时候在hive.exec.post.hooks添加插件即可。

在17年引入Spark2后,大部分Hive作业迁移到Spark引擎上,这时候针对Spark SQL CLI快速开发一个类似Hive Hook机制,收集表级别的血缘关系。

传输工具DataX作为一个异构数据源同步的工具,单独对其开发了收集插件。

在经过解析处理后,将数据写到图数据库Neo4j,提供元数据系统展示和REST API服务,落地成Hive关系表,供用户查询和治理使用。

4.2 效果

在元数据系统上,可以查看一张表多层级的上下游血缘关系,在关系边上会有任务ID等一些属性。

4.3 痛点

  • 随着计算引擎的增加,业务的增长,表级别的血缘关系已经不满足需求。

  • 覆盖面不足,缺少Spark ThriftServer , Presto引擎,缺少即席查询平台,报表平台等。

  • 关系不够实时,期望写入表后可以快速查询到关系,用户可以直观查看输入和输出,数据质量系统,调度系统可以根据任务ID查询到输出表,对表执行质量校验任务。

  • 图数据库Neo4j社区版为单机版本,存储数量有限,稳定性欠佳,当时使用的版本较低,对边不能使用索引(3.5支持),这使得想从关系搜索到关联的上下游较为麻烦。

五、第二版本-字段级别血缘关系

之前实现的第一个版本,对于细粒度的治理和追踪还不够,不仅缺少对字段级别的血缘关系,也不支持采集各个系统的埋点信息和自定义扩展属性,难以追踪完整链路来源,并且关系是T+1,不够实时。

针对各个计算引擎和传输工具DataX开发不同的解析插件,将解析好的血缘数据发送到Kafka,实时消费Kafka,把关系数据写到分布式图数据JanusGraph。

5.1 传输工具DataX

阿里开源的Druid是一个 JDBC 组件库,包含数据库连接池、SQL Parser 等组件。通过重写MySqlASTVisitor、SQLServerASTVisitor来解析MySQL / SQLServer的查询SQL,获得列级别的关系。


5.2 计算引擎

计算引擎统一格式,收集输入表、输出表,输入字段、输出字段,流转的表达式等一些信息。

Hive

参考 org.apache.hadoop.hive.ql.hooks.LineageLogger 实现,异步发送血缘数据到 Kafka。

Atlas的HiveHook也是实现ExecuteWithHookContext接口,从HookContext获得LineageInfo,也可以参考HIVE-19288 引入的org.apache.hadoop.hive.ql.hooks.HiveProtoLoggingHook,采集更多引擎相关的信息。

其中遇到几个问题:

  • 通过HiveServer2执行获取的start time不正确

HIVE-10957 QueryPlan's start time is incorrect in certain cases

  • 获取执行计划空指针,导致收集失败

HIVE-12709 further improve user level explain

获取执行计划有可能出现卡住,可以加个调用超时。


Spark


前置条件:引入 SPARK-19558 Add config key to register QueryExecutionListeners automatically,实现自动注册QueryExecutionListener。

实现方式:通过实现QueryExecutionListener接口,在onSuccess回调函数拿到当前执行的QueryExecution,通过LogicalPlan的output方法,获得所有Attribute,利用NamedExpression的exprId映射关系,对其进行遍历和解析,构建列级别关系。

覆盖范围:Spark SQL CLI、Thrift Server、使用Dataset/DataFrame API(如spark-submit、spark-shell、pyspark)

遇到问题:

  • 使用analyzedPlan而不是optimizedPlan,optimizer的执行计划可能会丢失一些信息,可以在analyzedPlan的基础上apply一些有助于分析的Rule,如CombineUnions。

  • 传递的初始化用的hiveconf/hivevar变量被Thrift Server忽略,导致初始化Connection没有办法埋点。

打上Patch SPARK-13983 ,可以实现第一步,传递变量,但是这个变量在每次执行新的statement都重新初始化,导致用户set的变量不可更新。后续给社区提交PR SPARK-26598,修复变量不可更新的问题。

SPARK-13983 Fix HiveThriftServer2 can not get "--hiveconf" and "--hivevar" variables since 2.0

SPARK-26598 Fix HiveThriftServer2 cannot be modified hiveconf/hivevar variables

  • Drop Table 的限制,DropTableCommand执行成功的时候,该表不一定在之前存在过,如果在Drop之前存在过,元数据也已经被删除了,无从考证。

在DropTableCommand增加了一个标志位,真正在有执行Drop操作的话再置为True,保证收集的血缘数据是对的。

  • 使用Transform用户自定义脚本的限制

      

Transform不像java UDF,只输入需要用到的字段即可,而是需要将所有后续用到的字段都输入到自定义脚本,脚本再决定输出哪些字段,这其中列与列之间的映射关系无法通过执行计划获得,只能简单的记录输出列的表达式,如transform(c1,c2,c3) script xxx.py to c4。


Presto

开发Presto EventListener Plugin,实现EventListener接口,从queryCompleted回调函数的QueryCompletedEvent解析得到相应的信息。

上线的时候遇到一个无法加载Kafka加载StringSerializer的问题(StringSerializer could not be found)。

Kafka客户端使用 Class.forName(trimmed, true, Utils.getContextOrKafkaClassLoader()) 来加载Class,优先从当前线程的ContextClassLoader加载,与Presto的ThreadContextClassLoader有冲突,需要初化始KafkaProducer的时候,将ContextClassLoader暂时置为NULL。https://stackoverflow.com/a/50981469/1673775


5.3 图数据库JanusGraph

JanusGraph是一个开源的分布式图数据库。具有很好的扩展性,通过多机集群可支持存储和查询数百亿的顶点和边的图数据。JanusGraph是一个事务数据库,支持大量用户高并发地执行复杂的实时图遍历。

生产上,存储我们使用Cassandra,索引使用Elasticsearch,使用Gremlin查询/遍历语言来读写JanusGraph,有上手难度,熟悉Neo4j的Cypher语法可以使用cypher-for-gremlin plugin。

以下是数据血缘写入图数据库的模型,Hive字段单独为一个Lable,关系型DB字段为一个Label,关系分两种,LABELWRITE,LABELWRITE_TTL。

只有输入没有输出(Query查询操作),只有输出没有输入(建表等DDL操作)也会强制绑定一个来源系统的ID及扩展属性。

在生产上使用JanusGraph,存储亿级的血缘关系,但是在开发过程中也遇到了一些性能问题。

  • 写入速度优化

以DB名+表名+字段名作为唯一key,实现getOrCreateVertex,并对vertex id缓存,加速顶点的加载速度。

  • 关系批量删除

关系LABELWRITETTL表示写入的关系有存活时间(TTL-Time to live),这是因为在批量删除关系的时候,JanusGraph速度相当慢,而且很容易OOM。比如要一次性删除,Label为WRITE,x=y,写入时间小于等于某个时间的边,这时候Vertex和Edge load到内存中,容易OOM。

g.E().hasLabel("WRITE").has("x",eq("y")).has("publishedDate",P.lte(new Date(1610640000))).drop().iterate()

尝试使用多线程+分批次的方式,即N个线程,每个线程删除1000条,速度也不太可接受。

这时候采用了折中的方案,需要删除关系用另外一种Label来表示,并在创建Label指定了TTL,由于Cassandra支持cell level TTL,所以边的数据会自动被删除。但是ES不支持TTL,实现一个定时删除ES过期数据即可。

5.4 覆盖范围

Zeus调度平台 (ETL操作INSERT、CTAS,QUERY)

Ad-Hoc即席查询平台 (CTAS,QUERY)

报表平台 (QUERY)

元数据平台 (DDL操作)

GPU平台 (PySpark)

通过ETL任务ID,查询任务ID,报表ID,都可以获取到输入,输出的表和字段的关系。


5.5 局限

使用MapReduce、Spark RDD读写HDFS的血缘暂时没有实现。

思路可以在JobClient.submitJob的时候采集输入和输出路径,又或者通过HDFS的AuditLog、CallerContext来关联。


5.6 效果

在第一版使用图的方式展示血缘关系,在上下游关系较多的时候,显示较为混乱,第二版改成树状表格的方式展示。

字段operator在调度系统Zeus被转换成hive_account,最后输出是ArtNova报表系统的一张报表。

六、实际应用场景


6.1 数据治理

  • 通过血缘关系筛选,每天清理数千张未使用的临时表,节约空间。

  • 作为数据资产评估的依据,统计表、字段读写次数,生成的表无下游访问,包括有没有调度任务,报表任务,即席查询。


6.2 元数据管理

  • 统计一张表的生成时间,而不是统计整个任务的完成时间。

  • 数据异常,或者下线一张表、一个字段的时候,可以找到相关的ETL任务或者报表任务,及时通知下游。

  • 统计表的使用热度,显示趋势。


6.3 调度系统

得益于在图数据库JanusGraph可以使用关系边的key作为索引,可以根据任务ID可以轻松获得该任务输入和输出表。

  • 当配置一个任务A的依赖任务列表的时候,可以使用推荐依赖,检查依赖功能,获得任务A的所有输入表,再通过输入的表获得写入任务ID列表,即为任务A所需依赖的任务列表。

  • 在任务结束后,获取该任务所有输出的表,进行预配的规则进行数据质量校验。


6.4 敏感等级标签

当源头的数据来自生产DB时,生产DB有些列的标签已打上了敏感等级,通过血缘关系,下游的表可以继承敏感等级,自动打上敏感标签。


七、总结

以上描述了携程如何构建表和字段级别的血缘关系,及在实际应用的场景。

随着业务需求和数据的增长,数据的加工流程越来越复杂,构建一套数据血缘,可以轻松查询到数据之间的关系,进行表和字段级的血缘追溯,在元数据管理,数据治理,数据质量上承担重要一环。


团队招聘信息

我们是携程集团的大数据平台研发团队,主要负责携程大数据平台的建设,包括但不限于Hadoop生态源码二次开发,任务调度,查询平台的开发,致力于为集团提供稳定、高效、易用的大数据存储和计算服务,实现高效的资源调度,打造服务于所有业务的数据平台产品、服务与应用。

团队怀有前瞻的技术视野,积极拥抱开源建设,紧跟业界技术趋势,在这里有浓厚的技术氛围,你可以和团队成员一同参与开源建设,深入探索和交流技术原理,也有技术实施的广阔场景。

简历投递邮箱:tech@trip.com,邮件标题:【姓名】-【携程大数据平台】-【投递职位方向】。

【推荐阅读】

 “携程技术”公众号

  分享,交流,成长

2025年01月大数据月报 2025年01月大数据月报,为您准备了阿里、字节、百度等大厂90多篇实践案例 阅读详情

相关推荐

用了7年的 source insight 3.5 背景色及字体配置(提升code效率)

在此记录并share用了7年的 source insight 3.5 背景色及字体配置,提升阅读代码效率

Chasing Freedom 7525

聊聊Hive数据血缘——从Atlas没有列级血缘的Bug讲起

正文共:9053字12图预计阅读时间:23分钟前几天,Datahub提供了最新的字段级别数据血缘功能,很多朋友迫不及待想对比一下Datahub的字段级血缘与Atlas的区别。这个时候问题来了,在Atlas收集Hive血缘的时候,由于部分版本问题,没有显示出字段级的数据血缘。这是为什么呢?其实只要做一个简单的修复就可以了,但是知其然也要知其所以然。今天我们就来看一下这个问题到底...

大数据流动 3190

不用写触发器!帆软填报报表自动记录创建/修改时间的终极方案

本文详细介绍了帆软填报报表中无需编写数据库触发器,即可自动记录数据创建时间和修改时间的终极方案。该方案利用帆软内置函数和单元格条件属性,在应用层实现日期自动生成,有效规避了触发器带来的权限、维护和部署难题,为数据填报提供了更轻量、灵活且易于维护的解决方案。

weixin_28040125的博客 360

基于Hive内部接口实现的Hive数据血缘的介绍

文章目录Hive 数据血缘实现介绍表级别表级别总结推荐阅读:字段级别字段级别总结推荐阅读: Hive 数据血缘实现介绍 Hive作为一个离线数仓工具,其实自带了数据血缘分析的解决方案: 表级别: org.apache.hadoop.hive.ql.tools 下的LineageInfo类 字段级别:这里有两种方式 org.apache.hadoop.hive.ql.hooks.LineageLogger类 Execution Hooks机制 本文只做简单介绍,方便自己查询 表级别 LineageIn

mizuhokaga的博客 4197

Mediapipe手势识别实战——基于关节角度计算实现动态手势分类

本文详细介绍了如何利用Mediapipe进行手势识别,通过计算手指关节弯曲角度实现动态手势分类。文章从基础原理出发,讲解了关节角度计算的数学方法,并提供了Python实现代码。同时,还分享了数字手势和OK手势的识别实战经验,以及性能优化和工程实践中的关键技巧,帮助开发者快速掌握实时手势识别技术。

weixin_26891599的博客 403

NAO V6 开发环境的配置(附所有文件)

NAO V6开发环境配置前言环境Robot SettingsChoregraphe 2.8.5.10python2.7+naoqi2.8+opencv4.1.0putty与FileZilla 前言 学校的机器人摸索了一段时间,之前摸爬滚打探索环境,之前没接触这类机器人可能会非常艰辛,希望能给需要的人一些帮助。Nao与pepper通用 环境 win10(x64)+naoqi2.8 1、Robot S...

wbhhello的博客 3219

探索利用 LineageLogger 获取hive的字段级血缘关系

但是又由于 org.apache.hadoop.hive.ql.optimizer.Optimizer。源码中有 org.apache.hadoop.hive.ql.hooks.LineageLogger。搭配日志监测服务来实现字段级血缘。类无法实现字段级血缘。

DeaSun 799

基于物联网技术智慧园林绿化养护管理信息平台

近几年来,随着经济不断的发展,城市面积不断的扩大,城市管理中的园林绿化工作也在这种趋势下不断的发生着深刻改变。管养企业是否按制定的管养计划严格执行?绿化事件整改是否及时到位?绿地面积是否在稳步增长?管养的效果如何?如何客观评价管养企业的管养工作?这些都是我们各级管理者需要面对的问题。   智慧园林绿化养护管理信息平台的开发思路以“考核”为核心,整个信息平台体现出“新、快、高、全、享”五个特点。   智慧园林绿化养护管理信息平台的整个开发理念为:依托五大技术手段(全球卫星定位系统技术、地理信...

Cesium的博客QQ2252224326 2459

大数据血缘分析系统设计

数据血缘关系介绍 定义 Data Lineage 数据血统,也叫做Data Provenance 数据起源或Data Pedigree 数据谱系 从数据的产生,ETL处理、流转流通,到最终消亡,数据之间自然会形成一种关系,类似于人类社会的血缘关系,我们称之为数据血缘关系。 数据血缘关系有一些明显的特征 归属性。一般来说,特定的数据归属特定的团队或者个人 多源性。同一个数据可以有多个来源(多个父亲)。一个数据可以是多个数据经过加工而生成的,而且这种加工过程可以是多个。 可追溯

jc_benben的专栏 9501

【开关电源】开关电源实战经验分享

开关电源原理设计、Layout设计经验分享

weixin_42098658的博客 4169

【零基础学习CAPL】——CAN报文的发送(CRC——ChecSum值)

本章主要介绍带有CRC值的报文发送一般报文可使用CANoe的IG模块直接发送,但带有CRC值的报文就只能编写脚本进行发送,以下详细讲解在配合Panel面板情况下,如何进行带有循环冗余码的报文进行报文的发送。

LOVE135149的博客 1913

基于图数据库的数据仓库表和字段血缘关系分析

基于图数据库的数据仓库表和字段血缘关系分析 项目介绍:通过实时解析hive产生的日志分析hive中的表和字段的数据血缘,并且入neo4j图数据库,字段的血缘关系只需要修改hive的配置文件即可,表的血缘关系需要修改hive的源代码。 注意:hive源码包需要在linux中进行编译,本人在windows中编译无一成功。 在org.apache.hadoop.hive.ql.hooks.LineageLogger的run方法中加入以下代码 try{ org.apache.hadoop.hive.ql.to

qq_44962075的博客 4916

可食用野生植物检测实战:基于YOLOv11的智能识别系统全流程指南

本文介绍了一种基于YOLOv11的可食用野生植物智能识别系统。该系统通过深度学习技术,能在0.2秒内精准识别植物是否可食用,准确率高达92%。文章详细阐述了从数据采集、标注到模型训练、验证的全流程,并开发了用户友好的Tkinter交互界面。该系统解决了户外探险和植物研究中植物识别的痛点,具有高精度、实时性和强泛化能力的特点,为户外安全提供了智能化解决方案。

FJN110的博客 164

干货 | 百亿节点,毫秒级延迟,携程金融基于nebula的大规模图应用实践

作者简介霖雾,携程数据开发工程师,关注图数据库等领域。背景2017年9月携程金融成立,在金融和风控业务中,有多种场景需要对图关系网络进行分析和实时查询,传统关系型数据库难以保证此类场景下的关联性能,且实现复杂性高,离线关联耗时过长,因此对图数据库的需求日益增加。携程金融从2020年开始引入大规模图存储和图计算技术,基于nebula构建了千亿级节点的图存储和分析平台,并取...

携程技术 2110

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

干货 | 携程度假数据治理之数据标准管理实践

作者简介Leon Gu,携程数据仓库专家,专注于大数据、数据仓库、数据治理等领域。本文分享的是数据标准管理在携程度假数据治理中的实践,希望对想要了解和学习数据治理实践的读者有所帮助,也希...

携程技术 884

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

干货 | 携程酒店基于血缘元数据的数据流程优化实践

作者简介九号,携程数据技术专家,关注数据仓库架构、数据湖、流式计算、数据治理。一、背景元数据MetaData狭义的解释是用来描述数据的数据,广义的来看,除了业务逻辑直接读写处理的那些业务数据,所有其它用来维持整个系统运转所需的信息/数据都可以叫作元数据。比如数据表格的Schema信息,任务的血缘关系,用户和脚本/任务的权限映射关系信息等等。在数据仓库的建设质量的评估中,一个必不可少的评价指标就是数...

携程技术 2310

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

数据治理中的数据血缘关系是什么?用来解决什么问题

前言: 数据血缘属于数据治理中的一个概念,是在数据溯源的过程中找到相关数据之间的联系,它是一个逻辑概念。 数据治理里经常提到的一个词就是血缘分析,血缘分析是保证数据融合的一个手段,通过血缘分析实现数据融合处理的可追溯。大数据数据血缘是指数据产生的链路,直白点说,就是我们这个数据是怎么来的,经过了哪些过程和阶段。 数据血缘关系的应用场景是什么: 在数据的处理过程中,从数据源头到最终的数据生成...

NBI大数据可视化 7593

面向数据中台的数据治理七把利剑

“与数据同行”开通了微信群,分为数据仓库、数据分析、产品经理、数据治理及数据建模五大专业,现已汇聚了4000位小伙伴了,加微信号:frank618227...

fuyipingwml1976124的博客 2298

数据治理:数据血缘关系

数据血缘关系,从概念来讲很好理解,即数据的全生命周期中,数据与数据之间会形成多种多样的关系,这些关系与人类的血缘关系类似,所以被称作数据的血缘关系从技术角度来讲,数据a通过ETL处理生成了数据b,那么,我们会说,数据a与数据b具有血缘关系。不过与人类的血缘关系略有不同,数据血缘关系还具有一些个性化的特征。归属性数据是被特定组织或个人拥有所有权的,拥有数据的组织或个人具备数据的使用权,实现营销、风险...

weixin_45727359的博客 1556

一站式元数据治理平台——Datahub入门宝典

首先,阿里云也有一款名为DataHub的产品,是一个流式处理平台,本文所述DataHub与其无关。数据治理是大佬们最近谈的一个火热的话题。不管国家层面,还是企业层面现在对这个问题是越来越重视。数据治理要解决数据质量,数据管理,数据资产,数据安全等等。而数据治理的关键就在于元数据管理,我们要知道数据的来龙去脉,才能对数据进行全方位的管理,监控,洞察。DataHub是由LinkedIn的数据团队开源的一款提供元数据搜索与发现的工具。

张伟的专栏 1万+

数据治理:数据血缘关系!

数据血缘是元数据产品的核心能力,但数据血缘是典型的看起来很美好但用起来门槛很高的技术,只要你采买过元数据产品就知道了。这篇文章对数据血缘的特征、价值、用途和方法做了系统阐述:1、特征:归属性、多源性、可追溯及层次性2、价值:数据价值评估、数据质量评估及数据生命周期管理3、用途:合规需求、影响分析和质量问题分析、数据安全和隐私、迁移项目及自服务分析4、方法:自动解析、系统跟踪、机器学习方法及手工的收集。

Datablau国产数据库建模工具 1116

Hive表级血缘分析java demo

表级血缘分析 import java.io.IOException; import java.util.ArrayList; import java.util.Collection; import java.util.LinkedHashMap; import java.util.Map; import java.util.Stack; import java.util.TreeSe...

争当鲲鹏飞万里 不做燕雀恋子巢 2544

数据治理(一)自研血缘关系

数据治理(一)血缘关系 一、概念 数据血缘也称为数据血统或谱系,是来描述数据的来源和派生关系。数据来源是数据科学的关键,也是被公认为数据信任的核心的部分。说白了就是这个数据是怎么来的,经过了哪些过程或阶段,从哪些表,哪些字段计算得来的。 (桑基图是血缘关系的一种表达图表,图表使用ECharts绘制。公司安全要求,对一些业务信息进行模糊处理) 血缘关系按某个表为中心又分为两个方向,当前表依赖到的是上游;当前表被依赖到的是下游。 1. 上游依赖 上游依赖表达的是当前表直接或间接依赖到哪些表 例子:有一天,一

YcoeXu的博客 1万+

关于Hive重写LineageLogger获取血缘问题

Lineagelogger类是hive2.x加入的,但是我们如果自己改造的话需要注意如下问题:(如果将代码迁移到1.x应该直接可用 1.x代码中是直接做了add的操作,并没有做判断才进行加入) org.apache.hadoop.hive.ql.optimizer.Optimizer 类 第79行 这里由于只有如下几种类型才会加入 generator ,后续才能正常注入字段级血缘,所以 如果这里没有改 直接配置了 hive.exec.post.hooks 类型的hook , 只能拿到基本的input 与

sinat_23257429的博客 1735

hive血缘字段解析

一、实现hive钩子函数,解析hive日志 我这边写了MyHive类,继承LineageLogger类,实现ExecuteWithHookContext接口 package com.zsins.hook; import com.zsins.hook.utils.HiveSqlBloodFigureUtil; import org.apache.commons.lang3.StringUtils; import org.apache.hadoop.hive.metastore.api.Database; im

qq_40822132的博客 1898
上一篇: 干货 | Trip.com Android 11 适配之旅
下一篇: 干货 | 携程AI推理性能的自动化优化实践
携程技术
博客等级 码龄10年 3716粉丝 324原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值