# KNIME流量控制指南
# 介绍
并非所有工作流都有静态输入,只有一个分支。通常,数据会定期更新,某些设置有时会有所不同。在其他情况下,工作流程可能具有分支和确定要遵循的分支的规则。
在本指南中,介绍了KNIME Analytics Platform中可用于控制所需方向的工具。
本指南特别说明了如何:
- 使用流量变量进行参数设置
- 为不同的输入重复工作流程的一部分
- 定义规则以激活分支
- 如果节点执行失败,则提供一个错误处理分支
KNIME Analytics Platform会自动附带此处提供的节点,不需要安装任何扩展。您可以在“*工作流控制”*类别下的节点存储库中找到这些节点,如图1 (opens new window)所示。
图1.节点存储库中的“工作流控制”节点
# 流量变量
流变量是具有字符串,整数,双精度,数组或路径值的参数。当需要执行具有不同设置的新执行时,可以使用这些参数来避免手动更改工作流节点内的设置。流变量仅可用于工作流中的下游节点。
# 创建流量变量
要创建流变量,您可以进行以下操作:
- 将表行转换为流变量
- 将节点配置导出为流变量
- 使用配置 (opens new window) 和小部件节点 (opens new window)
- 合并或修改现有流量变量
本节介绍前两个选项。“小组件和配置”节点在“组件指南” (opens new window)中有更详细的说明 。但是,在KNIME Hub (opens new window)上提供了一个在创建流变量的上下文中使用这种类型的节点的示例 (opens new window)。最后一个选项的示例是“规则引擎变量”节点,该节点在“ IF和CASE开关”部分中介绍 (opens new window)。
# 将表行转换为流变量
Table Row to Variable节点将数据表第一行的每一列转换为流变量。在图2 (opens new window)的示例(可在KNIME Hub (opens new window)上找到)中 (opens new window),“表行到变量”节点连接到“分组依据”和“排序器”节点,它们分别按国家对原始数据进行分组,并计算数据条目对应于特定条目的次数。国家,然后对数据进行排序,如图3 (opens new window)所示。
图2.将数据表的第一行转换为流变量
图3.数据按国家(地区)分组和排序
表行到变量节点的输出如图4 (opens new window)所示。现在,数据表中的列名称是流变量的名称,而第一行的值是流变量的对应值。
图4.第一行转换为流变量
在视频从数据到变量中, (opens new window)对此进行了详细说明。 | |
---|---|
# 将节点配置导出为流变量
创建新流变量的另一个选项是导出节点配置。在这种情况下,流变量获取与节点配置相同的值。流变量的名称在节点配置对话框中定义。
一些配置选项旁边有一个流变量图标,例如,图5 (opens new window)所示的“行过滤器”节点配置对话框中的字符串模式 。
图5.“行过滤器”节点对话框中的“流程变量”按钮
要导出在其旁边具有流变量图标的节点配置,请打开节点配置对话框,然后执行以下步骤:
在相应字段中定义节点配置值
单击图标,然后在打开的对话框中选择Create Variable,如图6 (opens new window)所示。
在激活的字段中写入流变量名称。
图6.变量设置对话框
如果要导出的设置旁边没有流量变量图标,请按照下列步骤操作:
在相应字段中定义节点配置值
在节点配置对话框中打开“*流变量”*选项卡
在与要导出的节点配置相对应的行的下拉菜单附近的文本字段中输入流变量名称,如图7 (opens new window)所示 。
图7.节点配置对话框中的“流程变量”选项卡
现在,该节点的输出表视图中的Flow Variables选项卡显示了导出的流程变量, 如图8所示 (opens new window)。
图8.节点输出中的“流变量”选项卡
# 使用流量变量
# 流量可变端口
流量变量端口是每个节点上方的红色圆圈。每个节点都有流量可变端口,但是对于大多数节点,默认情况下它们是隐藏的。您可以通过右键单击一个节点并在上下文菜单中选择Show Flow Variable Ports使其可见,如图9 (opens new window)所示。
图9.显示流量变量端口
# 使用流变量覆盖节点配置
在上一节中,我们解释了如何创建流变量。在这里,我们展示了如何使用先前创建的流变量来配置节点。
如果要使用流变量,则需要首先将创建流变量的节点连接到下一个节点。如果尚未通过任何其他端口连接它们,请使用流量变量端口 (opens new window)。您只需创建一次连接,然后传输的流变量就可用于工作流中的所有后续节点。
要使用流变量,请执行以下步骤:
打开要通过flow变量覆盖其设置的节点的配置对话框。流变量图标并不总是出现在节点配置对话框中,但是您可以在经常被流变量覆盖的节点配置旁边找到它。
如果所选配置设置旁边有流量变量图标,请单击它,然后在打开的“*变量设置”*对话框中选择“使用变量”。然后从下拉菜单中选择流变量,如图10 (opens new window)所示。
图10.通过流变量定义特定的节点配置
如果不存在流程变量图标,请转到“*流程变量”*选项卡,导航到所选的节点配置,然后从下拉菜单中选择流程变量,如图11 (opens new window)所示。
图11.流变量选项卡中的覆盖节点配置
当使用流变量覆盖节点配置时,在节点配置对话框的下部会显示一条警告消息,指出要覆盖哪个节点配置,如图12 (opens new window)所示。
图12.配置对话框下部的警告消息
# 循环
循环迭代工作流的特定部分。每次迭代(一个重复的过程)都有不同的输入。每次迭代的更改可以是参数值,数据集,同一数据集的子组,单列或单行作为流变量。
在视频中,什么是循环? (opens new window)和 计数循环, (opens new window)我们解释了循环的概念,并构建了一个简单的示例循环。 | |
---|---|
KNIME中的循环以“循环开始”节点开始,并以“循环结束”节点结束。在循环主体中执行针对每次迭代执行的操作。通常,“循环开始”节点负责增加迭代计数器,并将数据发送到循环主体,然后循环主体负责执行子工作流程步骤。执行完这些操作后,“循环结束”节点将检查是否满足结束条件,如果不是,则“循环开始”节点将增加计数器并再次执行循环主体操作。当满足结束条件时,“循环结束”节点将收集来自不同迭代的数据,然后执行工作流程中的下一步。
KNIME Hub (opens new window)上提供的图13中 (opens new window)的循环是一个示例,其中“块循环开始”节点用于遍历一个表,该表包含十个用Table Creator节点创建的用字母填充的行。A
图13.具有Chunk Loop Start节点的循环示例
“块循环开始”节点占用输入表的三行,并将数据块发送到由“值计数器”节点组成的循环主体。最后,一个“循环结束”节点收集每个循环迭代的结果,并在满足到达输入数据最后一行的条件时结束循环。
KNIME Analytics Platform为不同类型的循环提供了不同的循环起点和终点。循环开始和循环结束节点收集在 表1 (opens new window)和表2中 (opens new window)。通过导航到“工作流控制” →“循环支持”,可以在节点存储库中找到这些节点。
节点图标 | 循环开始节点 | 说明 |
---|---|---|
计数循环开始 | 触发器循环进行预定义的迭代次数 | |
块循环启动 | 每次迭代将数据拆分为连续的块。定义块数或每个块的行数。 | |
列列表循环开始 | 遍历列列表 | |
通用循环启动 | 它与“可变条件循环结束”节点一起迭代,直到满足特定条件为止 | |
表行到可变循环开始 | 将表中的每一行转换为行变量并对其进行迭代 | |
组循环开始 | 遍历根据条件定义的数据组 | |
间隔循环启动 | 在给定间隔内为每次迭代增加一个变量值 | |
递归循环启动 | 迭代“递归循环结束”节点的输出数据表 | |
递归循环启动(2个端口) | 从“递归循环结束(2个端口)”节点遍历两个输出数据表 |
节点图标 | 循环结束节点 | 说明 |
---|---|---|
循环结束 | 连接来自不同迭代的输出表 | |
可变条件循环结束 | 它与“通用循环启动”节点一起执行循环,直到满足特定条件为止 | |
回路端(2个端口) | 当每次迭代产生两个输出表时,将每个迭代的输出表连接成两个单独的表 | |
循环结束(列追加) | 每次迭代后,输出表将与先前迭代中的输出表合并 | |
递归循环结束 | 将输出表从迭代传递到递归循环启动节点,直到满足最大迭代次数,最小行数或特定条件为止 | |
递归循环端(2个端口) | 将输出表从迭代传递到递归循环开始(2个端口)节点,直到满足最大迭代次数,最小行数或特定条件为止 | |
可变回路端 | 从每次迭代收集流变量。在循环内完成计算且不需要输出时可以使用。 |
# 循环命令
在执行循环时,您可以在执行之后使用node monitor监视 (opens new window)选定的节点输出。
您有两种执行循环的方法。
- 完成执行:右键单击Loop End节点,然后从上下文菜单中选择 Execute。现在,在执行循环步骤时,“循环结束”节点处会显示一个黄色的循环符号。一旦变成绿色,循环就完全成功地执行了。要重置循环,可以右键单击节点并从上下文菜单中选择“重置”,以重置属于该循环子工作流的任何节点 。
- 分步执行:右键单击Loop End节点,然后 从上下文菜单中选择Step Loop Execution,以执行循环的一次迭代。您随时可以通过从Loop End节点的上下文菜单中选择Resume Loop Execution来执行其余步骤。您也可以暂停或逐步执行,从Loop End节点的上下文菜单中选择“*暂停执行”*或“取消”。在这两种情况下,这仅影响“循环结束”节点,而先前的节点仍将处于执行状态。
视频“循环结束节点” (opens new window)和“ 循环命令” (opens new window)更详细地说明了循环结束节点,并显示了指导的循环执行选项。 | |
---|---|
# 在循环中使用流变量
在“流量变量”部分中, (opens new window)我们介绍了流量变量及其功能。它们通常用于循环中,并且“表行到变量循环开始”和“变量循环结束”节点是两个特定的循环节点,具有输入和输出流可变类型端口。
表行到变量循环开始的示例如图14 (opens new window)所示,并且在KNIME Hub (opens new window)上也可用。
图14.从表行到可变循环起始节点的循环示例
与“从表行到变量”节点 (opens new window)相似,“从表行到变量循环开始”节点将表的行转换为一组变量,这些变量的名称为列名,其值作为当前行中的对应值。它遍历输入表的每一行,并将获得的流变量公开给循环主体。在图14 (opens new window)的示例中,获得的流变量之一用于覆盖“恒定值列”节点的列值参数设置,该设置将包含当前值的单元格附加到当前表中。
# 断点节点
在节点存储库中,在“工作流控制” →“循环支持”下,“断点”节点也可用。当满足某些条件时,可以使用它来暂停执行。图15 (opens new window)和图16 (opens new window)显示了当与客户群的值相对应的输入流变量等于3时,使用此节点来削弱循环的执行。您还可以将Breakpoint节点配置为在接收到一个空表以及活动或非活动分支作为输入时停止执行。如果满足“断点”节点条件,还可以设置要显示的“自定义”消息。该工作流程也可在KNIME Hub上使用 (opens new window)。
图15.带有断点节点的工作流
图16. Breakpoint节点配置对话框
# IF和CASE开关
如果您需要对不同的数据组执行不同的操作,则可以使用能够将工作流程分为多个分支的逻辑。KNIME Analytics Platform中可用的IF和CASE节点具有此功能。IF和CASE开关的节点位于“工作流控制” →“*开关”*下的节点存储库中。
图17.开关类型节点
# 中频交换节点
IF Switch节点在工作流中创建两个分支,可以分别激活或禁用它们。这意味着将执行一个或多个活动分支中的节点,而不执行非活动分支中的节点。在节点配置对话框中,您可以手动定义活动分支,也可以通过流变量通过条件动态控制它。
图18中 (opens new window)的示例工作流程(也可在KNIME Hub (opens new window)上找到)遍历 (opens new window)IF交换机,逐行读取数据,以根据客户的呼叫活动对其进行分类。循环完成后,这些行将串联回到同一张表中。
图18.使用IF Switch节点的示例
在图18 (opens new window)的工作流程中,IF Switch节点同时具有数据和流变量输入。使用“字符串输入”节点创建的流变量定义了活动分支。然后在活动分支中处理数据。
# 通过流量变量定义活动端口
如图19 (opens new window)所示,“*选择活动端口”*选项位于IF交换机节点配置对话框的“选项”选项卡中。在这里,你可以手动选择both
,bottom
或者top
,定义活跃的分支。但是,与使用流量变量覆盖设置部分 (opens new window)中的方法相同 ,您还可以使用流量变量来覆盖活动端口选项。
图19.通过流变量定义活动分支
首先,您需要创建一个合适的流量变量。既然你需要用它来覆盖选择活动端口的IF开关节点的选择,你必须给它分配一个字符串值等于或者both
,bottom
或top
。
在图18 (opens new window)所示的示例中,使用“字符串输入”节点创建此流量变量,该节点允许将输出流量变量手动设置为合适的字符串值之一。
另一种可能性是在循环中根据某些设置条件自动激活分支。在图20 (opens new window)所示的示例(可在KNIME Hub上使用)中 (opens new window),对某些数据逐行执行循环。然后,将每一行转换为流量变量,并根据特定列的值激活IF交换机端口。
图20. IF开关与环路组合
“规则引擎变量”节点配置对话框如图21 (opens new window)所示。在此,先决条件是使用可用的流量变量和功能定义的,同时为真实条件分配了=>
符号。使用语法定义默认结果,即分配给所有规则都不为真的所有情况的值TRUE => "default outcome"
。
图21.按条件定义流量变量值
# CASE开关数据(开始)节点
使用“ CASE切换数据(开始)”节点,可以激活工作流程中的三个分支之一。与IF Switch节点类似,这可以手动完成,也可以使用条件完成。
执行完成后,可以使用End IF节点或CASE Switch Data(End)节点将分支产生的表连接起来。
一个示例类似于IF Switch Data节点,如图22 (opens new window)所示, 并且可以在KNIME Hub (opens new window)上找到 (opens new window)。
图22.使用案例切换节点的示例
请注意,在使用CASE交换机时,活动输出端口的可能值是0 顶部,1 中间和2 底部输出端口。也就是说,功能相似,但是流量变量值不同。 | |
---|---|
# 错误处理
执行工作流时,可能会发生不同类型的错误,例如与远程服务的连接失败,无法访问的数据库的调用等。要处理它们,您可以使用Try-Catch机箱。Try部分执行一些节点。如果执行失败,则会激活带有错误处理的Catch分支。否则,将执行默认分支。在Try-Catch机箱的末尾,将收集成功或失败执行的结果。图23 (opens new window)显示了Try-Catch机柜的示例,该示例可在KNIME Hub (opens new window)上 找到 (opens new window)。
图23.使用Try-Catch机箱进行错误处理
在图23 (opens new window)的工作流程中,“尝试(数据端口)”节点开始机箱,然后是“断点”节点。断点节点设置为在第十五次迭代时失败。在此,如果Try部件的执行失败,则执行Catch分支。
Active Branch Converter节点开始Catch分支以进行错误处理。该节点使非活动分支处于活动状态,而活动分支处于非活动状态:
- 如果执行失败,它将激活分支
- 如果执行成功,它将停用分支
“捕获错误(数据端口)”节点关闭“尝试捕获”机柜:
- 如果执行成功,则节点的输出就是Default分支的输出。因此,默认分支必须连接到“捕获错误(数据端口)”节点的顶部输入端口。
- 如果执行失败,则机柜的输出来自“捕获”分支,该分支必须连接到“捕获错误(数据端口)”节点的底部输入端口。然后,在“捕获错误(数据端口)”节点的流变量输出中报告失败的原因。
除数据表外,Try部分还可以使用流变量(使用Try(可变端口)节点)启动。
以下四种选择之一可用于结束Try-Catch循环:
- 捕获错误(数据端口)如图23 (opens new window)所示
- 如果“捕获”和“默认”分支的输出是流变量,则捕获错误(Var端口)
- 模型的捕获错误(通用端口)
- 数据库查询的捕获错误(数据库端口)。
通过导航至工作流程控制→错误处理,可以在节点存储库中找到Try-Catch机柜的节点 。