WDL - 基础结构(入门)

工作流描述语言(WDL)是指定数据处理与人类可读且可写的工作流的语法的方式。WDL使定义复杂的分析任务,在工作流中将它们链接在一起并使其执行并行化变得很简单。该语言使常见的模式易于表达,同时也允许不常见或复杂的行为。并努力实现不仅在执行平台之间,而且在不同类型的用户之间的可移植性。无论是分析师,程序员,生产系统的操作员还是任何其他类型的用户,WDL都应易于访问和理解。

让我们看看核心组件是如何在一个最小的WDL脚本中构造的,该脚本描述了workflowmyWorkflowName和两个taskstask_Atask_B(名称可以是您想要的任何内容,而不必包括“任务”或“工作流”)。


基础结构

构成WDL脚本核心结构的5个基本组件:workflow, task, call, command, 和output

1 顶层组件:workflow, task和call

在顶层,我们定义了一个“工作流”(workflow),在这个工作流中我们对一组“任务”(task)进行“调用”(call)。请注意,“任务”是在“工作流”块外部定义的,而“调用”语句是在“工作流”块内部定义的。

“工作流”块和“任务”定义在脚本中的排列顺序并不重要。调用语句的顺序也不重要,我们将在后面看到。

1.1 call

call组件在工作流主体中用于指定应执行特定任务。以最简单的形式,调用只需要一个任务名。

或者,我们可以添加一个代码块来指定任务的输入变量。我们还可以修改Call语句以调用别名下的任务,这允许相同的task在同一个工作流中使用不同的参数多次运行。这使得重用代码变得非常容易;在快速启动指南的管道选项部分详细说明了这一工作原理。

请注意,调用语句的执行顺序并不取决于脚本的出现顺序;相反,它是根据任务调用之间的依赖关系图确定的。这意味着程序通过评估它们的哪些输入是其他任务调用的输出来推断应该运行什么顺序任务调用。“管道选项”部分也对此进行了详细说明。

例子:

# 调用task 
call my_task

# 调用task,使用变量
call my_task{
    input: task_var1= workflow_var1, task_var2= workflow_var2, ...
}

# 调用task,使用别名、变量
call my_task as task_alias {
    input: task_var1= workflow_var1, task_var2= workflow_var2, ...
}

1.2 task

task 组件是WDL脚本的顶级组件。它包含“做某事”所需的所有信息,这些信息以 command 输入文件和参数的定义为伴,并在output 组件中明确标识其输出 。它也可以给出使用所述附加的(可选的)属性 runtimemeta 以及 parameter_meta 组件。

workflow 命令内部“调用”任务 ,这是导致它们在运行脚本时被执行的原因。同样 task 可以在同一个工作流中使用不同的参数多次运行,这使得重用代码变得非常容易。在“管道选项”部分中详细说明了它的实际工作方式。

例如:

task my_task {
    [ input definitions ]
    command { ... }
    output { ... }
}

1.3 workflow

workflow 组件是WDL脚本的必需顶级组件。它包含调用“任务”(task)组件的“调用”(call)语句,以及工作流级别的输入定义。

通过call 和其他语句将任务链接在一起有多种选择 。这些在“管道选项”文档中都有详细说明。

workflow myWorkflowName {
    call my_task
}

2 核心任务级组件: command 和 output

如果我们看看里面task定义,我们找到它的核心组件:command将被运行,这可以是在终端shell中运行的任何命令行,以及output明确标识命令的哪一部分构成其输出的定义。

2.1 command

“command ”组件是“task”的必需属性。command块指定要使用占位符运行的文字命令行(基本上,可以在终端shell中运行的任何命令)。${input_file})用于需要填充的命令行中的可变部分。注意,所有变量占位符都必须在task输入定义。

例如:

command {
    java -jar myExecutable.jar \
        INPUT=${input_file} \
        OUTPUT=${output_basename}.txt
}

2.2 output

output 组件是“task”的必需属性。command用于流量控制。这里确定的输出将用于构建工作流图,因此必须包括所有用作工作流中其他任务的输入的输出。

  • 从技术上讲, output 对于那些不会产生在其他任何地方使用的输出的任务,则不需要,例如在规范的“ Hello World”示例中。但这是非常罕见的,因为在大多数情况下,当您编写的工作流实际上会执行有用的操作时,每个任务命令都会产生某种输出。因为否则,您为什么要运行它?

WDL接受的所有类型的变量都可以包含在此处。输出定义必须包括一个显式的类型声明。

例:

output {
    File out = "${output_basename}.txt"
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值