TileDB-VCF
概述
TileDB-VCF 是一個高效能的 C++ 函式庫,並提供 Python 與 CLI 介面,用於高效儲存與檢索基因組變異呼叫資料。它建構在 TileDB 的稀疏陣列技術之上,能實現 VCF/BCF 檔案的可擴展攝入、無需昂貴合併操作的增量樣本添加,以及對儲存在本地或雲端的變異資料進行高效的平行查詢。
何時使用此技能
此技能應在以下情況下使用:
- 學習 TileDB-VCF 的概念與工作流程
- 用於基因組學分析與管線的原型開發
- 處理小到中型資料集(< 1000 個樣本)
- 需要將新樣本增量添加到現有資料集
- 需要跨多個樣本高效查詢特定基因組區域
- 處理雲端儲存的變異資料(S3、Azure、GCS)
- 需要從大型 VCF 資料集中匯出子集
- 為群體研究建立變異資料庫
- 教育專案與方法開發
- 變異資料操作對效能要求嚴苛
快速開始
安裝
建議方法:Conda/Mamba
# 如果您使用 M1 Mac,請輸入以下兩行
CONDA_SUBDIR=osx-64
conda config --env --set subdir osx-64
# 建立 conda 環境
conda create -n tiledb-vcf "python<3.10"
conda activate tiledb-vcf
# Mamba 是 conda 更快且更可靠的替代方案
conda install -c conda-forge mamba
# 安裝 TileDB-Py 和 TileDB-VCF,並與其他實用函式庫對齊
mamba install -y -c conda-forge -c bioconda -c tiledb tiledb-py tiledbvcf-py pandas pyarrow numpy
替代方案:Docker 映像檔
docker pull tiledb/tiledbvcf-py # Python 介面
docker pull tiledb/tiledbvcf-cli # 命令列介面
基本範例
建立並填充資料集:
import tiledbvcf
# 建立新資料集
ds = tiledbvcf.Dataset(uri="my_dataset", mode="w",
cfg=tiledbvcf.ReadConfig(memory_budget=1024))
# 攝入 VCF 檔案(必須是單樣本且附帶索引)
# 需求:
# - VCF 必須是單樣本(非多樣本)
# - 必須有索引:.csi(bcftools)或 .tbi(tabix)
ds.ingest_samples(["sample1.vcf.gz", "sample2.vcf.gz"])
查詢變異資料:
# 開啟現有資料集以供讀取
ds = tiledbvcf.Dataset(uri="my_dataset", mode="r")
# 查詢特定區域與樣本
df = ds.read(
attrs=["sample_name", "pos_start", "pos_end", "alleles", "fmt_GT"],
regions=["chr1:1000000-2000000", "chr2:500000-1500000"],
samples=["sample1", "sample2", "sample3"]
)
print(df.head())
匯出為 VCF:
import os
# 匯出兩個 VCF 樣本
ds.export(
regions=["chr21:8220186-8405573"],
samples=["HG00101", "HG00097"],
output_format="v",
output_dir=os.path.expanduser("~"),
)
核心功能
1. 資料集建立與攝入
建立 TileDB-VCF 資料集,並從多個 VCF/BCF 檔案增量攝入變異資料。這適用於建立群體基因組學資料庫和群體研究。
需求:
- 僅限單樣本 VCF:不支援多樣本 VCF
- 需要索引檔案:VCF/BCF 檔案必須有索引(.csi 或 .tbi)
常見操作:
- 使用最佳化的陣列綱要建立新資料集
- 平行攝入單個或多個 VCF/BCF 檔案
- 增量添加新樣本,無需重新處理現有資料
- 設定記憶體使用量與壓縮設定
- 處理各種 VCF 格式與 INFO/FORMAT 欄位
- 恢復中斷的攝入程序
- 在攝入期間驗證資料完整性
2. 高效查詢與過濾
跨基因組區域、樣本和變異屬性高效查詢變異資料。這適用於關聯研究、變異發現和群體分析。
常見操作:
- 查詢特定基因組區域(單個或多個)
- 依樣本名稱或樣本群組過濾
- 提取特定的變異屬性(位置、對偶基因、基因型、品質)
- 高效存取 INFO 與 FORMAT 欄位
- 結合空間與基於屬性的過濾
- 串流處理大型查詢結果
- 跨樣本或區域執行聚合運算
3. 資料匯出與互通性
以多種格式匯出資料,以供下游分析或與其他基因組學工具整合。這適用於分享資料集、建立分析子集或提供給其他管線使用。
常見操作:
- 匯出為標準 VCF/BCF 格式
- 產生包含選取欄位的 TSV 檔案
- 建立樣本/區域特定子集
- 維護資料來源與中繼資料
- 無損資料匯出,保留所有註釋
- 壓縮輸出格式
- 大型資料集的串流匯出
4. 群體基因組學工作流程
TileDB-VCF 擅長大規模群體基因組學分析,需要跨多個樣本和基因組區域高效存取變異資料。
常見工作流程:
- 全基因組關聯研究(GWAS)資料準備
- 罕見變異負擔檢定
- 群體分層分析
- 跨群體的對偶基因頻率計算
- 大型群體的品質控制
- 變異註釋與過濾
- 跨群體比較分析
關鍵概念
陣列綱要與資料模型
TileDB-VCF 資料模型:
- 變異以稀疏陣列形式儲存,基因組座標作為維度
- 樣本以屬性形式儲存,允許高效的樣本特定查詢
- INFO 與 FORMAT 欄位保留原始資料類型
- 自動壓縮與分塊以達到最佳儲存
綱要配置:
# 具有特定切片範圍的自訂綱要
config = tiledbvcf.ReadConfig(
memory_budget=2048, # MB
region_partition=(0, 3095677412), # 完整基因組
sample_partition=(0, 10000) # 最多 1 萬個樣本
)
座標系統與區域
關鍵: TileDB-VCF 使用基於 1 的基因組座標,遵循 VCF 標準:
- 位置是以 1 為基礎(第一個鹼基是位置 1)
- 範圍在兩端均為包含
- 區域 "chr1:1000-2000" 包含位置 1000-2000(總共 1001 個鹼基)
區域規格格式:
# 單一區域
regions = ["chr1:1000000-2000000"]
# 多個區域
regions = ["chr1:1000000-2000000", "chr2:500000-1500000"]
# 整條染色體
regions = ["chr1"]
# BED 風格(以 0 為基礎,半開區間,內部會轉換)
regions = ["chr1:999999-2000000"] # 等同於以 1 為基礎的 chr1:1000000-2000000
記憶體管理
效能考量:
- 設定適當的記憶體預算,根據可用系統記憶體
- 對非常大的結果集使用串流查詢
- 將大型攝入工作劃分以避免記憶體耗盡
- 設定切片快取以進行重複區域存取
- 對多個檔案使用平行攝入
- 合併鄰近區域以最佳化區域查詢
雲端儲存整合
TileDB-VCF 可與雲端儲存無縫協作:
# S3 資料集
ds = tiledbvcf.Dataset(uri="s3://bucket/dataset", mode="r")
# Azure Blob 儲存體
ds = tiledbvcf.Dataset(uri="azure://container/dataset", mode="r")
# Google Cloud Storage
ds = tiledbvcf.Dataset(uri="gcs://bucket/dataset", mode="r")
常見陷阱
- 攝入期間記憶體耗盡: 為大型 VCF 檔案使用適當的記憶體預算和批次處理
- 無效率的區域查詢: 合併鄰近區域,而不是執行許多單獨查詢
- 缺少樣本名稱: 確保 VCF 標頭中的樣本名稱與查詢樣本規格相符
- 座標系統混淆: 記住 TileDB-VCF 使用以 1 為基礎的座標,如同 VCF 標準
- 大型結果集: 對返回數百萬個變異的查詢使用串流或分頁
- 雲端權限: 確保雲端儲存存取的正確身分驗證
- 並行存取: 多個寫入器同時寫入同一個資料集可能導致損毀 — 請使用適當的鎖定機制
CLI 使用
TileDB-VCF 提供命令列介面,包含以下子命令:
可用的子命令:
create- 建立一個空的 TileDB-VCF 資料集store- 將樣本攝入到 TileDB-VCF 資料集中export- 從 TileDB-VCF 資料集匯出資料list- 列出 TileDB-VCF 資料集中存在的所有樣本名稱stat- 列印 TileDB-VCF 資料集的高階統計資訊utils- 用於處理 TileDB-VCF 資料集的工具version- 列印版本資訊並退出
# 建立空的資料集
tiledbvcf create --uri my_dataset
# 攝入樣本(需要單樣本 VCF 及其索引)
tiledbvcf store --uri my_dataset --samples sample1.vcf.gz,sample2.vcf.gz
# 匯出資料
tiledbvcf export --uri my_dataset \
--regions "chr1:1000000-2000000" \
--sample-names "sample1,sample2"
# 列出所有樣本
tiledbvcf list --uri my_dataset
# 顯示資料集統計資訊
tiledbvcf stat --uri my_dataset
進階功能
對偶基因頻率分析
# 計算對偶基因頻率
af_df = tiledbvcf.read_allele_frequency(
uri="my_dataset",
regions=["chr1:1000000-2000000"],
samples=["sample1", "sample2", "sample3"]
)
樣本品質控制
# 執行樣本 QC
qc_results = tiledbvcf.sample_qc(
uri="my_dataset",
samples=["sample1", "sample2"]
)
自訂配置
# 進階配置
config = tiledbvcf.ReadConfig(
memory_budget=4096,
tiledb_config={
"sm.tile_cache_size": "1000000000",
"vfs.s3.region": "us-east-1"
}
)
資源
取得協助
開源 TileDB-VCF 資源
開源文件:
- TileDB Academy: https://cloud.tiledb.com/academy/
- 群體基因組學指南: https://cloud.tiledb.com/academy/structure/life-sciences/population-genomics/
- TileDB-VCF GitHub: https://github.com/TileDB-Inc/TileDB-VCF
TileDB-Cloud 資源
針對大規模/生產級基因組學:
- TileDB-Cloud 平台: https://cloud.tiledb.com
- TileDB Academy(所有文件): https://cloud.tiledb.com/academy/
開始使用:
- 免費帳號註冊: https://cloud.tiledb.com
- 聯繫:[email protected] 以獲取企業需求
擴展至 TileDB-Cloud
當您的基因組學工作負載超出單節點處理能力時,TileDB-Cloud 可為生產級基因組學管線提供企業級擴展能力。
注意:本節根據現有文件介紹 TileDB-Cloud 的功能。如需完整的 API 細節和當前功能,請查閱官方 TileDB-Cloud 文件和 API 參考。
設定 TileDB-Cloud
1. 建立帳號並獲取 API Token
# 在 https://cloud.tiledb.com 註冊
# 在您的帳號設定中產生 API Token
2. 安裝 TileDB-Cloud Python 用戶端
# 基本安裝
uv pip install tiledb-cloud
# 包含基因組學特定功能
uv pip install tiledb-cloud[life-sciences]
3. 配置身分驗證
# 使用您的 API Token 設定環境變數
export TILEDB_REST_TOKEN="your_api_token"
import tiledb.cloud
# 透過 TILEDB_REST_TOKEN 自動進行身分驗證
# 程式碼中無需顯式登入
從開源遷移到 TileDB-Cloud
大規模攝入
# TileDB-Cloud:分散式 VCF 攝入
import tiledb.cloud.vcf
# 使用專用 VCF 攝入模組
# 注意:確切 API 需參考 TileDB-Cloud 文件
# 此處代表可用的功能結構
tiledb.cloud.vcf.ingestion.ingest_vcf_dataset(
source="s3://my-bucket/vcf-files/",
output="tiledb://my-namespace/large-dataset",
namespace="my-namespace",
acn="my-s3-credentials",
ingest_resources={"cpu": "16", "memory": "64Gi"}
)
分散式查詢處理
# TileDB-Cloud:跨分散式儲存的 VCF 查詢
import tiledb.cloud.vcf
import tiledbvcf
# 定義資料集 URI
dataset_uri = "tiledb://TileDB-Inc/gvcf-1kg-dragen-v376"
# 從資料集取得所有樣本
ds = tiledbvcf.Dataset(dataset_uri, tiledb_config=cfg)
samples = ds.samples()
# 定義要查詢的屬性和範圍
attrs = ["sample_name", "fmt_GT", "fmt_AD", "fmt_DP"]
regions = ["chr13:32396898-32397044", "chr13:32398162-32400268"]
# 執行讀取,以分散式方式進行
df = tiledb.cloud.vcf.read(
dataset_uri=dataset_uri,
regions=regions,
samples=samples,
attrs=attrs,
namespace="my-namespace", # 指定扣除費用的帳號
)
df.to_pandas()
企業功能
資料分享與協作
# TileDB-Cloud 透過基於命名空間的權限和群組管理提供企業級資料分享功能
# 透過 TileDB-Cloud URI 存取共享資料集
dataset_uri = "tiledb://shared-namespace/population-study"
# 透過共享筆記本和運算資源進行協作
# (具體 API 需參考 TileDB-Cloud 文件)
成本最佳化
- 無伺服器運算:僅需支付實際運算時間
- 自動擴展:根據工作負載自動擴展/縮減
- 競價執行個體:對批次作業使用成本最佳化的運算
- 資料分層:自動管理熱/冷儲存
安全性與合規性
- 端到端加密:傳輸中與靜止資料均加密
- 存取控制:細粒度權限和稽核日誌
- HIPAA/SOC2 合規:企業安全標準
- VPC 支援:部署在私有雲端環境中
何時應遷移的檢查清單
✅ 如果您有以下情況,請遷移到 TileDB-Cloud:
- 資料集 > 1000 個樣本
- 需要處理 > 100GB 的 VCF 資料
- 需要分散式運算
- 多個團隊成員需要存取
- 需要企業級安全性/合規性
- 想要成本最佳化的無伺服器運算
- 需要 24/7 生產環境正常運行時間
開始使用 TileDB-Cloud
- 免費開始:TileDB-Cloud 提供免費層供評估
- 遷移支援:TileDB 團隊提供遷移協助
- 教育訓練:可取得基因組學特定教學資源