第四节 内置数据库深度拆解:gnomAD、ClinVar、dbSNP 和 1000 Genomes
做 Funcotator 注释,说白了就是一个“对号入座”的过程。
你手里有一堆变异位点,需要知道它们在人群里有多常见、有没有临床意义、文献里有没有报道。
这些信息从哪来?就是靠内置的参考数据库。
我个人习惯,拿到一个新项目,第一件事就是把数据库结构和版本摸清楚。
今天咱们就挨个拆解 Funcotator 内置的几个核心数据源。
我会结合项目里的实战经验,把每个库的特点和坑都交代清楚。
为什么需要多个数据库?
你可能会想:一个数据库不就够用了?
事实是,每个库的定位完全不同。
| 数据库 | 核心用途 | 典型场景 |
|---|---|---|
| gnomAD | 人群频率 | 判断变异是否为常见多态性 |
| ClinVar | 临床意义 | 变异与疾病的关联证据 |
| dbSNP | 变异标识 | 获得 rs ID,方便文献检索 |
| 1000 Genomes | 全球人群频率 | 不同族裔的携带率比较 |
它们之间是互补关系,不是替代关系。
我在做肿瘤 panel 注释时,经常四个数据库的结果一起看。
gnomAD:人群频率的“金标准”
gnomAD 全称 Genome Aggregation Database。
说白了,就是目前人类群体遗传学里最大的公开数据集之一。
核心作用:提供变异在不同人群中的等位基因频率(AF, Allele Frequency)。
一个变异如果在 gnomAD 里频率超过 1%,基本可以排除致病性——太常见了。
我曾经遇到过一个案例:一个被 ClinVar 标记为“可能致病”的变异,我把 gnomAD 频率调出来一看,在东亚人群里频率高达 15%。
嗯,明显是个良性多态性被误标了。
数据格式:Funcotator 使用的 gnomAD 数据是经过预处理的 .seg 文件。
你可以在 Funcotator 配置目录里看到类似这样的文件名:
gnomAD_2.1.1_GRCh38.sorted.bgz
gnomAD_2.1.1_GRCh37.sorted.bgz
这些是 sorted bgzipped 格式,Funcotator 会自动索引。
你不需要手动解压,直接配置路径就行。
ClinVar:临床证据的“集散地”
ClinVar 的定位很简单——记录人类变异与疾病的关系。
每个条目都会包含:
- 变异描述(HGVS 格式)
- 临床意义(致病、可能致病、良性等)
- 提交者(哪个实验室或研究组)
- 证据等级(Reviewed by expert panel 或 multiple submitters)
我特别关注 ClinVar 的 ReviewStatus 字段。
如果一个变异被多个独立实验室一致评级,可信度就高得多。
如果只有一个提交者,我会标注为“待验证”。
数据格式:ClinVar 在 Funcotator 里也是 .seg 格式。
但内部存储其实是 VCF 结构的变体。你可以用 grep 直接看部分数据:
# 不要直接解压大文件,这里只是示例
zcat clinvar_20241001.vcf.gz | head -20
输出里会有标准的 VCF header 和记录行,包含 CLNSIG、CLNREVSTAT 等关键 INFO 字段。
dbSNP:变异身份的“身份证”
dbSNP 可能你早就用过了。
它的核心功能就是给变异分配一个唯一的 rs ID。
为什么需要它?
你想想看,当你想在文献里引用一个变异,靠描述“chr1:123456 A>G”别人根本找不到。
但如果你说“rs123456”,全世界的数据库都能精确命中。
Funcotator 在注释时,会自动把变异位点匹配到 dbSNP 的 rs ID。
输出结果里会出现 dbsnp_rsid 字段。
避坑提醒:dbSNP 并不提供临床意义或人群频率信息。它的定位就是标识符。
我见过不少初学者以为 rs ID 代表“有意义”,其实 dbSNP 里包含大量无害多态性。
| 特性 | dbSNP | gnomAD | ClinVar |
|---|---|---|---|
| 标识符 | rs ID 唯一 | 无专用 ID | SCV 编号 |
| 人群频率 | 部分有 | 最全面 | 无 |
| 临床意义 | 无 | 无 | 核心功能 |
| 数据量 | 极大(含所有已提交变异) | 中(仅高质量变异) | 较小(仅临床相关) |
1000 Genomes:全球族裔的“人类样本库”
1000 Genomes Project 是最早的大规模人类基因组项目之一。
虽然样本量(约 2500 人)不如 gnomAD,但它有一个不可替代的优势:族群信息很完整。
- AFR(非洲)
- EUR(欧洲)
- EAS(东亚)
- SAS(南亚)
- AMR(美洲混血)
我记得有一次做药物基因组学分析,需要判断一个变异在亚洲人群里是否常见。
gnomAD 里只给了整体频率,而 1000 Genomes 明确给出了 EAS 的频率为 8.2%——这个数据直接影响了后续的用药决策。
格式说明:Funcotator 里的 1000 Genomes 数据也是 .seg 格式。
它的字段设置和 gnomAD 类似,但频率是按族群拆分的。
# Funcotator 数据源配置示例(dataSources目录下的文件)
1000Genomes_phase3_GRCh38.sorted.bgz
Funcotator 如何整合这些库?
你可能会问:这些库格式不一样、版本不同,Funcotator 是怎么统一处理的?
嗯,这里就要提到 Funcotator 的“数据源引擎”了。
它其实是个模块化设计:
- 每个数据库提供一个
DataSource类 - 每个数据源有自己的读取器和索引
- Funcotator 在所有数据源之间做按位并行查找
换句话说,传入一个 VCF 文件,Funcotator 会同时去四个库里查询每个位点的信息,然后把结果合并到一行注释里。
下图展示了这四个内置数据库在 Funcotator 注释流程中的位置和关系:
实战:配置并验证数据库路径
讲完了库的作用,来点能动手的东西。
我提供一个小脚本,帮你检查当前 Funcotator 环境里已经配置了哪些内置数据库:
#!/bin/bash
# 检查 Funcotator 内置数据库
FUNCOTATOR_DIR="/path/to/funcotator/dataSources"
echo "=== 已配置的内置数据库 ==="
for dir in gnomAD clinvar dbsnp 1000Genomes; do
if [ -d "$FUNCOTATOR_DIR/$dir" ]; then
echo "[可用] $dir"
ls "$FUNCOTATOR_DIR/$dir" | head -3
else
echo "[未配置] $dir"
fi
done
如果某个数据库显示“未配置”,你需要从 GATK 资源包或官方 FTP 下载对应的 .seg 文件,然后放到 dataSources 目录下。
总结一下这四个库的核心差异:
- gnomAD:看人群频率,尤其是稀有变异过滤
- ClinVar:看临床意义,判断是否致病
- dbSNP:看 rs ID,方便文献和数据库交叉引用
- 1000 Genomes:看族裔特异性频率,适合群体遗传学研究
实际项目中,我一般会同时开启这四个库的注释。
一个位点拿到四条线索,交叉验证后再下结论,准确率会高很多。