湖仓:Lakehouse¶
本章所属 DDA 层:Lakehouse
问题¶
消费方换了,数据平台要解决的问题就换了。
过去十年,平台服务的是人。分析师写 SQL,业务看仪表盘,数据科学家取样训模型。人能从字段名猜含义,能忍 T+1,口径糊了还能打电话。机器对契约漂移敏感,也读不懂「A 表示活性还是已归档」。
没有过质检的落湖,Ontology 没东西可绑。证据索引会把空切片当成可引用原文。闭环也没数据可回流。
阿斯利华的化合物表、CSR、专利 PDF、ELN 导出,得先变成带契约的数据产品。复制一份进 AI 沙箱,只是把传递问题挪了个地方。湖仓要做的几件事很具体:契约写清字段含义,入湖质检拦住空树和未登记来源,证据和知识分腿走,避免每篇文档变成本体类。
传统方案¶
面向 BI 的平台大致是这样:ETL 入仓,按主题域分表,字段名扛含义,口径写在注释或 BI 语义层,新鲜度 T+1,质量靠抽检和 SLA 报表。
阿斯利华早期也是这个样子。dwd_compound 存研发代号,dwd_clinical_trial 存进度,监管文档在文档系统里。有人要查「在研的 c-Met 抑制剂」,自己写 SQL,自己在字段名里找意思。
报表时代这套能转。口径靠人脑对齐,团队的核心工作是保证 T+1 跑通。
文档更随便。CSR、SOP 当附件,扫描件和 Excel 不良反应清单靠邮件。没有统一解析,也没有「这篇能不能入库」的闸门。
为什么失效¶
慢不是主因。消费方变了,而且科研数据不只是表。
cmpd_status='A' 对人也许够用,对机器是黑箱。含义散在表名、字段、注释、BI 口径里,没有单一来源。
上游改字段名、改类型、改取值,是常态。没有显式契约,消费边界就不稳。
文档若静默入库,后果更难看。空语义树、版面大面积降级、来源未登记、同一 doc_id 反复追加,证据索引都会当真。引用链从第一天就脏。
每篇 PDF 直接灌进本体,图会按文档增长速度膨胀。文档是证据和候选的来源,不是世界模型。
flowchart LR
subgraph BI["面向 BI 的传统数仓"]
B1[字段名承载含义] --- B2[T+1 新鲜度]
B2 --- B3[口径散落注释]
B3 --- B4[附件当文档库]
end
subgraph AI["科研落湖要的东西"]
A1[机器可读契约] --- A2[入湖质检]
A2 --- A3[Evidence与Knowledge分腿]
A3 --- A4[失败要大声]
end
BI -.对不上.-> AI
图:传统数仓和科研落湖对不上(DDA 层:Lakehouse)
新的设计思想¶
湖仓既要给人出报表,也要给不会猜含义的机器用,还要同时接表和文档。
数据契约是一等公民,字段和变更规则写进可校验的协议。
文档入湖是一条阶段链,不是「丢进解析器」:Detect → Route → Parse → Clean → Standardize → IngestQA → Persist。
入湖分两腿。Evidence 腿回答原文怎么说。Knowledge 腿只产候选断言,默认不进知识图。
入湖质检和发版守门分开。前者决定文档能不能进湖,后者决定事实能不能进图。
能力要切剖面。查一个企业 ID,不该先把版面引擎和向量模型全部拉起来。
架构设计¶
flowchart TB
SRC[数据源与文档] --> CT[数据契约 / 来源登记]
CT --> PIPE[Detect_Route_Parse_Clean_Standardize]
PIPE --> QA[IngestQA]
QA -->|通过| FORK[Persist]
QA -.阻断.-> AL[告警与拦截]
FORK --> EV[Evidence腿]
FORK --> KN[Knowledge腿_extracted]
EV --> MD[可程序消费元数据]
EV --> LN[可追溯出处]
图:先过契约和质检,再分腿落湖(DDA 层:Lakehouse)
这一层的基本单位是数据产品。裸表不够,未质检的 PDF 也不够。先保证上层绑得住,再谈它是不是知识。
工程实践¶
决策表¶
| 决策 | 选择 | 放弃 |
|---|---|---|
| 入湖对象 | 表 + 文档内结构(PDF/Office/HTML/图) | 本期把 FHIR / OMOP / VCF 临床仓当切包前提 |
| 文档命运 | 切证据、挂已有实体、抽候选 | 每篇文档 mint 本体类 |
| 质检 | IngestQA 管入库,QualityGate 管发版 | 一个闸门两用 |
| 失败 | 空树、降级超阈、许可未登记则阻断 | 警告后继续写湖 |
| 运行时 | 入湖 / 抽取 / 图谱 / 索引 / 访问分剖面 | 一个安装面拉齐全部重依赖 |
| 编排 | 纯函数步骤 + 编排器管失败域 | 把业务逻辑写进编排器 |
阿斯利华可走通的例子¶
化合物产品用 YAML 声明契约:
name: compound_active
owner: data-platform@asliva.example
description: 活性化合物清单,含研发代号与属性
contract:
version: 1.2.0
fields:
- name: compound_id
type: string
business_meaning: 企业主键,对应 ASH:ENT:DC:*
constraints: [not_null, unique]
- name: research_code
type: string
business_meaning: 内部研发代号,如 ASH-001
constraints: [not_null]
- name: target
type: string
business_meaning: 作用靶点,如 c-Met
- name: status
type: string
business_meaning: 研发状态
allowed_values: [discovery, preclinical, phase1, phase2, phase3, marketed, withdrawn]
change_policy:
breaking_change: requires_major_version
notification: contract-broadcast@asliva.example
CSR doc_id=csr_ash001_phase1_v3 走完阶段链,应得到带 3.2 不良反应表的语义树、类型化块、来源和许可戳。IngestQA 通过后,Evidence 腿写下可还原切片;Knowledge 腿写下 extracted 断言,例如「ASH-001 treats NSCLC」。状态仍不是 validated。
同一 doc_id 重跑要先删后写。追加会让引用坐标翻倍,审计时对不上版本。
失败模式¶
- 空树仍写入证据索引。引用看起来完整,点进去没有正文。
- 缺框、OCR、表结构降级超阈值还入库。不良反应清单被拍平,没法引用。
- 来源未登记或许可未标。候选期无法过滤,要么泄漏存在性,要么整库拒检。
- 占位向量标成可检索。检索「能跑」,召回是噪声。
- 为了装配词典再拉一整条文献库。入湖剖面失去独立失败域。
五项 AI 就绪特性¶
- 语义化:数据产品有机器可读的业务含义。
- 可治理:契约、出处、口径有单一来源。
- 可追溯:从消费结果能走回原始对象。
- 低延迟:关键链路跟得上上下文接口。
- 安全:按产品授权,不开放裸库。
可观测四支柱¶
质量在写入时校验,不靠第二天抽检。
- Trace(WHERE):这份 CSR 卡在路由、解析,还是质检。
- I/O(WHAT):进的是哪份对象,出了几棵树、几个块。
- State(WHY):为什么降级、为什么阻断。被否决的原因要留下。
- Metrics(WHEN):新鲜度、降级比例、阻断次数。
State 最容易被省。只记「失败了」,闭环以后挖不到信号。
业界路线对照¶
阿斯利康谈 FAIR 时,把持久标识和受控词表嵌进数据产品,而不是事后贴标签。Open PHACTS 的公开数据先进入可缓存的整合层,再经 API 对外。湖仓层只借这一条:先成为可引用的产品,再谈图谱和检索。
对象存储加表格式湖加 SQL 引擎,是一种实现,不是本层定义。换一套批处理栈,替代不了入湖阶段纪律。
最佳实践¶
每个产品有负责人、契约、SLA 和消费者清单。
先写契约,再写入湖作业。
IngestQA 在管道里,违约即拦截。
证据可以自动进索引。知识边另走策展。
查身份不该依赖版面引擎。
契约、质检、可观测都是长期成本。PoC 能简化,上生产前要补齐。
延伸阅读¶
- Dehghani《Data Mesh》;Data Contract 社区规范。
- 头部药企把持久标识和受控词表嵌入数据生命周期的公开讨论。
- Trace / I/O / State / Metrics。
Checklist¶
- 对外消费的数据产品是否都有显式契约?
- 文档是否走 Detect → Route → Parse → Clean → Standardize → IngestQA → Persist?
- IngestQA 和发版 QualityGate 是否分开?
- 空树、降级超阈、许可未登记是否阻断?
- 同一文档重跑是否先删后写?
- Evidence 和 Knowledge 是否分腿,文档是否避免自动 mint 本体?
- 入湖、抽取、图谱、索引、访问是否按剖面安装?
- 可观测是否记下 WHY?
机器消费要契约和入湖质检。这一层是 Ontology 和证据链的地基:表和文档先成为可质检的产品。