3、血缘分析技术栈:ETL工具、数据目录工具、图数据库选型(Neo4j vs JanusGraph)

做主数据血缘分析,说白了就是三件事:把数据抽出来、把关系记下来、把链路查出来。这三件事分别对应三类工具——ETL工具、数据目录工具、图数据库。

我这些年踩过的坑,十有八九都出在工具选型上。选对了,事半功倍;选错了,后面改起来跟拆房子似的。今天咱们就把这三层技术栈掰开揉碎聊清楚。

核心观点:血缘分析的技术栈不是拼积木,是搭骨架。ETL负责"采",目录负责"存",图库负责"查"。三者缺一不可,但也不能贪多求全。

3.1 ETL工具:血缘数据的"采集器"

ETL工具是血缘分析的起点。没有它,后面全是空中楼阁。

我见过不少团队,一上来就选最火的ETL工具,结果发现跟自己的数据源对不上。你想想看,主数据血缘要采集的源端五花八门——ERP、CRM、MDM、数仓、甚至Excel。ETL工具能不能"通吃",这是第一道坎。

3.1.1 主流ETL工具对比

工具 适用场景 血缘采集能力 我的评价
Informatica PowerCenter 大型企业、传统数仓 强,原生支持字段级血缘 贵,但稳。我在银行项目用过,跑三年没出过岔子
Talend 中型企业、开源偏好 中等,需二次开发 性价比高,但血缘解析要自己写组件
Apache NiFi 实时流、物联网 弱,仅支持流程级 适合做数据搬运,别指望它做精细血缘
Kettle (PDI) 中小团队、快速原型 中等,支持表级血缘 免费里算能打的,但字段级解析得自己补
DataStage IBM生态、金融行业 强,但封闭 跟IBM系绑定太深,非IBM环境慎选

我的建议:如果预算充足,直接上Informatica。它的元数据采集器能自动解析SQL、存储过程、ETL映射,字段级血缘基本开箱即用。我当年在保险集团做客户主数据血缘,2000多个字段的链路,Informatica跑了三天就全出来了。

3.1.2 ETL工具选型的三个硬指标

选ETL工具,别光看宣传。我总结了三项硬指标:

  1. SQL解析深度——能不能解析CTE、子查询、窗口函数?很多工具连WITH AS都搞不定,血缘链路直接断掉。
  2. 存储过程支持——主数据系统里大量逻辑写在存储过程里。工具能不能解析PL/SQL或T-SQL?我遇到过工具解析到一半报错,最后手工补了200多个映射。
  3. 增量采集能力——主数据是动态的,每天都有变更。工具能不能只采集变化的部分?全量采集一次跑8小时,谁也受不了。

避坑指南:我曾经在一个项目中选了NiFi做血缘采集,因为它实时能力强。结果发现NiFi根本不解析SQL内部的字段映射,只能看到"表A→表B"这种粗粒度关系。最后不得不在NiFi后面再加一层Python脚本做字段级解析——多了一倍的开发量。

3.2 数据目录工具:血缘的"档案馆"

ETL把血缘数据采回来,总得有个地方存吧?数据目录工具就是干这个的。

数据目录不只是存血缘,它还管元数据、管数据字典、管数据质量。但咱们做血缘分析,最关心的是它能不能把血缘关系结构化存储,能不能版本化管理,能不能开放API给下游查询。

3.2.1 主流数据目录工具

工具 血缘存储方式 版本管理 API开放度
Apache Atlas 图结构(内置JanusGraph) 支持 REST API + Kafka
DataHub 图结构(Neo4j或Elasticsearch) 支持 GraphQL + REST
Alation 关系型+图混合 支持 REST API(有限制)
Collibra 关系型+图混合 支持 REST API(商业版)
自建(基于Neo4j) 纯图结构 需自研 完全开放

我个人习惯用Apache Atlas。为什么?因为它跟Hadoop生态无缝集成,而且内置了JanusGraph做图存储。你想想看,Atlas本身就是一个完整的数据目录,血缘采集、存储、查询一条龙。但要注意——Atlas的JanusGraph默认配置性能一般,需要调优。

关键点:数据目录工具的核心不是"存数据",而是"管关系"。血缘分析的本质是图遍历,所以底层存储最好是图数据库。用关系型数据库存血缘?不是不行,但查询深度超过3层,SQL写得你想哭。

3.3 图数据库选型:Neo4j vs JanusGraph

好,到了最关键的环节。血缘数据存到图数据库里,才能发挥真正的威力。但图数据库选哪个?

我这些年两个都用过。Neo4j用了三年,JanusGraph用了两年。各有各的脾气。

3.3.1 核心对比

维度 Neo4j JanusGraph
存储引擎 自研原生图存储 可插拔(HBase/Cassandra/BerkeleyDB)
查询语言 Cypher(声明式,易上手) Gremlin(函数式,学习曲线陡)
事务支持 ACID,强一致性 取决于后端存储,通常最终一致性
水平扩展 企业版支持(贵) 原生支持,分布式架构
血缘查询性能 3-5层链路毫秒级 3-5层链路毫秒级(需调优)
部署复杂度 低,单机可跑 高,依赖HBase/Cassandra集群
社区活跃度 极高 中等
许可证 社区版GPLv3,企业版收费 Apache 2.0,完全开源

3.3.2 我的选型建议

别急着选。先问自己三个问题:

  • 数据量多大?——节点数在1亿以内,Neo4j社区版够用。超过1亿,考虑JanusGraph。
  • 团队熟悉什么?——团队会Cypher就选Neo4j,会Java/Gremlin就选JanusGraph。别为了技术选型重新培训团队,成本太高。
  • 要不要上云?——Neo4j有AuraDB云服务,JanusGraph可以跑在Kubernetes上。但JanusGraph的云部署比Neo4j复杂得多。

我的经验:中小规模(节点数千万级)用Neo4j,省心。大规模(十亿级以上)用JanusGraph,省钱。我在一个电商项目中,主数据血缘节点数到了5亿,Neo4j企业版一年授权费够买一辆车。后来迁移到JanusGraph + HBase,成本降了60%。

3.3.3 血缘查询实战对比

咱们用实际查询说话。假设要查"客户手机号"这个字段的完整血缘链路:

Neo4j(Cypher):

MATCH path = (source:Field {name: '手机号'})-[*1..10]->(target:Field)
WHERE source.system = 'CRM'
RETURN path
LIMIT 100

这段代码,5层链路以内基本在50毫秒内返回。Cypher的语法非常直观,业务人员都能看懂。

JanusGraph(Gremlin):

g.V().has('Field', 'name', '手机号')
 .has('system', 'CRM')
 .repeat(outE().inV()).times(10)
 .path()
 .limit(100)

Gremlin是函数式风格,写起来像在搭积木。性能上,如果后端是HBase且rowkey设计合理,同样能到毫秒级。但一旦索引没建好,或者查询模式不对,秒级甚至分钟级都有可能。

避坑指南:我曾经在JanusGraph上踩过一个坑——默认的索引配置只支持等值查询,不支持范围查询。结果血缘分析里有个"按时间范围查变更链路"的需求,查询直接超时。后来加了混合索引才解决。所以用JanusGraph,索引设计必须在建表时就规划好,不然后面改起来要命。

3.4 技术栈全景图

说了这么多,咱们用一张图把整个技术栈串起来:

主数据血缘分析技术栈全景图 数据源层 ERP系统 CRM系统 MDM平台 数据仓库 ETL采集层 ETL工具(Informatica / Talend / Kettle) SQL解析 → 存储过程解析 → 字段映射提取 → 增量采集 数据目录层 数据目录(Apache Atlas / DataHub) 元数据管理 → 血缘关系存储 → 版本管理 → API开放 图存储层 Neo4j(中小规模) JanusGraph(大规模) 选型依据 数据量/团队/预算

3.5 我的最终建议

技术栈选型没有银弹。但我可以给你一个最小可行组合:

  • ETL:用Informatica(预算够)或Talend(预算紧)。别在ETL上省钱,血缘采集的质量直接决定后续所有工作的成败。
  • 数据目录:用Apache Atlas。开源、成熟、跟Hadoop生态无缝集成。如果你们技术栈偏云原生,考虑DataHub。
  • 图数据库:节点数<5000万用Neo4j,>5000万用JanusGraph。别纠结,这个分界线是我实测出来的。

最后说一句:工具只是工具。我见过用Excel手工维护血缘的团队,照样把数据治理做得井井有条。也见过上了全套昂贵工具,结果血缘链路一塌糊涂的。技术栈选型重要,但更重要的是——你清楚自己要查什么、怎么查、查出来给谁用。想清楚这些,工具选型自然水到渠成。