任务标题:数据研发功能优化
文档状态:建议方案 / 待评审
适用范围:DataOps 平台“数据研发”模块
基线日期:2026-07-21
本次升级建议把当前以“元数据、业务域、文件解析”为主的数据研发模块,升级为一个统一的数据知识生产与治理工作台:所有数据库结构、文件和图片先进入统一采集链路,形成带来源证据的候选数据元素;候选元素经过查重、映射、审核和版本管理后,进入业务域;多个业务域再共同服务于一个可版本化、可发布、可回滚的数据本体。
核心决策如下:
以下结论来自当前主源码 app/ 和 Vue 2 前端 frontend/src/,不把 deployment/app/ 发布副本重复计算为另一套实现。
| 能力 | 当前实现 | 结论 |
|---|---|---|
| 数据研发菜单 | 元数据、业务域、数据标准、数据流程、数据安全、数据标签、数据源 | 可保留导航体系,但缺少统一采集中心、本体中心和任务中心 |
| 文件采集 | 业务域支持上传 SQL、XLS/XLSX、DOC/DOCX、PDF、TXT 到 MinIO | 文件存储可复用;上传和解析规则不一致 |
| 文件解析 | /api/bd/ddlparse 支持 SQL、Excel、DOCX、文本型 PDF |
CSV、图片、扫描 PDF 未解析;.doc 虽在允许清单中,但解析时实际拒绝 |
| DDL 解析 | 本地正则优先,复杂 DDL 回退 LLM | 可作为兜底,但缺少方言级解析、约束/索引/血缘和证据位置 |
| 数据库直连 | 有安全凭据、连接池、只读 metadata_collection 用途 |
当前只支持 PostgreSQL/MySQL,尚无目录采集器和结构快照任务 |
| 数据元素 | Neo4j DataMeta 节点,业务域通过 INCLUDES 关联 |
字段较少,物理字段与逻辑数据元素未分层 |
| 查重审核 | PostgreSQL metadata_review_records 支持候选、处置和审核 |
可复用,但来源类型、证据、置信度和批次信息不足 |
| 版本历史 | metadata_version_history 保存前后快照 |
可复用,但仍依赖 Neo4j 内部整数 ID;应全面切换稳定 UID |
| 业务域 | BusinessDomain 节点,可关联数据源、标签和 DataMeta |
已具备跨对象图关系基础 |
| 图谱 | Neo4j 已有通用节点、关系与图查询 | 当前 Entity 还不是完整本体模型,缺少类、属性、约束、版本和发布语义 |
| 治理知识库 | PostgreSQL 文档/分块/向量和同步任务基础 | 可用于索引已发布的数据元素和本体版本 |
| 权限 | 后端统一 RBAC,现有 governance:read/edit、review:approve 等 |
本体发布、来源采集、敏感文件下载需要更细粒度权限 |
当前流程以“创建业务域时顺便上传并解析文件”为中心,导致来源、解析任务、候选项、审核结果和最终治理对象耦合在一个页面和同步请求中。随着来源类型增加,会出现以下问题:
/api/meta、/api/bd 和 DataMeta,采用兼容迁移。必须明确以下对象边界:
| 层次 | 对象 | 示例 | 主要责任 |
|---|---|---|---|
| 物理层 | 数据资产、表、字段、文件片段 | ods_order.order_id、Excel 第 2 个 Sheet 第 5 行 |
记录真实来源结构和结构漂移 |
| 治理层 | 数据元素 | 订单编号、客户证件号码 | 统一名称、定义、数据类型、标准、敏感等级和质量规则 |
| 业务层 | 业务域 | 订单域、客户域、供应链域 | 组织数据元素、责任人和业务上下文 |
| 语义层 | 本体类、属性、关系、约束 | 客户、订单、客户下单、订单必须有订单编号 | 构建跨域一致的机器可理解语义 |
推荐关系模型:
graph LR
S["来源 Source"] --> A["物理资产 PhysicalAsset"]
A --> F["物理字段 PhysicalField"]
F -->|REALIZES| E["数据元素 DataElement"]
D1["业务域 A"] -->|OWNS_OR_USES| E
D2["业务域 B"] -->|OWNS_OR_USES| E
O["本体 Ontology"] -->|SERVES_DOMAIN| D1
O -->|SERVES_DOMAIN| D2
O --> C["本体类 OntologyClass"]
C --> P["本体属性 OntologyProperty"]
E -->|MAPS_TO| P
C --> R["本体关系 OntologyRelation"]
业务域与本体是多对多关系。一个业务域可参与多个专题本体,一个本体也可整合多个业务域。BusinessDomain-[:INCLUDES]->DataMeta 在兼容期保留,但新模型应逐步迁移为稳定 UID 关系。
flowchart LR
subgraph Sources["信息来源"]
DB["数据库直连"]
DDL["SQL / DDL"]
TAB["Excel / CSV"]
DOC["Word / PDF"]
IMG["扫描 PDF / 图片"]
end
Sources --> IN["统一采集服务"]
IN --> RAW["MinIO 原始件与中间件"]
IN --> JOB["异步采集任务"]
JOB --> EX["确定性抽取 / OCR / 文档解析"]
EX --> NORM["统一规范化与来源证据"]
NORM --> AI["规则匹配 + AI 语义建议"]
AI --> CAND["候选数据元素 / 候选本体变更"]
CAND --> REVIEW["人工审核与差异处置"]
REVIEW --> VER["版本化治理对象"]
VER --> PG["PostgreSQL 控制面"]
VER --> OUTBOX["Outbox 发布事件"]
OUTBOX --> NEO["Neo4j 当前生效语义图"]
OUTBOX --> KB["治理知识库 / 向量索引"]
| 存储 | 权威数据 | 不应承担的职责 |
|---|---|---|
| PostgreSQL | 采集任务、解析候选、证据索引、审核、版本快照、发布状态、权限范围、审计 | 不承担大文件内容和高频图遍历 |
| Neo4j | 当前生效的数据元素、业务域、本体类/属性/关系及映射图 | 不作为审核状态和不可变版本历史的唯一真相源 |
| MinIO | 原始上传件、OCR 结果、解析中间产物、导入/导出包 | 不保存治理状态 |
| 治理知识库 | 已发布版本的检索文档、分块、向量 | 不代替结构化治理对象和权限判断 |
跨存储发布使用现有 Outbox 思路:PostgreSQL 先提交版本与发布事件,消费者幂等更新 Neo4j 和知识索引,失败可重试和对账,避免接口内直接双写。
所有来源统一抽象为:
IngestionSource:来源定义,如数据库数据源、上传文件、手工粘贴 DDL。IngestionJob:一次采集运行,记录状态、解析器版本、参数、发起人、统计和错误。SourceArtifact:原始文件或数据库结构快照,包含 SHA-256、MIME、大小、MinIO 地址和保留策略。EvidenceFragment:候选项的证据位置,如库/Schema/表/字段,或文件页码/Sheet/表格/单元格/图片框坐标。ExtractionCandidate:统一的候选表、字段、数据元素、概念或关系,包含置信度和建议来源。同一来源、同一内容哈希、同一解析器版本应具备幂等键。用户可选择复用已有结果或强制以新解析器版本重跑。
复用 DataSourceConnectionManager.connect(uid, "metadata_collection"),新增数据库目录采集器:
第一阶段覆盖当前已实现的 PostgreSQL、MySQL;Oracle、SQL Server 需要先新增安全适配器、目录查询和测试矩阵,不能只在页面上增加类型选项。
| 来源 | 主解析器 | AI/OCR 作用 | 关键输出 |
|---|---|---|---|
| SQL/DDL | SQL 方言解析器;失败时使用现有本地/LLM 兜底 | 补充中文名、业务定义和同义词 | 表、字段、约束、注释、血缘引用 |
| XLS/XLSX | 工作簿、Sheet、表头和单元格确定性读取 | 识别非标准数据字典模板 | 字段行、单元格证据、模板映射 |
| CSV | 编码/分隔符探测和流式读取 | 推断业务含义,不替代原始值 | 列、推断类型、表头证据 |
| DOCX | 段落、标题和表格结构解析 | 识别散文中的字段定义 | 文档片段、表格坐标、候选元素 |
| 文本型 PDF | 页面文本和表格解析 | 版面语义合并 | 页码、表格、文本块 |
| 扫描 PDF/图片 | OCR + 版面分析 | 纠错、语义归一和关系建议 | 文字框坐标、页码、OCR 置信度 |
处理要求:
.doc 明确为“不支持并要求转换”,或增加受控的服务端转换;不能继续出现接口文档声称支持、运行时拒绝的状态。can_handle / extract / normalize / evidence,便于后续增加 Markdown、JSON Schema、OpenAPI 等来源。文件解析、OCR、数据库全量采集必须异步执行,前端使用任务状态轮询或服务端事件获取进度。建议状态:
created -> queued -> extracting -> normalizing -> matching -> awaiting_review -> published/partial/failed/cancelled
每个阶段记录输入哈希、输出哈希、耗时、解析器版本和错误摘要,支持从失败阶段重试,不重复执行已成功且输入未变化的阶段。
在现有 DataMeta 基础上建立正式 DataElement 语义,至少包含:
uid、编码、中文名、英文名、简称、别名和定义。物理字段与数据元素是多对多映射:同一数据元素可由多套系统字段实现,一个物理字段也可能承载复合语义,但后者必须进入人工审核。
candidate -> draft -> in_review -> published -> deprecated -> retired
匹配分为四级,均保留原因:
现有 metadata_review_records 可作为第一阶段审核底座,新增 ingestion_job_uid、candidate_uid、evidence_uids、confidence、parser_version、business_domain_uid 和影响分析字段。所有新逻辑使用稳定 UID,Neo4j 整数 ID 只用于旧接口兼容。
本体不是业务域的另一个名称,应包含:
Ontology:名称、编码、目的、所有者、适用范围、状态。OntologyVersion:不可变版本、父版本、变更摘要、发布人和发布时间。OntologyClass:业务概念及层级,例如客户、订单、产品。OntologyProperty:概念的属性,可映射到一个或多个数据元素。OntologyRelation:概念间有方向、有基数的业务关系。OntologyConstraint:必填、唯一、值域、基数、互斥、依赖等约束。OntologyMapping:本体类/属性与业务域、数据元素、物理资产的映射。内部使用平台图模型;对外提供 RDF/OWL 导入导出,并可用 SHACL 表达约束。外部标准是交换边界,不要求平台内部所有治理状态都存成 RDF 三元组。
新增显式关系:
Ontology-[:SERVES_DOMAIN {role, scope, priority}]->BusinessDomainBusinessDomain-[:CONTRIBUTES]->OntologyClassDataElement-[:MAPS_TO {mapping_type, confidence, status}]->OntologyPropertyrole 可取 owner/contributor/consumer。本体发布前必须至少有一个 owner 业务域和责任人,避免跨域本体无人负责。
支持四种模式并存:
动态构建只生成 OntologyChangeSet,不能直接修改已发布图。每个建议必须显示:建议类型、置信度、证据、影响对象、冲突和接受/拒绝原因。
| 表 | 作用 |
|---|---|
ingestion_sources |
统一来源定义和权限范围 |
ingestion_jobs |
异步任务状态、参数、统计、错误和幂等键 |
source_artifacts |
原始件元数据、哈希、MIME、MinIO 地址和保留策略 |
evidence_fragments |
页码、Sheet、单元格、字段路径、图片框坐标等证据 |
extraction_candidates |
标准化候选对象、置信度、解析器和处置状态 |
data_element_versions |
数据元素不可变版本快照 |
ontologies |
本体主记录、所有者和状态 |
ontology_versions |
本体不可变版本及内容哈希 |
ontology_change_sets |
动态构建建议、审核和发布变更集 |
ontology_publish_runs |
发布、投影、知识索引同步和对账结果 |
已有 metadata_review_records、metadata_version_history、governance_documents/chunks 和 Outbox 先扩展复用,不重复造同类表。
建议节点标签:
Source、PhysicalAsset、PhysicalField、DataElement、BusinessDomain、Ontology、OntologyClass、OntologyProperty、OntologyRelation、DataStandard、DataLabel。
所有节点必须有唯一稳定 uid;关键关系也应有 uid 或由版本快照中的稳定键唯一标识。至少建立 UID 唯一约束和名称/编码查询索引。
为降低旧接口耦合,建议新增编排边界 /api/development/v1,旧的 /api/meta、/api/bd、/api/datasource 保持兼容,由新服务复用底层能力。
POST /sources/files:上传原始件并返回 artifact_uid。POST /ingestion-jobs:创建文件、DDL 或数据库采集任务。GET /ingestion-jobs、GET /ingestion-jobs/{uid}:列表、进度和错误。POST /ingestion-jobs/{uid}/retry|cancel:重试或取消。GET /ingestion-jobs/{uid}/candidates:候选项和证据。GET /evidence/{uid}:按权限预览原始证据定位。GET/POST /data-elementsGET/PATCH /data-elements/{uid}POST /data-elements/{uid}/submit-reviewPOST /data-elements/{uid}/publish|deprecateGET /data-elements/{uid}/versions|lineage|mappingsPOST /candidate-decisions/batch:批量复用、创建、映射或忽略。GET/POST /ontologiesPOST /ontologies/{uid}/versions:创建草稿版本。GET/PATCH /ontology-versions/{uid}/graphPOST /ontology-versions/{uid}/generate:从业务域/元素生成变更集。POST /ontology-change-sets/{uid}/decisions:审核建议。POST /ontology-versions/{uid}/validate|publishPOST /ontologies/{uid}/rollbackGET /ontologies/{uid}/diff?from=&to=GET/POST /ontologies/{uid}/export|import:RDF/OWL/JSON 包。列表接口统一分页、排序、过滤和错误结构;写接口接受幂等键;并发编辑使用版本号或 ETag,避免后提交覆盖先提交。
“数据研发”建议调整为以下二级菜单:
典型操作流:
选择来源 -> 配置范围 -> 启动任务 -> 查看解析预览 -> 批量处置候选 -> 提交审核 -> 发布数据元素 -> 选择多个业务域 -> 生成本体草稿 -> 校验/评审 -> 发布本体
在现有 RBAC 上新增权限:
ingestion:run:启动采集和解析任务。ingestion:admin:配置解析器、重试和取消他人任务。evidence:download:下载原始文件;普通读取者仅可预览脱敏片段。data-elements:edit、data-elements:publish。ontologies:edit、ontologies:publish。建议角色映射:viewer 只读;editor 可采集和编辑草稿;reviewer 可审核;ontology_admin 可发布本体;admin 管理平台配置。后端必须逐接口强制权限,前端菜单隐藏只改善体验。
安全要求:
以下按两周一个迭代估算,可由前后端、数据工程和测试并行推进。
/api/development/v1 蓝图。BusinessDomain、DataMeta、DataSource 补齐并对账稳定 UID。DataMeta 标签和旧 API,新增 DataElement 语义及 UID 查询;兼容期双写关系但不双写版本真相。SourceArtifact;无法恢复原始证据的对象标记 legacy_no_evidence,不得伪造证据。deployment/app/ 通过发布同步脚本更新,不直接作为主源码开发。| 风险 | 控制措施 |
|---|---|
| 把物理字段直接当业务概念 | 强制四层模型和显式映射,禁止采集任务直接发布 |
| LLM 幻觉或结果漂移 | 规则优先、金标评测、版本记录、证据展示、人工发布门禁 |
| OCR 低质量造成错误治理 | 置信度门槛、区域纠错、原图对照和人工复核 |
| Neo4j 与 PostgreSQL 不一致 | 单一控制面、Outbox、幂等投影、周期对账和可重放 |
| 大库/大文件拖垮服务 | 异步任务、分页、限流、超时、取消、资源配额和独立 Worker |
| 敏感数据进入日志或模型 | 最小采样、脱敏、模型请求审计、文件权限和凭据零暴露 |
| 本体范围过大难以落地 | 先选 2 个业务域和 1 个核心场景做 MVP,再扩域 |
| 旧接口兼容期长期不结束 | 建立调用清单、迁移看板和明确下线版本 |
首个可验证 MVP 建议选择“客户域 + 订单域”或平台现有数据最完整的两个业务域,完成:
MVP 成功标准不是“图画出来”,而是能从任一本体属性回溯到数据元素、物理字段和来源证据,并能从一次来源变化看到对已发布语义的影响。
在这些业务决策未确认前,可以先实施 V60 的统一模型、任务、证据和兼容底座;这些工作不会锁死后续数据库、OCR 或模型选型。