name: dnanexus-integration description: “DNAnexus云基因组学平台。构建应用/小应用,管理数据(上传/下载),dxpy Python SDK,运行工作流,FASTQ/BAM/VCF,用于基因组学管道开发和执行。”
DNAnexus 集成
概述
DNAnexus 是一个用于生物医学数据分析和基因组学的云平台。构建和部署应用/小应用,管理数据对象,运行工作流,并使用 dxpy Python SDK 进行基因组学管道开发和执行。
何时使用此技能
此技能应在以下情况下使用:
- 创建、构建或修改 DNAnexus 应用/小应用
- 上传、下载、搜索或组织文件和记录
- 运行分析、监控作业、创建工作流
- 使用 dxpy 编写脚本与平台交互
- 设置 dxapp.json、管理依赖、使用 Docker
- 处理 FASTQ、BAM、VCF 或其他生物信息学文件
- 管理项目、权限或平台资源
核心能力
该技能分为五个主要领域,每个都有详细的参考文档:
1. 应用开发
目的:创建在 DNAnexus 平台上运行的可执行程序(应用/小应用)。
关键操作:
- 使用
dx-app-wizard生成应用骨架 - 使用正确的入口点编写 Python 或 Bash 应用
- 处理输入/输出数据对象
- 使用
dx build或dx build --app部署 - 在平台上测试应用
常见用例:
- 生物信息学管道(对齐、变异调用)
- 数据处理工作流
- 质量控制和过滤
- 格式转换工具
参考:参见 references/app-development.md 获取:
- 完整应用结构和模式
- Python 入口点装饰器
- 使用 dxpy 处理输入/输出
- 开发最佳实践
- 常见问题和解决方案
2. 数据操作
目的:管理平台上的文件、记录和其他数据对象。
关键操作:
- 使用
dxpy.upload_local_file()和dxpy.download_dxfile()上传/下载文件 - 创建和管理带元数据的记录
- 按名称、属性或类型搜索数据对象
- 在项目之间克隆数据
- 管理项目文件夹和权限
常见用例:
- 上传测序数据(FASTQ 文件)
- 组织分析结果
- 搜索特定样本或实验
- 在项目之间备份数据
- 管理参考基因组和注释
参考:参见 references/data-operations.md 获取:
- 完整文件和记录操作
- 数据对象生命周期(打开/关闭状态)
- 搜索和发现模式
- 项目管理
- 批量操作
3. 作业执行
目的:运行分析、监控执行并编排工作流。
关键操作:
- 使用
applet.run()或app.run()启动作业 - 监控作业状态和日志
- 创建用于并行处理的子作业
- 构建和运行多步骤工作流
- 使用输出引用链式作业
常见用例:
- 在测序数据上运行基因组学分析
- 并行处理多个样本
- 多步骤分析管道
- 监控长时间运行的计算
- 调试失败的作业
参考:参见 references/job-execution.md 获取:
- 完整作业生命周期和状态
- 工作流创建和编排
- 并行执行模式
- 作业监控和调试
- 资源管理
4. Python SDK (dxpy)
目的:通过 Python 以编程方式访问 DNAnexus 平台。
关键操作:
- 使用数据对象处理器(DXFile、DXRecord、DXApplet 等)
- 使用常见任务的高级函数
- 进行高级操作的直接 API 调用
- 创建对象之间的链接和引用
- 搜索和发现平台资源
常见用例:
- 数据管理的自动化脚本
- 自定义分析管道
- 批量处理工作流
- 与外部工具集成
- 数据迁移和组织
参考:参见 references/python-sdk.md 获取:
- 完整 dxpy 类参考
- 高级实用函数
- API 方法文档
- 错误处理模式
- 常见代码模式
5. 配置和依赖
目的:配置应用元数据和管理依赖。
关键操作:
- 编写包含输入、输出和运行规范的 dxapp.json
- 安装系统包(execDepends)
- 捆绑自定义工具和资源
- 使用共享依赖的资产
- 集成 Docker 容器
- 配置实例类型和超时
常见用例:
- 定义应用输入/输出规范
- 安装生物信息学工具(samtools、bwa 等)
- 管理 Python 包依赖
- 使用 Docker 镜像处理复杂环境
- 选择计算资源
参考:参见 references/configuration.md 获取:
- 完整 dxapp.json 规范
- 依赖管理策略
- Docker 集成模式
- 区域和资源配置
- 示例配置
快速开始示例
上传和分析数据
import dxpy
# 上传输入文件
input_file = dxpy.upload_local_file("sample.fastq", project="project-xxxx")
# 运行分析
job = dxpy.DXApplet("applet-xxxx").run({
"reads": dxpy.dxlink(input_file.get_id())
})
# 等待完成
job.wait_on_done()
# 下载结果
output_id = job.describe()["output"]["aligned_reads"]["$dnanexus_link"]
dxpy.download_dxfile(output_id, "aligned.bam")
搜索和下载文件
import dxpy
# 查找特定实验的 BAM 文件
files = dxpy.find_data_objects(
classname="file",
name="*.bam",
properties={"experiment": "exp001"},
project="project-xxxx"
)
# 下载每个文件
for file_result in files:
file_obj = dxpy.DXFile(file_result["id"])
filename = file_obj.describe()["name"]
dxpy.download_dxfile(file_result["id"], filename)
创建简单应用
# src/my-app.py
import dxpy
import subprocess
@dxpy.entry_point('main')
def main(input_file, quality_threshold=30):
# 下载输入
dxpy.download_dxfile(input_file["$dnanexus_link"], "input.fastq")
# 处理
subprocess.check_call([
"quality_filter",
"--input", "input.fastq",
"--output", "filtered.fastq",
"--threshold", str(quality_threshold)
])
# 上传输出
output_file = dxpy.upload_local_file("filtered.fastq")
return {
"filtered_reads": dxpy.dxlink(output_file)
}
dxpy.run()
工作流决策树
当使用 DNAnexus 时,遵循此决策树:
-
需要创建新的可执行程序吗?
- 是 → 使用 应用开发 (references/app-development.md)
- 否 → 继续到步骤 2
-
需要管理文件或数据吗?
- 是 → 使用 数据操作 (references/data-operations.md)
- 否 → 继续到步骤 3
-
需要运行分析或工作流吗?
- 是 → 使用 作业执行 (references/job-execution.md)
- 否 → 继续到步骤 4
-
编写 Python 脚本进行自动化吗?
- 是 → 使用 Python SDK (references/python-sdk.md)
- 否 → 继续到步骤 5
-
配置应用设置或依赖吗?
- 是 → 使用 配置 (references/configuration.md)
通常你需要多个能力一起使用(例如,应用开发 + 配置,或数据操作 + 作业执行)。
安装和认证
安装 dxpy
pip install dxpy
登录 DNAnexus
dx login
这将认证你的会话并设置对项目和数据的访问。
验证安装
dx --version
dx whoami
常见模式
模式 1:批量处理
使用相同的分析处理多个文件:
# 查找所有 FASTQ 文件
files = dxpy.find_data_objects(
classname="file",
name="*.fastq",
project="project-xxxx"
)
# 启动并行作业
jobs = []
for file_result in files:
job = dxpy.DXApplet("applet-xxxx").run({
"input": dxpy.dxlink(file_result["id"])
})
jobs.append(job)
# 等待所有完成
for job in jobs:
job.wait_on_done()
模式 2:多步骤管道
将多个分析链式连接:
# 步骤 1:质量控制
qc_job = qc_applet.run({"reads": input_file})
# 步骤 2:对齐(使用 QC 输出)
align_job = align_applet.run({
"reads": qc_job.get_output_ref("filtered_reads")
})
# 步骤 3:变异调用(使用对齐输出)
variant_job = variant_applet.run({
"bam": align_job.get_output_ref("aligned_bam")
})
模式 3:数据组织
系统性地组织分析结果:
# 创建有组织的文件夹结构
dxpy.api.project_new_folder(
"project-xxxx",
{"folder": "/experiments/exp001/results", "parents": True}
)
# 上传带元数据
result_file = dxpy.upload_local_file(
"results.txt",
project="project-xxxx",
folder="/experiments/exp001/results",
properties={
"experiment": "exp001",
"sample": "sample1",
"analysis_date": "2025-10-20"
},
tags=["validated", "published"]
)
最佳实践
- 错误处理:始终在 try-except 块中包装 API 调用
- 资源管理:为工作负载选择适当的实例类型
- 数据组织:使用一致的文件夹结构和元数据
- 成本优化:归档旧数据,使用适当的存储类
- 文档:在 dxapp.json 中包含清晰的描述
- 测试:在生产使用前用各种输入类型测试应用
- 版本控制:对应用使用语义版本控制
- 安全:切勿在源代码中硬编码凭据
- 日志记录:为调试包含信息丰富的日志消息
- 清理:移除临时文件和失败的作业
资源
此技能包括详细的参考文档:
references/
- app-development.md - 构建和部署应用/小应用的完整指南
- data-operations.md - 文件管理、记录、搜索和项目操作
- job-execution.md - 运行作业、工作流、监控和并行处理
- python-sdk.md - 包含所有类和函数的全面 dxpy 库参考
- configuration.md - dxapp.json 规范和依赖管理
当需要特定操作的详细信息或处理复杂任务时,加载这些参考。
获取帮助
- 官方文档:https://documentation.dnanexus.com/
- API 参考:http://autodoc.dnanexus.com/
- GitHub 仓库:https://github.com/dnanexus/dx-toolkit
- 支持:support@dnanexus.com