最近做元数据管理时,经常要和 Atlas 返回的实体、关系、GUID 打交道。
一开始,我以为元数据管理就是一个更强一点的搜索功能:输入一张表名,就能查到它属于哪个库、有哪些字段、有什么标签。
但真正做到血缘、审计和 Ranger 权限策略后,我发现事情没这么简单。
用户找到一张表之后,往往还会继续问:
这张表是谁生成的?
它的数据来自哪里?
如果我改了一个字段,会影响哪些下游表和任务?
为什么某个人能看到身份证字段?
上周是谁改了这张表的标签?
这些问题单靠“搜索表名”是回答不了的。
Atlas 更像是帮我们把数据资产之间的关系整理成一张图。表和表之间、字段和字段之间、任务和表之间,都可能有上下游关系。
但 Atlas 返回的是偏底层的数据结构,里面有很多实体、关系和 GUID。前端真正想看到的是一张清楚的血缘图:谁在上游,谁在下游,点开之后还能继续展开,而且不能重复绕圈。
所以后端要做很多处理,比如合并重复节点、补齐缺失属性、区分表、字段、任务等不同类型,还要控制展开层级,避免一张复杂血缘图把接口返回撑得特别大。
Ranger 解决的是另一个问题:权限。
它关心的是谁能访问什么资源、能做什么操作、哪些字段需要脱敏。比如某个人能不能查这张表,能不能看到身份证号,看到的是原文还是脱敏后的内容。
但接入 Ranger 后,也不能只看“策略创建成功”。平台里的数据资产名称必须和 Ranger 里的资源准确对应。更新、删除策略时,也要处理外部系统失败的情况,不能出现页面上显示策略已经删了,但 Ranger 里实际还在生效的问题。
后来我用两个简单的句子区分 Atlas 和 Ranger:
Atlas 负责说明:这份数据是什么,它从哪里来,又会影响哪里。
Ranger 负责控制:谁可以用这份数据,可以怎么用,能看到什么程度。
把 Atlas 和 Ranger 放到一个平台里,不是为了堆功能,而是为了把数据治理这件事连起来。
用户先能发现数据资产,再能看懂它的来源和影响范围,然后可以配置权限,最后还能追溯谁在什么时候改过什么。