使用预处理器工具验证 VCF 文件

本页介绍如何使用 Variant Transforms 工具中的 VCF 文件预处理器来验证 VCF 文件。您可以将预处理器作为独立验证程序运行,或者在将 VCF 文件加载和转换入 BigQuery 时作为协助程序运行。

VCF 文件预处理器概述

VCF 文件预处理器验证包含 VCF 文件的数据集,以识别文件之间的不一致。此预处理器报告这些不一致性,并在将数据加载到 BigQuery 时消除它们。如果预处理器无法确定如何消除不一致性,则它会为您提供可以进行的手动更正选项,例如处理格式错误的文件时手动更正。

运行预处理器时,它会生成一个报告,辨识三种类型的不一致性:

不一致性 说明
(默认)标头冲突 表示不同 VCF 文件中相同字段的定义不同。这种不一致性很常见。该报告列出了以下内容:
  • 所有相互矛盾的定义
  • 相应文件的文件路径(最多五个)
  • 建议的解决方案
(可选)格式错误的变体记录 表示存在 VCF 解析器无法解析的格式错误的记录。该报告列出了以下内容:
  • 受影响文件的文件路径
  • 格式错误的记录
(可选)推断标头 表示为字段的以下问题之一:
  • 使用了在任何 VCF 文件中都没有定义的字段。
  • 使用了已定义的字段,但字段值与字段描述不匹配。例如:
    • 字段定义的类型是整数,但提供的值是浮动。预处理器推断定义的类型被更改为浮动。
    • 定义的数量是 A (意味着每个备用碱基有一个值),但提供的值与备用碱基的基数不同。预处理器推断 num 是未知的。
    • 在这两种情况下,预处理器都会推断受影响字段的类型和数量,并在报告中列出它们。

运行预处理器

您可以使用安装了所有必需二进制文件和依赖项的 Docker 映像来运行该工具。如果要预处理大量文件,请参阅使用预处理器工具处理大输入

要使用 Docker 映像运行该工具,请完成以下步骤:

  1. 运行以下脚本以启动预处理器。将变量替换成您的 Google Cloud 项目中的相关资源。

    \#!/bin/bash
    \# Parameters to replace:
    \# The PROJECT_ID is the name of the GCP project that contains your BigQuery dataset.
    GOOGLE_CLOUD_PROJECT=PROJECT_ID
    INPUT_PATTERN=gs://BUCKET/*.vcf
    REPORT_PATH=gs://BUCKET/report.tsv
    RESOLVED_HEADERS_PATH=gs://BUCKET/resolved_headers.vcf
    TEMP_LOCATION=gs://BUCKET/temp
    
    COMMAND="vcf_to_bq_preprocess \
      --input_pattern ${INPUT_PATTERN} \
      --report_path ${REPORT_PATH} \
      --resolved_headers_path ${RESOLVED_HEADERS_PATH} \
      --report_all_conflicts true \
      --temp_location ${TEMP_LOCATION} \
      --job_name vcf-to-bigquery-preprocess \
      --runner DataflowRunner"
    docker run -v ~/.config:/root/.config \
      gcr.io/cloud-lifesciences/gcp-variant-transforms \
      --project "${GOOGLE_CLOUD_PROJECT}" \
      --zones us-west1-b \
      "${COMMAND}"
    

    在 Cloud Storage 存储分区中指定 VCF 文件的位置时,可以指定单个文件,也可以使用通配符 (*) 一次加载多个文件。可接受的文件格式包括 GZIP、BZIP 和 VCF。

    请注意,TEMP_LOCATION 目录用于存储运行该工具所需的临时文件。它可以是 Cloud Storage 中您具有写入权限的任何目录。

  2. 完成作业所需的时间因数据大小等多个因素而异,从几分钟到一小时或更长时间不等。

输出示例

以下示例显示在 1000 Genomes 数据集上运行预处理器工具时生成的报告:

标头冲突

ID 类别 冲突 文件路径 推荐的解决方案
GL FORMAT num=None type=Float gs://genomics-public-data/1000-genomes/vcf/ALL.chr13.integrated_phase1_v3.20101123.snps_indels_svs.genotypes.vcf num=None type=Float
gs://genomics-public-data/1000-genomes/vcf/ALL.chr17.integrated_phase1_v3.20101123.snps_indels_svs.genotypes.vcf
gs://genomics-public-data/1000-genomes/vcf/ALL.chr21.integrated_phase1_v3.20101123.snps_indels_svs.genotypes.vcf
gs://genomics-public-data/1000-genomes/vcf/ALL.chr8.integrated_phase1_v3.20101123.snps_indels_svs.genotypes.vcf
gs://genomics-public-data/1000-genomes/vcf/ALL.chrX.integrated_phase1_v3.20101123.snps_indels_svs.genotypes.vcf
num=3 type=Float gs://genomics-public-data/1000-genomes/vcf/ALL.wgs.integrated_phase1_v3.20101123.snps_indels_sv.sites.vcf
GQ FORMAT num=1 type=Float gs://genomics-public-data/1000-genomes/vcf/ALL.chrY.phase1_samtools_si.20101123.snps.low_coverage.genotypes.vcf num=1 type=Float
num=1 type=Integer gs://genomics-public-data/1000-genomes/vcf/ALL.chrY.phase1_samtools_si.20101123.snps.low_coverage.genotypes.vcf

推断的标头

ID 类别 推荐的解决方案
FT FORMAT num=1 type=String

找不到格式错误的记录。