04 | 元数据中心的关键目标和技术实现方案

你好,我是郭忆。

在上一节课程中,我从宏观的角度,系统性地带你了解了数据中台建设的方法论、支撑技术和组织架构,从这节课开始,我们正式进入实现篇,我会从微观的角度出发,带你具体分析数据中台的支撑技术,以电商场景为例,分别讲解元数据中心、指标管理、模型设计、数据质量等技术如何在企业落地。

这节课,咱们来聊聊元数据。

为什么要先讲元数据呢?我来举个例子。在原理篇中,我提到数据中台的构建,需要确保全局指标的业务口径一致,要把原先口径不一致的、重复的指标进行梳理,整合成一个统一的指标字典。而这项工作的前提,是要搞清楚这些指标的业务口径、数据来源和计算逻辑。而这些数据呢都是元数据。

你可以认为,如果没有这些元数据,就没法去梳理指标,更谈不上构建一个统一的指标体系。当你看到一个数700W,如果你不知道这个数对应的指标是每日日活,就没办法理解这个数据的业务含义,也就无法去整合这些数据。所以你必须要掌握元数据的管理,才能构建一个数据中台。

那么问题来了:元数据中心应该包括哪些元数据呢? 什么样的数据是元数据?

元数据包括哪些?

结合我的实践经验,我把元数据划为三类:数据字典、数据血缘和数据特征。我们还是通过一个例子来理解这三类元数据。

在这个图中,dwd_trd_order_df 是一张订单交易明细数据,任务flow_dws_trd_sku_1d 读取这张表,按照sku粒度,计算每日sku的交易金额和订单数量,输出轻度汇总表dws_trd_sku_1d。

数据字典描述的是数据的结构信息,我们以dws_trd_sku_1d为例,数据字典包括:

数据血缘是指一个表是直接通过哪些表加工而来,在上面的例子中,dws_trd_sku_1d是通过dwd_trd_order_df的数据计算而来,所以,dwd_trd_order_df是dws_trd_sku_1d的上游表。

数据血缘一般会帮我们做影响分析和故障溯源。比如说有一天,你的老板看到某个指标的数据违反常识,让你去排查这个指标计算是否正确,你首先需要找到这个指标所在的表,然后顺着这个表的上游表逐个去排查校验数据,才能找到异常数据的根源。

而数据特征主要是指数据的属性信息,我们以dws_trd_sku_1d为例:

通过这个例子,你了解了元数据了吗? 不过元数据的种类非常多,为了管理这些元数据,你必须要构建一个元数据中心。那么接下来,我们就来看看如何搭建一个元数据中心,打通企业的元数据。

业界元数据中心产品

我做系统设计这么些年,一直有一个习惯,是先看看业界的产品都是怎么设计的,避免关门造车。业界的比较有影响力的产品:

  • 开源的有Netflix的Metacat、Apache Atlas;
  • 商业化的产品有Cloudera Navigator。

我今天重点想带你了解Metacat和Atlas这两款产品,一个擅长于管理数据字典,一个擅长于管理数据血缘,通过了解这两款产品,你更能深入的理解元数据中心应该如何设计。

Metacat 多数据源集成型架构设计

关于Metacat,你可以在GitHub上找到相关介绍,所以关于这个项目的背景和功能特性,我就不再多讲,我只想强调一个点,就是它多数据源的可扩展架构设计,因为这个点对于数据字典的管理,真的太重要!

在一般的公司中,数据源类型非常多是很常见的现象,包括Hive、MySQL、Oracle、Greenplum等等。支持不同数据源,建立一个可扩展的、统一的元数据层是非常重要的,否则你的元数据是缺失的。

从上面Metacat的架构图中,你可以看到,Metacat的设计非常巧妙,它并没有单独再保存一份元数据,而是采取直连数据源拉的方式,一方面它不存在保存两份元数据一致性的问题,另一方面,这种架构设计很轻量化,每个数据源只要实现一个连接实现类即可,扩展成本很低,我把这种设计叫做集成型设计。我认为这种设计方式对于希望构建元数据中心的企业,是非常有借鉴意义的。

Apache Atlas 实时数据血缘采集

同样,关于Apache Atlas的背景和功能,我也不多说,只是想强调Atlas 实时数据血缘采集的架构设计,因为它为解决血缘采集的准确性和时效性难题提供了很多的解决思路。

血缘采集,一般可以通过三种方式:

  • 通过静态解析SQL,获得输入表和输出表;
  • 通过实时抓取正在执行的SQL,解析执行计划,获取输入表和输出表;
  • 通过任务日志解析的方式,获取执行后的SQL 输入表和输出表。

第一种方式,面临准确性的问题,因为任务没有执行,这个SQL对不对都是一个问题。第三种方式,血缘虽然是执行后产生的,可以确保是准确的,但是时效性比较差,通常要分析大量的任务日志数据。所以第二种方式,我认为是比较理想的实现方式,而Atlas 就是这种实现。

对于Hive 计算引擎,Atlas 通过Hook方式,实时地捕捉任务执行计划,获取输入表和输出表,推送给Kafka,由一个Ingest 模块负责将血缘写入JanusGraph图数据库中。然后通过API的方式,基于图查询引擎,获取血缘关系。对于Spark,Atlas 提供了Listener的实现方式,此外Sqoop、Flink 也有对应的实现方式。

这两款产品在设计网易元数据中心时,给了很多灵感,下面我就带你了解一下网易元数据中心的设计,以便你掌握一个元数据中心在设计时应该考虑哪些点。

网易元数据中心设计

在设计网易元数据中心之初,我设定了元数据中心必须实现的5个关键目标:

其一,多业务线、多租户支持。

在网易,电商、音乐都是不同的业务线,同一个业务线内,也分为算法、数仓、风控等多个租户,所以元数据中心必须支持多业务线、多租户。

其二,多数据源的支持。

元数据中心必须要能够支持不同类型的数据源(比如MySQL、Hive、Kudu等),同时还要支持相同数据源的多个集群。为了规范化管理,还需要考虑将半结构化的KV也纳入元数据中心的管理(比如Kafka、Redis、HBase等)。这些系统本身并没有表结构元数据,所以需要能够在元数据中心里定义Kafka每个Topic的每条记录JSON中的格式,每个字段代表什么含义。

其三,数据血缘。

元数据中心需要支持数据血缘的实时采集和高性能的查询。同时,还必须支持字段级别的血缘。

什么是字段级别的血缘,我们来举个例子。

insert overwrite table t2 select classid, count(userid) from t1 group
by classid;

t2表是由t1表的数据计算来的,所以t2和t1是表血缘上下游关系,t2的classid字段是由t1的classid字段产生的,count字段是由userid经过按照classid字段聚合计算得到的,所以t2表的classid与t1的classid存在字段血缘,t2表的count分别与t1表的classid和userid存在血缘关系。

字段血缘在做溯源的时候非常有用,因为大数据加工链路的下游是集市层,为了方便使用者使用,一般都是一些很宽的表(列很多的表,避免Join带来的性能损耗),这个表的上游可能是有几十个表产生的,如果不通过字段血缘限定溯源范围,就会导致搜索范围变得很大,无法快速地精准定位到有问题的表。

另外,数据血缘还必须要支持生命周期管理,已经下线的任务应该立即清理血缘,血缘要保留一段时间,如果没有继续被调度,过期的血缘关系应该予以清理。

其四,与大数据平台集成。

元数据中心需要与Ranger集成,实现基于tag 的权限管理方式。在元数据中心中可以为表定义一组标签,Ranger可以基于这个标签,对拥有某一个标签的一组表按照相同的权限授权。这种方式大幅提高了权限管理的效率。比如,对于会员、交易、毛利、成本,可以设定表的敏感等级,然后根据敏感等级,设定不同的人有权限查看。

另外,元数据中心作为基础元数据服务,包括自助取数分析系统,数据传输系统,数据服务,都应该基于元数据中心提供的统一接口获取元数据。

其五,数据标签。

元数据中心必须要支持对表和表中的字段打标签,通过丰富的不同类型的标签,可以完善数据中台数据的特征,比如指标可以作为一种类型的标签打在表上,主题域、分层信息都可以作为不同类型的标签关联到表。

基于这5个因素的考虑,我们设计了网易元数据中心。

这个图按照功能模块分为数据血缘、数据字典和数据特征。

数据血缘由采集端、消息中间件、消费端以及血缘清理模块组成,基于Hive Hook,Spark Listener,Flink Hook ,可以获取任务执行时输入表和输出表,推送给统一的消息中间件(Kafka),然后消费端负责将血缘关系沉淀到图数据库中。

图数据库选择Neo4j,主要考虑是性能快、部署轻量化、依赖模块少,当然,开源的Neo4j没有高可用方案,并且不支持水平扩展,但是因为单个业务活跃的表规模基本也就在几万的规模,所以单机也够用,高可用可以通过双写的方式实现。

血缘还有一个清理的模块,主要负责定时清理过期的血缘,一般我们把血缘的生命周期设置为7天。

数据字典部分,我们参考了Metacat实现,我们由一个统一的Connector Mananger负责管理到各个数据源的连接。对于Hive、MySQL,元数据中心并不会保存系统元数据,而是直接连数据源实时获取。对于Kafka、HBase、Redis等KV,我们在元数据中心里内置了一个元数据管理模块,可以在这个模块中定义Value的schema信息。

数据特征主要是标签的管理以及数据的访问热度信息。元数据中心内置了不同类型的标签,同时允许用户自定义扩展标签类型。指标、分层信息、主题域信息都是以标签的形式存储在元数据中心的系统库里,同时元数据中心允许用户基于标签类型和标签搜索表和字段。

元数据中心统一对外提供了API访问接口,数据传输、数据地图、数据服务等其他的子系统都可以通过API接口获取元数据。另外Ranger 可以基于元数据中心提供的API接口,获取标签对应的表,然后根据标签更新表对应的权限,实现基于标签的权限控制。

元数据中心构建好以后,你肯定会问,这个元数据中心没有界面吗?它长什么样子?用户咋使用这个元数据中心? 别急,我们接着往下看。

数据地图:元数据中心的界面

数据地图是基于元数据中心构建的一站式企业数据资产目录,可以看作是元数据中心的界面。数据开发、分析师、数据运营、算法工程师可以在数据地图上完成数据的检索,解决了“不知道有哪些数据?”“到哪里找数据?”“如何准确的理解数据”的难题。

数据地图提供了多维度的检索功能,使用者可以按照表名、列名、注释、主题域、分层、指标进行检索,结果按照匹配相关度进行排序。考虑到数据中台中有一些表是数仓维护的表,有一些表数仓已经不再维护,在结果排序的时候,增加了数仓维护的表优先展示的规则。同时数据地图还提供了按照主题域、业务过程导览,可以帮助使用者快速了解当前有哪些表可以使用。

当使用者定位到某一个表打开时,会进入详情页,详情页中会展示表的基础信息,字段信息、分区信息、产出信息以及数据血缘。数据血缘可以帮助使用者了解这个表的来源和去向,这个表可能影响的下游应用和报表,这个表的数据来源。

数据地图同时还提供了数据预览的功能,考虑到安全性因素,只允许预览10条数据,用于判断数据是否符合使用者的预期。数据地图提供的收藏功能, 方便使用者快速找到自己经常使用的表。当数据开发、分析师、数据运营找到自己需要的表时,在数据地图上可以直接发起申请对该表的权限申请。

数据地图对于提高数据发现的效率,实现非技术人员自助取数有重要作用。经过我的实践,数据地图是数据中台中使用频率最高的一个工具产品,在网易,每天都有500以上人在使用数据地图查找数据。

课程总结

本节课,我以元数据作为起点,带你了解了元数据应该包括数据字典、数据血缘和数据特征,然后通过分析两个业界比较有影响力的元数据中心产品,结合我在网易数据中台实践,给出了元数据中心设计的5个关键特性和技术实现架构,最后介绍了基于元数据中心之上的数据地图产品。我想在最后强调几个关键点:

  • 元数据中心设计上必须注意扩展性,能够支持多个数据源,所以宜采用集成型的设计方式。
  • 数据血缘需要支持字段级别的血缘,否则会影响溯源的范围和准确性。
  • 数据地图提供了一站式的数据发现服务,解决了检索数据,理解数据的“找数据的需求”。

最后,你要知道,元数据中心是数据中台的基石,它提供了我们做数据治理的必须的数据支撑,在后续的章节中,我们将逐一介绍指标、模型、质量、成本、安全等的治理,这些都离不开元数据中心的支撑。

课程思考

在课程中,我介绍了血缘采集的三种方式,并且推荐了通过实时采集的方式,但是其实静态解析血缘也有它的优势应用场景,你能想到有哪些么?欢迎在留言区与我讨论。

最后,感谢你的阅读,如果这篇文章让你有所收获,也欢迎你将它分享给更多的朋友。

精选留言

  • 麻婆豆腐

    2020-04-13 10:02:12

    郭老师好,听了您的课,感觉个个都直击痛点啊!本节课里数据字典和数据血缘感觉都有开源的可以参考或者直接使用,那么数据特征的管理是怎么处理的呢?手动维护吗?比如标签、关联指标之类描述性的。
    作者回复

    感谢你的肯定,这也确实是我们在网易数据中台构建过程中遇到的真实问题沉淀总结而来的。

    数据特征,标签的维护,其实是靠基于元数据中心之上的各个数据中台支撑产品下沉到元数据中心上的。比如指标系统创建了一个指标,在模型设计中,我们会为某个表的某个字段关联一个指标,然后指标和表就产生了关联关系,就会下沉到元数据中心中,以标签的形式存在。

    标签的来源,来自各个基于元数据中心的数据中台工具产品。

    2020-04-16 11:31:09

  • Silence L

    2020-04-13 08:49:18

    郭老师好,看了元数据我又两个问题请教一下:
    1.文中元数据中心依赖了Atlas,ranger,neo4j,es,kafka等,是否依赖的太多,太重
    2.ranger通过tag实现权限管理,是否数据权限管理都使用ranger,不会另外单独一个数据权限模块么?

    还有一个额外的非本篇的问题,在网易大数据环境中,是否使用了kerberos?
    作者回复

    1. 元数据中心并没有依赖atlas,我们是参考atlas的数据血缘runtime血缘采集方式,实现了数据血缘部分,他与ranger是集成关系,可以基于tag实现授权。neo4j是元数据中心底层的图数据库,es提供了元数据的检索,kafka主要是接受采集来的实时血缘,这三个系统是元数据中心必须依赖的。

    2. 数据权限,我们统一使用ranger来管理。产品的数据权限管理模块,底层是基于ranger实现包装的。

    3. 在网易大数据环境中,我们基于kerberos实现用户认证。

    我看你提到了很多关于用户、认证、权限相关的问题,我会在第10讲数据安全中,重点介绍网易数据中台安全保障的5大机制,欢迎你继续阅读。

    2020-04-16 11:24:17

  • 惜心(伟祺)

    2020-04-10 20:48:27

    业务指标
    数据来源
    加工sql
    把数据生命周期当作产品服务,提供给公司人员使用
    和公司把具体产品提供给外面实验是一个思路
    使用这些表的员工就是公司核心用户,平台上孵化更多产品服务客户
    一层一层的内聚
    作者回复

    对的,其实思路是一致的,数据产品可以看成是一个C端产品,它的客户不是开发,而是运营,所以在产品设计上,要尽可能的降低门槛,注重引导。

    2020-04-12 22:41:34

  • Galen

    2020-04-11 11:15:07

    感觉一般的小团队,搞不定啊
    作者回复

    你好,其实不然, 元数据中心业界有开源的产品,其实最差也可以用开源的来搭一套,只是没有那么易用罢了。元数据中心本身还是一个偏实现层的产品,基于元数据中心之上,我会为你介绍五个元数据的应用场景,这部分开源的产品会比较少涉及,但是如果你能深入理解这些产品背后设计思想,应用场景,解决的问题,即使你要选取外面的商业化产品,你也可以有自己的一个判断。

    感谢你的阅读,期待与你在留言区再次相遇~

    2020-04-12 22:21:27

  • Marco

    2020-04-10 23:06:47

    老师,如果表数据是通过java 程序的etl,又如何解析血缘关系?
    作者回复

    目前,我们数据中台中所有的数据都是以表的形式存在的,血缘都是以表的血缘。并没有做文件、数据集的血缘。

    感谢你的阅读,期待与你在留言区再次相遇。

    2020-04-12 22:34:31

  • 旺仔

    2020-05-05 13:37:38

    “数据字典部分,我们参考了 Metacat 实现,我们由一个统一的 Connector Mananger 负责管理到各个数据源的连接。对于 Hive、MySQL,元数据中心并不会保存系统元数据,而是直接连数据源实时获取。对于 Kafka、HBase、Redis 等 KV,我们在元数据中心里内置了一个元数据管理模块,可以在这个模块中定义 Value 的 schema 信息。”

    老师您好,这部分有个细节的问题想了解下,你们在元数据平台会保存表基础信息么,比如保存表名作为一个关联的依据,然后查详情的时候 connector 去获取表的字典信息,因为平台本身要去加一些标签的话也需要有个载体,如果是这样的话,是定期同步表的列表到元数据平台吗?
    作者回复

    查询的话,走的是ES, 我们会把对应数据源的表结构信息同步到ES一份,方便做快速的查询。标签也在ES中,标签分为表级别的和字段级别的,分别打在字段和表名上。

    感谢你的提问~

    2020-05-09 17:12:03

  • Robbin

    2020-04-11 21:29:01

    在传统企业里,高层领导都是业务出身,而像元数据中心这种产品,如何能说服业务领导同意建设,同时数据地图在设计时如何能让纯业务人员感受到其价值?
    作者回复

    你好,你说的很对,元数据中心本身是一个偏实现层的产品,领导其实根本就不关心是否存在这样的一个数据中台的底层。

    但是数据地图,是元数据中心的界面,通过数据地图,领导可以看到数据中台的统一元数据视图,另外,结合数据地图的使用频率、使用范围,可以凸显数据地图的价值。

    数据地图在设计时,一方面他的使用对象是数据开发,另外一方面,他的使用对象又是业务人员。让业务人员感受到数据地图的价值,主要是能够让业务人员搜索指标、数据报表,帮助他们快速找到自己想要的数据。无论是数据表,还是数据报表,还是指标,都能够通过数据地图进行搜索和导览。

    2020-04-12 22:02:50

  • JohnT3e

    2020-04-10 08:51:20

    我能想到的一个场景是:静态血缘解析可以对一个正在开发的SQL提供参考信息,看系统中表有哪些SQL处理,避免SQL冗余和冲突。
    作者回复

    我来举个场景,你来看看。

    当我们要提交任务上线,建立任务依赖时,如果我们依赖的表,还没有被调度产生数据,此时就会导致我们根据这张表找不到表的产出任务,系统就无法自动推荐依赖任务。

    所以此时就需要静态血缘的介入啦。 对于还未执行,但是保存,SQL语法检查通过的任务,我们可以通过解析SQL获取静态血缘,然后当其他任务读取这张表,要建立到这张表产出任务的依赖时,我们可以根据静态血缘,找到这张表的产出任务。

    欢迎你继续在留言区与我互动~

    2020-04-10 18:29:18

  • hantics

    2020-07-03 09:50:20

    郭老师好,我们遇到一个组织架构问题,业务都不愿做数据治理,因为没有KPI,而中台方又对数据没那么了解,导致主题域/指标梳理困难
    作者回复

    所以数据中台,既要独立于业务,又不能脱离业务,数据中台,数据产品(互联网公司希望叫数据pd)角色很关键,他要深入业务,了解业务目标,要通过数据,帮助业务实现目标,孵化数据产品,收管指标。

    2020-07-20 20:50:00

  • 0xFFFFFFFF

    2020-05-21 11:34:20

    我看文章的时候一直在想,所有的处理和计算是如何都保证是由SQL完成的?如果数据的计算逻辑是用户的程序完成的,最后只是写到了table里面,这时候如何保证数据血缘?
    作者回复

    你好~

    MR和Spark,非SQL的代码,在运行时,hadoop client和Spark client也可以通过Plugin的方式获取到输入表和输出表的关系,并不一定非要SQL。

    感谢你的提问~祝好

    2020-05-25 20:26:09

  • Olivia_饶

    2020-05-18 18:36:03

    老师,您好,看您写的文字看了不下5遍,想请教一下您,能详细描述一下关于元数据中心门户怎么提升用户的搜索效率吗?我看您展示的页面有数据查询和数仓管理两个模块,用户可以通过这两个模块都可以查找数据吗?对于在数仓管理的模块用户是怎么样去搜索数据呢?它和数据查询的区别在哪?
  • Geek_619bd4

    2020-04-15 14:13:52

    一个数据中台一般得由哪几部分人员组成,又大概需要多少人呢?
    作者回复

    数据中台团队,主要包括数据开发、数据产品、平台开发和数据应用开发。

    整体人员规模和你的业务规模要保持同步的。网易不同业务数据中台团队人员规模也相差比较大,多的100多人也是有的,少的十来个人的,其实刚开始,可以先从数据开发团队开始构建,上层通过BI报表的方式呈现,这样数据应用团队也可以先不需要。起步可以10个人以内的团队就可以开始。

    2020-04-16 11:49:58

  • 臧洪友

    2020-04-10 08:42:43

    郭老师,您好,元数据中心建设,是否可以理解主要以元数据管理工具进行落地,只是需要配置,就可以实现呢?还是需要有相关的代码开发的工作,才能落地元数据中心的建设?
    作者回复

    元数据中心的建设,对于数据字典中直连数据源获取元数据的数据源,以及数据血缘部分,工具落地就可以统一收集到元数据。

    但是对于数据特征,尤其是指标、维度标签,这部分是需要数据开发实施介入的,需要进行规范化梳理,一个表,哪些字段是指标,哪些字段是维度,这些不是工具落地就可以自动获取的。

    感谢你的阅读,期待与你在留言区再次互动~

    2020-04-10 18:31:29

  • Geek_ba5f3b

    2020-07-06 09:21:34

    老师,关于集成性设计,如果每次查询都是从数据源拉取,是否存在性能问题。且无法做到跨源查询,对数据源集群的性能要求也较高。为何不用etl先统一抽取,再进行统一的sql查询(非实时数据),对用户也相对友好。
    作者回复

    你说的是指元数据的查询是吧, 我们并不是每次都查数据源的,而是通过存到ES里面,提供给上层查询的。

    感谢你的提问~祝好~

    2020-07-20 20:51:11

  • 田同学

    2021-04-25 10:19:12

    郭老师您好,想请教下,您对于元数据是分为 数据字典,数据血缘,数据特征。网上查阅资料的时候经常会看到这样分类 技术元数据,业务元数据,管理元数据。

    请问您对于元数据的治理是一个怎样的思路呢,为什么会是这样的分类方法呢

    和我在网上查到的这种分类方式有什么区别和联系呢
  • Geek_0168a2

    2020-09-13 00:26:00

    高老师,听了你的这课,简直是如梦初醒啊,自己辛苦一个月搞出来的元数据管理的平台,架构设计真的很缺少前瞻性,前期技术调研也不充分,有现成的开源的数据字典和数据血缘组件可以借鉴,缺忽略了。而且组织架构设计也不合理,大数据组件维护和使用也是人为的割裂的,各管一摊。元数据管理很不顺滑。
    另外您说的 血缘采集的优势场景 ,应该是 任务挂调度时,确定该任务的上下游关系比较有优势吧,个人看法,希望老师给指正。
    作者回复

    感谢你的认可,你说的是对的,尤其是任务还没执行的时候,没有血缘生成,这个时候,需要依靠静态血缘~

    2020-09-29 19:50:20

  • 电光火石

    2020-08-28 00:16:11

    老师,关于数据分层和血缘有几个问题请教一下:
    1. 我们数据开发做etl,根据数仓进行分层设计。同时,也会有一些模型的同学,在上面跑模型,得到分析结果,并且提供给应用使用,这部分数据,现在我们是放在ads层,不知道这部分模型跑出的结果数据是否要通过数仓的分层管理?
    2. 如果上面这部分也要管理的话,血缘怎么处理,因为我看一般是通过sql来做分析,建立血缘,如果是模型的话,一般都是代码,比较难自动分析血缘,那是通过手动的方式添加吗?
    3. 在建立元数据的时候,我们有些数据比较复杂,有些数据类型是一个json,而且是多个层次,这样的数据是把它全部转换出来,还是就记录成json字段类型呢?
    谢谢!
    作者回复

    你好,感谢你的提问,我来回答一下你的提问。

    1. 第一个问题没太明白,数据中台团队,维护了公共数据层以及数据中台产出的集市层和应用层模型。其他分析师团队,会基于数据中台产出的模型,构建数据报表。数据中台管理的模型,是通过分层的方式来管理的。非中台管理的模型,原则上如果是临时表,应该是要过期删除的,固化下来的应该属于应用层。

    2. 不是通过手工维护的,这个根本维护不过来。我们是通过Spark/Hive提供的Listener/Hook机制,获取执行计划中的input/output table拿到执行时血缘实现的。这个好处在于,第一个,spark代码,MR代码也可以拿到。另外,执行引擎本身会对SQL做一些优化,有一些虽然from里面有这个表,但是实际没用到这个表,执行引擎的优化器会自动优化掉,如果你靠解析SQL的方式去获取血缘,那这部分是不准确的脏血缘。

    3. 一般,我们不太建议多层嵌套的json,建议扁平化处理。多层嵌套不好维护。

    希望我的回答对你所帮助~

    2020-09-07 19:20:00

  • 0xFFFFFFFF

    2020-05-21 11:35:30

    另外老师有了解LinkedIn的Datahub(https://github.com/linkedin/datahub)吗? 如果了解的话,能介绍下和metacat的区别么
  • zhangdi

    2020-05-09 22:46:02

    想请教下老师 文章中的图表是用哪个工具做出来的?很喜欢这种手写风格
    作者回复

    我用Visio画的,编辑小姐姐用keynote 重新编辑的哈!

    2020-05-11 23:01:42

  • Sandflass

    2020-05-04 19:25:11

    老师,您提到元数据中心本身不管理元数据,不存储元数据信息,但又提到给元数据打标签的场景,那打上这些标签是在哪个环节进行呢?标签与元数据的关联关系又存储在哪里呢?比较困惑,希望给予解答,谢谢!
    作者回复

    你好,元数据中心并不维护元数据,但是为了对外提供查询的服务,会同步元数据到ES中,然后标签也会存在ES中,与表建立关联。

    感谢你的提问~祝好~

    2020-05-13 19:56:59