第3章 宏基因组数据获取:公共数据库下载与本地管理

做宏基因组分析,第一步就是搞到数据。你想想看,没数据咱分析啥?公共数据库 SRA 和 ENA 就是最常用的两个来源。我个人习惯先把数据拉到本地,再按统一规范管理,这样后面跑流程时才不会手忙脚乱。这一章我就带你走一遍从数据库到本地文件夹的全过程。

3.1 两大公共数据库概览

SRA(Sequence Read Archive)由 NCBI 维护,ENA(European Nucleotide Archive)由 EBI 维护。说白了,只要你的样品测了序,基本都会提交到这两个库里。它们的数据是互通的,但下载接口和格式略有不同。

特性 SRA (NCBI) ENA (EBI)
数据层级 BioProject → BioSample → Run → SRA file Project → Sample → Experiment → Run
常用下载工具 prefetch, fasterq-dump curl, ascp (Aspera), enaBrowserTools
下载格式 .sra (需转换) 或直接 .fastq .fastq.gz 可直接使用
速度 普通HTTP,可用aspera加速 提供FTP与aspera,速度较快
我的习惯: 如果样本量不大(比如十几个),我会优先从 ENA 下载 .fastq.gz,省去转格式这一步。要是一次性几百个样本,就用 prefetch 配合 Aspera 从 NCBI 拉,然后统一用 fasterq-dump 转。

3.2 SRA 数据下载:sra-toolkit 实战

先安装 sra-toolkit。我记得第一次装的时候踩了个坑——环境变量没配好,prefetch 找不到数据库路径。后来我写了个小脚本自动配置,现在分享给你。

安装与配置

# 下载并解压(以 Linux 为例)
wget https://ftp-trace.ncbi.nlm.nih.gov/sra/sdk/3.0.0/sratoolkit.3.0.0-ubuntu64.tar.gz
tar -xzf sratoolkit.3.0.0-ubuntu64.tar.gz

# 添加环境变量
export PATH=$PATH:/path/to/sratoolkit.3.0.0-ubuntu64/bin

# 配置缓存目录(默认在 home 下,建议改到大分区)
vdb-config -i

运行 vdb-config -i 后会弹出交互界面,把 cache 路径改成你的数据盘,比如 /data/sra_cache。为什么要改?我碰见过 home 分区被 prefetch 的临时文件撑爆,半夜跑任务崩了,气得不行。

下载单个 Run

prefetch SRR12345678

默认会下载到 $HOME/ncbi/public/sra/,如果你改了配置就到指定目录。下载完后得到一个 .sra 文件,需要转成 FASTQ 才能用。

转换成 FASTQ

fasterq-dump --split-files SRR12345678 -O /data/fastq/

参数 --split-files 会把双端测序拆成两个文件,单端测序只生成一个。我记得有个项目,样品是双端但提交时标记成了单端,结果 fasterq-dump 只出一个文件,还好我习惯先检查一下 read 数目。建议拿到数据后先看一眼 seqkit stats 的统计结果。

曾经踩过的坑: fasterq-dump 默认占用大量内存和磁盘临时空间。如果你服务器内存只有 8G,建议加 --threads 4 --mem-limit 4096 限制资源。否则 OOM 让你怀疑人生。

批量下载与重命名

实际项目中往往有一份样本清单。写个循环就行:

cat SRR_Acc_List.txt | while read srr; do
    prefetch $srr
    fasterq-dump $srr -O /data/project/fastq/ --split-files
done

不过我会在每个 fasterq-dump 后面加一个 sleep 2,防止同时写硬盘造成 IO 风暴。

3.3 ENA 数据下载:轻量级方案

ENA 提供的是 .fastq.gz 的直链,有些场景下更方便。举个例子,你只需要几十个样本,用 curl 一行命令就能搞定。

通过 FTP 下载

wget ftp://ftp.sra.ebi.ac.uk/vol1/fastq/SRR123/001/SRR12345678/SRR12345678.fastq.gz

但这种写法你得自己拼 URL。我发现 ENA 有个 API 可以把 Run ID 转成下载链接:

curl -s "https://www.ebi.ac.uk/ena/portal/api/filereport?accession=SRR12345678&result=read_run&fields=fastq_ftp" | \
    cut -f2 | tr ';' '\n'

输出结果直接就是可用的下载地址。把这个地址扔给 wget -c 就能断点续传。

使用 Aspera 加速

当数据量上百 GB 时,HTTP 会很慢。ENA 支持 Aspera,速度能快 5-10 倍。前提是装好 ascp(IBM Aspera Connect)。

ascp -QT -l 300M -P33001 \
  era-fasp@fasp.sra.ebi.ac.uk:/vol1/fastq/SRR123/001/SRR12345678/SRR12345678.fastq.gz \
  /data/project/fastq/

这里 -l 300M 限速 300 Mbps,别把公司带宽占满了。我记得有一次我没加 -Q(自适应传输),结果上传方把我连接断掉了……加上这个参数能避免。

3.4 本地测序数据管理规范

数据下载回来只是开始,怎么管理才是关键。我见过有人把几百个样本的 FASTQ 全扔在一个文件夹里,文件名还都是 SRR 号。等到分析的时候,连哪个是哪个都分不清。后来我自己定了一套命名和管理规范,趟过了不少坑。

目录结构示例

/data/project_2024/
├── 00_reference/          # 参考基因组、索引
├── 01_raw_data/           # 原始 FASTQ
│   ├── Sample_A/
│   │   ├── Sample_A_R1.fastq.gz
│   │   └── Sample_A_R2.fastq.gz
│   └── Sample_B/
│       ├── Sample_B_R1.fastq.gz
│       └── Sample_B_R2.fastq.gz
├── 02_trimmed/            # 质控后数据
├── 03_assembly/           # 组装结果
├── 04_binning/            # 分箱结果
├── logs/                  # 运行日志
└── md5sum.txt             # 所有文件的校验和

注意我用了 Sample_A 而不是 SRR12345678。为什么?因为同一个样本可能有多个 Run,或者后来重新测了序。第一次不把名字映射好,后面几个月你根本记不住。

建立样品映射表

我习惯用一个 CSV 记录所有元信息:

sample_id,run_id,platform,instrument,read_type
Sample_A,SRR12345678,Illumina,NovaSeq 6000,PE150
Sample_A,SRR12345679,Illumina,NovaSeq 6000,PE150
Sample_B,SRR23456789,Illumina,MiSeq,PE250

这样你写下游脚本时只需要解析这张表,而不是去猜测文件名。我一般会把这张表放在项目根目录的 metadata.csv 里,并加入 Git 版本管理(数据当然不 track,只 track 脚本和 metadata)。

我的铁律: 原始数据一旦下载,立刻用 md5sum 生成校验文件,并上传到云存储备份。以前吃过亏:跑了三天分析,结果发现 FASTQ 在下载时被截断了,血泪教训。

3.5 实战演练:下载一个宏基因组样本

咱们动手走一遍。我用的是 NCBI 上一个人肠道宏基因组样本 SRR12345678(虚构 ID,实际请替换成真实 Run)。

  1. 确认 Accession
    在 NCBI SRA 页面查到 BioSample 和 Run ID。我一般会复制 Run ID,同时记下测序平台和 read 长度。
  2. 配置 sra-toolkit 缓存路径
    执行 vdb-config -i 把 cache 指向大容量分区。
  3. 下载 .sra 文件
prefetch SRR12345678
  1. 转 FASTQ 并存放到规范目录
mkdir -p /data/project/01_raw_data/HumanGut_1
fasterq-dump SRR12345678 -O /data/project/01_raw_data/HumanGut_1/ --split-files
gzip /data/project/01_raw_data/HumanGut_1/*.fastq
  1. 校验完整性
    用 seqkit stats 检查 read 条数,并与 SRA 页面上的数量对比。
seqkit stats /data/project/01_raw_data/HumanGut_1/*.fastq.gz

输出里会显示 num_seqs,如果跟 SRA 记录的 Spot 数不一致,那就重新下载吧。

好了,现在你的原始数据安安稳稳躺在本地文件夹里,名字清晰、结构规范。下一步就是做质控了,不过那是下一章的内容。咱们先把数据获取这块的基础打牢。

宏基因组数据获取与管理流程 NCBI SRA ENA / EBI DDBJ / 其他 prefetch curl / ascp wget / enaBrowserTools 格式转换 / 合并 本地目录管理 metadata.csv + md5sum Tips 优先 ENA 直链下载 批量下载加限速 命名映射表必须建
一个小窍门: 我会先在本地用 seqkit sample -p 0.001 抽个千分之一的子集,快速跑一下质控和初版流程,确认数据没问题再全量下载。这样即使下载出错了,损失也很小。