解析 VCF 文件并为其添加注释

本页面介绍如何执行以下操作:

  • 解析输入 VCF 文件中的注释字段。
  • 使用开源注释工具(如 Variant Effect Predictor (VEP))和数据库在导入 VCF 文件时为其添加注释。

解析注释字段

Variant Transforms 工具支持 VCF 格式的变体注释中规定的注释字段格式。 VEP 也使用这种格式。 以下示例展示了某个文件中由 VEP 添加了注释的 VCF 文件头:

##INFO=<ID=CSQ,Number=.,Type=String,Description="Consequence annotations from Ensembl VEP. Format: Allele|Consequence|IMPACT|SYMBOL|Gene|Feature_type|Feature|BIOTYPE|EXON|INTRON|ALLELE_NUM|...>

示例变体记录(其中,REF=AACALT=TAC,A)的相应注释如下所示:

CSQ=-|downstream_gene_variant|MODIFIER|WASH7P|ENSG00000227232|Transcript|ENST00000423562|unprocessed_pseudogene|||2,...,T|upstream_gene_variant|MODIFIER|DDX11L1|ENSG00000223972|Transcript|ENST00000518655|transcribed_unprocessed_pseudogene|||1

系统会为每个变体记录提供多个以英文逗号分隔的注释列表。 每组中的第一个字段对应于交替等位基因 (ALT)。以上示例仅为每个 ALT 使用了一个子集。实际文件包含更多字段,每个交替等位基因可以重复多次,包含不同的注释。

您可以在运行 Variant Transforms 工具时传递 --annotation_fields,它可拆分注释列表并将它们移到相应的 alternate_bases 记录下。例如,以下列表中每个 alternate_bases 下都有一个重复的记录字段 CSQ

Name Type Mode 说明
alternate_bases.CSQ RECORD REPEATED 此一交替的 CSQ 注释列表。
alternate_bases.CSQ.allele STRING NULLABLE 注释字段的 ALT 部分。
alternate_bases.CSQ.Consequence STRING Nullable
alternate_bases.CSQ.IMPACT STRING Nullable
alternate_bases.CSQ.SYMBOL STRING Nullable
alternate_bases.CSQ.Gene STRING Nullable
alternate_bases.CSQ.Feature_type STRING Nullable
alternate_bases.CSQ.Feature STRING Nullable
alternate_bases.CSQ.BIOTYPE STRING Nullable
alternate_bases.CSQ.EXON STRING Nullable
alternate_bases.CSQ.INTRON STRING Nullable

交替等位基因匹配

在上面的示例中,CSQ 列中列出的交替等位基因不同于变体记录的 ALT 字符串。例如,AAC->C 变体由 - 表示,这表示删除。这是因为 VEP 在带有 --minimal 标志的数据集上运行。Variant Transforms 支持在此 minimal 模式下匹配 ALT 字段。

支持下列 ALT 匹配模式:

  • 默认情况下,如果未设置任何 ALT 匹配标志,则遵循 VCF 格式的变体注释规范。

  • 如以上示例所示,在使用 --use_allele_num 标志时,Variant Transforms 工具会查找 ALLELE_NUM 注释字段的值。这是 VEP 的一项功能。

  • 您可以在 Variant Transforms 工具中使用 --minimal_vep_alt_matching 标志来模拟 --minimal 标志。不过,这可能导致不确定的匹配。这些不确定的匹配会在 Dataflow 控制台中进行计数和报告,并会添加到创建表格的新字段下。

    为获得最佳效果,请使用 --minimal,而不是 --minimal_vep_alt_matching

使用 VEP 为 VCF 文件自动添加注释

通常,如果要解析注释字段并将其拆分为单独的字段,首先必须为 VCF 文件预先添加注释。不过,如果使用 Variant Transforms 工具,则无需为 VCF 文件预先添加注释。

Variant Transforms 可在将 VCF 文件加载到 BigQuery 中时自动为其添加注释。为此,您必须同时运行 Variant Transforms 工具和 VEP,这需要创建并运行包含预配置 Docker 映像的 Compute Engine 虚拟机实例

同时运行 VEP 和 Variant Transforms 工具

如需同时运行 Variant Transforms 工具和 VEP,并在将 VCF 文件加载到 BigQuery 中时自动为其添加注释,Variant Transforms 工具在运行时必须至少带有以下标志:

  • --run_annotation_pipeline
  • --max_num_workers MAX_NUM_WORKERS--num_workers NUM_WORKERS
  • --annotation_output_dir gs://CLOUD_STORAGE_BUCKET

    您为 CLOUD_STORAGE_BUCKET 变量选择的存储分区必须归您的项目所有。

运行 VEP 时可传递给 Variant Transforms 工具的完整标志列表如下所示:

标志 默认 说明
--run_annotation_pipeline False 启用自动注释。
--max_num_workers--num_workers 自动确定 分别为作业中 Cloud Dataflow 将自动调节到的工作器数量上限,或最初分配给该作业的工作器数量。
--annotation_output_dir VEP 输出文件的 Cloud Storage 路径。输入文件的层次结构会复制到此位置,但新文件会附加 _vep_output.vcf。如果该目录已存在,则 Variant Transforms 工具将出现故障。
--vep_image_uri gcr.io/gcp-variant-annotation/vep_91 Cloud Genomics VEP Docker 映像。Google 会维护默认映像(VEP 91 版)。
--vep_cache_path gs://gcp-variant-annotation-vep-cache/vep_cache_homo_sapiens_GRCh38_91.tar.gz(推荐用于与 GRCh38 参考序列比对的人类基因组) 这是压缩版 VEP 缓存的 Cloud Storage 路径。您可以使用 --build_vep_cache.sh 脚本创建此文件。
--vep_info_field CSQ_VT 这是包含新注释的新 INFO 字段的名称。
--vep_num_fork 2 对单个文件运行 VEP 时使用的本地进程数。如需了解详情,请参阅 VEP 文档中的 --fork [num_forks] 标志。
--shard_variants 这用于确定在使用 VEP 向 VCF 文件添加注释之前是否将输入文件分片为较小的临时 VCF 文件。如果输入文件较小(例如,如果每个 VCF 文件包含的变体少于 50000 个),那么,将此标志设置为 True 可能会浪费计算资源。
--number_of_variants_per_shard 2000 这是 shard_variantsTrue 时写入每个分片的变体数量上限。如果您的数据集包含许多样本,不妨使用较小的值。如果提供较小的值,流水线可能需要更长的时间才能完成。在大多数情况下,建议使用该默认值。

问题排查

如果同时运行 VEP 和 Variant Transforms 工具,而该工具发生故障,系统会创建一个 logs 目录,提供来自运行进程的虚拟机的日志。logs 目录在 --annotation_output_dir 标志所用的路径中指定。除了标准的 Variant Transforms 工具日志之外,您还可以检查这些日志文件,以确定问题的原因。

当您同时运行 VEP 和 Variant Transforms 工具时,VEP 标志 --check_ref 将自动启用。因此,logs 目录中的文件将包含一系列与参考不匹配的变体。如果您使用了正确的 VEP 缓存,则不应该出现不匹配的情况,因为不匹配项会被自动丢弃,不会出现在 BigQuery 输出表中。

查询示例

提取有较大影响的变体

以下示例展示了如何从编码血红蛋白 β 链的 HBB 基因中提取有较大影响的变体:

#standardSQL
SELECT reference_name, start_position, reference_bases, ALT.alt, CSQ.*
FROM vcf_imports_external.gnomad_genomes_chr_hg19 AS T, T.alternate_bases AS ALT, ALT.CSQ AS CSQ
WHERE CSQ.SYMBOL = "HBB" AND CSQ.IMPACT = "HIGH"
ORDER BY start_position

运行查询将返回以下内容:

reference_name start_position reference_bases alt allele Consequence IMPACT SYMBOL Gene Feature_type Feature BIOTYPE EXON INTRON
1 11 5246947 G GC C frameshift_variant HIGH HBB ENSG00000244734 Transcript ENST00000335295 protein_coding 3/3
2 11 5246957 T C C splice_acceptor_variant HIGH HBB ENSG00000244734 Transcript ENST00000335295 proten_coding 2/2
3 11 5246957 T C C splice_acceptor_variant&non_coding_transcript_variant HIGH HBB ENSG00000244734 Transcript ENST00000475226 retained_intron 1/1
4 11 5247805 C T T splice_donor_variant HIGH HBB ENSG00000244734 Transcript ENST00000335295 protein_coding 2/2
5 11 5247805 C T T splice_donor_variant&non_coding_transcript_variant HIGH HBB ENSG00000244734 Transcript ENST00000475226 retained_intron 1/1
6 11 5247991 CAAAG C - frameshift_variant HIGH HBB ENSG00000244734 Transcript ENST00000335295 protein_coding 2/3
7 11 5247991 CAAAG C - frameshift_variant HIGH HBB ENSG00000244734 Transcript ENST00000380315 protein_coding 4/4
8 11 5248003 G A A stop_gained HIGH HBB ENSG00000244734 Transcript ENST00000335295 protein_coding 2/3
9 11 5248003 G A A stop_gained HIGH HBB ENSG00000244734 Transcript ENST00000380315 protein_coding 4/4
10 11 5248199 T A A stop_gained HIGH HBB ENSG00000244734 Transcript ENST00000335295 protein_coding 1/3
11 11 5248199 T A A stop_gained HIGH HBB ENSG00000244734 Transcript ENST00000380315 protein_coding 3/4

gnomAD 数据集内没有任何检出或样本,但您可以扩展此查询,使选择的样本包含有较大影响的变体。

将数据与 BigQuery 公开数据库联接

以下示例展示了如何将数据与 BigQuery 中提供的其他数据库(如途径数据库)联接。可通过 ISB-CGC 获得的部分数据库包括:

以下示例展示了如何根据 GO(基因本体论)生物过程 (GO:0006302) 的定义,从双链断裂修复途径中提取有较大影响的变体。

#standardSQL
SELECT
  reference_name, start_position, reference_bases, ALT.alt,
  CSQ.Consequence, CSQ.Impact, CSQ.SYMBOL
FROM
  `vcf_imports_external.gnomad_genomes_chr_hg19` AS T,
  T.alternate_bases AS ALT, ALT.CSQ AS CSQ
WHERE
  # Note: Matching based on symbol is "best effort" as the names may not be
  # standardized across sources.
  CSQ.SYMBOL IN (SELECT DB_Object_Symbol
                 FROM `isb-cgc.genome_reference.GO_Annotations`
                 WHERE GO_ID = 'GO:0006302')
  AND CSQ.IMPACT = "HIGH"
ORDER BY
  start_position

运行查询将返回以下内容:

reference_name start_position reference_bases alt Consequence IMPACT SYMBOL
1 5 917449 G T splice_acceptor_variant&non_coding_transcript_variant HIGH TRIP13
2 12 1022568 A C stop_gained HIGH RAD52
3 12 1022568 A C stop_gained HIGH RAD52
4 12 1022568 A C stop_gained HIGH RAD52
5 12 1023125 G A stop_gained HIGH RAD52
6 12 1023125 G A stop_gained HIGH RAD52
7 12 1023125 G A stop_gained HIGH RAD52
8 12 1023167 G A stop_gained HIGH RAD52
9 12 1023167 G A stop_gained HIGH RAD52
10 12 1023167 G A stop_gained HIGH RAD52
11 12 1023217 G T stop_gained HIGH RAD52
12 12 1023217 G T stop_gained HIGH RAD52
13 12 1023217 G T stop_gained HIGH RAD52
14 12 1025654 TGA T frameshift_variant HIGH RAD52
15 12 1025699 T G splice_acceptor_variant&non_coding_transcript_variant HIGH RAD52
16 12 1036004 GC G frameshift_variant HIGH RAD52
17 12 1038977 C CT frameshift_variant HIGH RAD52