控制容器工具
单个工具示例
控制容器有一个单个工具示例。转至 示例工作流 以了解如何在 Alteryx Designer 中访问此示例和其他更多示例。
![Image of a sample use case of the Control Container tool.](../../../image/uuid-02d2a6e9-f859-2a95-e783-756f7a77a327.png)
使用控制容器来管理工具在工作流中运行的顺序,并确保按照正确顺序执行流程中的步骤。借助控制容器,您可以将正在运行的工具的相关信息用作日志记录信息或用作工作流中的数据。这样您可以根据该执行信息来构建更加动态和复杂的流程。
此外,借助控制容器,您可以根据工作流中的数据(无论是来自其他控制容器还是来自工作流中的其他工具)有条件地执行某些逻辑块。您无需通过绕行、链式应用程序和 Runner 等工具来构建复杂的条件编排。
仅限 AMP
控制容器工具仅与 Alteryx 多线程处理 (AMP) 兼容。如果您尝试在禁用 AMP 的工作流中运行该工具,该工具会显示错误。
工具组件
控制容器有 2 个锚点:可选的控制输入和日志记录输出。
![Image that shows an empty Control Container tool with its anchors.](../../../image/uuid-4a3b8eeb-639e-b818-91e9-aca55f2f9f16.png)
控制输入(可选)
控制容器具有可选的输入锚点。使用此输入激活容器。
![Image that shows a Control Container with its anchors.](../../../image/uuid-f1b40eff-4248-4493-3c53-f233c7189ecf.png)
如果控制输入没有连接,容器将被视为已激活。在这种情况下,控制容器就像一个工具容器,不同之处在于它从其日志记录输出锚点输出有关在其中完成的操作的消息。
如果控制输入有连接,则当连接关闭但存在至少 1 条输入记录时,容器将被激活*。数据流的元数据和具体内容并不重要。唯一重要的是至少存在 1 条记录。
注意
*虽然激活控制容器需要 1 条记录,但在 所有 记录都通过控制输入锚点之前,容器不会执行其中的工具。因此,如果您将 1000 条记录传递到您的控制容器中,则该容器在收到所有 1000 条记录之前不会执行其中的工具。
日志记录输出
日志记录输出仅为容器(包括容器内的其他容器)中的工具生成所有面向用户的日志消息。您可以将此消息数据用作 Designer 中的任何其他数据流。例如,您可以将此日志信息写入文件或进行解析以执行后续的逻辑。
![Image that shows a Control Container tool with a Browse tool connected to its output Logging anchor.](../../../image/uuid-c2c275af-4c0d-a8a9-25a9-b3a2483681ac.png)
控制容器在激活时会记录一条信息消息:“控制容器已激活。”
然后,该容器在处理所有包含的工具时会记录另一条信息消息:“控制容器已完成。”
然后,容器会关闭其日志记录输出锚点。请注意,容器可能会在其中的所有工具执行完毕之前发送消息。如需了解详情,请参阅关于执行顺序的重要注意事项部分。
这意味着所有从容器中流出的数据流都已经被关闭,如果容器被激活,您一定会从每个日志记录输出中获得2条消息。如果容器被禁用,它会关闭其日志记录输出而不发送任何消息。
![This image shows an example of a Control Container's log messages in the Results window.](../../../image/uuid-a9502bec-af0c-8511-8db7-ce8f90971b06.png)
控制容器的工作原理?
请务必注意,控制容器的行为与 工具容器 非常不同。它根据布尔值 (true/false) 场景来确定是否有数据流连接到可选的控制输入锚点,以及如果有传入数据流,该数据流是否包含任何记录。
如果 没有 传入数据流,控制容器就像一个工具容器,不同之处在于它从其日志记录输出锚点输出有关在其中执行的操作的消息。这些消息的表现方式与您通常在 Designer 结果窗口 中看到的消息相同。
如果 有 传入数据流连接到控制输入锚点,控制容器则将评估是否要在容器中运行工具。评估基于输入连接关闭时是否收到至少 1 条记录。
如果接收到 1 条记录,则在连接关闭后( 所有 记录通过输入后),容器将激活。
如果控制输入没有收到记录,容器只会通过输出推送缓存的元数据。它不传递消息,也不在其中运行工具。
已禁用的控制容器与非活跃控制容器
请务必注意已禁用的控制容器和已启用(但非活跃)的控制容器之间的不同行为。
如果 禁用 控制容器,Designer 将忽略容器(以及其中的所有工具),也不会报告容器或其中任何工具的配置错误。
如果控制容器是启用状态,直到运行工作流后,取决于容器的输入锚点是否接到记录,Designer 才知道是否要激活控制容器。
运行工作流时,Designer 需要运行所有工作流预验证检查。如果未正确配置包含的工具,无论该容器最终是否因其输入锚接收记录而激活,此预验证检查都会在控制容器内生成错误。要避免这种情况,请确保正确配置控制容器中的所有工具,即使不会将该容器作为工作流的一部分激活。
关于执行顺序的重要注意事项
在某些情况下,控制容器内的工具可以在容器内的所有工具执行完毕之前(即在容器通过其日志记录输出锚点发送数据之前)将数据发送到容器外。当容器内的工具直接连接到外部工具时,就会发生这种情况。
要了解为什么会发生这种情况,了解 AMP 如何处理数据 是很重要的。AMP 在工具之间以记录数据包的形式发送数据,以最大限度地减少工具之间的同步工作并确保更好的性能。如果通过工具的记录很多,数据包就会填满,必须向下游发送。
执行顺序概览
如前所述,控制容器在通过其控制输入锚点接收所有记录之前,不会执行其中的工具。如果输入锚点通过多个数据包接收到大量记录,容器会在其输入端将其保留,直到接收到所有数据包。一旦收到所有数据包,容器就会激活。
一旦容器激活,就会执行其中的工具。如果在此过程中容器将数据传递到其边界之外,则该数据 可能 会在其中的所有工具执行完毕之前离开容器。这取决于 AMP 引擎如何对记录数据包进行组合和排序。
容器的日志记录输出锚点会在容器激活后立即开始收集在其中执行的工具的消息。它会连续收集消息,直到…
一个记录数据包变得足够大,从而开始向下游发送,此时下一个数据包会开始收集消息。
容器会执行其中的所有工具,并在结束时显示“控制容器已完成”消息。
关于确保执行顺序的建议
考虑到上述情况,如果执行顺序对您的工作流至关重要,您应该使用更多的控制容器来确保跨容器边界的记录正确排序。
请记住,当您将一个控制容器的输出锚点连接到另一个控制容器的输入锚点时,第二个容器必须通过其控制输入锚点接收所有记录,然后才能激活和执行其中的任何工具。
用一个简化的示例来说明,如果您需要绝对确定一个流程不会在另一个流程完成之前启动,您应该始终使用多个控制容器,如下面的示例 2 所示。
示例 1
此配置 不 保证消息工具会等到所有记录通过筛选工具后才启动,也不保证所有工具都已在控制容器中执行完毕(如果包括其他工具)。
![Image showing a Control Container tool with a Filter tool inside. The Filter tool's output connects to the input of a Message tool outside of the container.](../../../image/uuid-84d87fa1-10f5-2e44-c2dc-5b8317b1c0be.png)
示例 2
此配置可确保消息工具等到控制容器 2 通过其控制输入锚点接收到所有记录后才启动。消息工具只有在第一个容器中的所有工具都执行完毕并且容器记录“控制容器已完成”消息时,才会启动。
![Image showing a Control Container tool with a Filter tool inside. The container's output is connected to another Control Container's input.](../../../image/uuid-a16084c9-a3fb-823b-eab7-257c3f34dad5.png)
在容器中将工具分组
有多种方法可以在容器中将工具分组:
选择画布上的一个或多个工具并右键单击,然后选择 添加至新控制容器 。
将控制容器工具拖动到画布上,将其放置在要分组的工具的附近。按住 Ctrl 键盘键并选择工具,然后将它们拖放到容器中。
要展开或折叠容器,请点击容器右上角的展开/折叠图标。
修改容器内容
要删除容器但不删除其中的工具,请右键单击展开的容器,然后单击 仅删除容器 。
要移除一个容器中的工具,请选择该工具并将其拖出容器之外。
禁用容器
如果您不想运行工作流中的某个环节或流程,请禁用容器。禁用的容器将在画布上保持展开状态,并且会显示为灰色,以表明其处于禁用状态。容器中的工具在您重新启用容器之前不会处理数据。如果容器被禁用,它会关闭其日志记录输出锚点,而不发送任何消息。
要禁用容器,您有两种选择:
在容器的 配置 窗口中,选中 禁用 复选框。
在画布上,点击容器左上角的切换滑块,使滑块位于左侧。
您可以折叠已禁用的容器,以隐藏其内容。在容器中选择“展开/折叠”图标可执行此操作。
启用容器
要启用容器,您有两种选择:
在容器的 配置 窗口中,取消选中 禁用 复选框。
选择容器左上角的切换滑块,使滑块位于右侧。
配置工具
一旦您的控制容器工具出现在工作流画布上,您就可以使用控制容器的工具配置窗口为容器提供标签、修改容器外观并在需要时禁用容器。
在 配置 窗口中,在 描述 字段中输入容器的名称,或双击画布上的容器框,然后在其中直接输入文本。默认文本为“控制容器”,以及显示在 ID 字段中的工具 ID。
设置容器的颜色主题。
选择 文本颜色 、 填充颜色 和 边框颜色 旁的“...”,然后从调色板中选择颜色或输入 RGB 值。
在 透明度 中,输入一个值或使用向上和向下指示图标设置颜色透明度。
在 外边距 中选择一个宽度,以更改容器边框与所含工具之间的距离。
设置默认的容器填充颜色...
转至 选项 用户设置 编辑用户设置,然后选择画布。
在 默认画布设置 容器 下设置所需的 RGB 值,或使用“...”按钮来选择一种颜色。
保存 设置。
兼容性说明和限制
数据库内工具
数据库内工具可在控制容器内工作。但是,数据库内连接不能跨越控制容器边界。换句话说,您不能在控制容器外部放置库内连接工具,然后将其连接到容器内的库内筛选工具。
界面工具
控制容器内部不支持界面工具。界面工具和控制容器可以在同一个工作流中 - 只是界面工具不能位于控制容器内。
阻止直到完成工具
如果工作流中还包含控制容器,则阻止直到完成工具无效。如果您的工作流同时包含阻止直到完成工具和控制容器,您将收到一条错误消息,并且阻止直到完成工具将被视为借道而过的工具(没有排序行为)。
绕行工具
绕行工具可在控制容器内工作。您必须遵循绕行开始和绕行结束的常规规则,但请注意,如果绕行结束工具位于从未激活的控制容器中,则会丢弃其数据流。
嵌套控制容器
控制容器嵌套在其他控件容器中时也可以工作。但是,循环连接会生成错误。例如,您不能将一个控制容器中的日志记录输出连接到同一容器内的某个工具。
控制容器和宏指令
控制容器可在宏指令内部工作。宏指令和应用程序操作在 XML 转换之前应用。宏指令也可以在控制容器内部工作。
调试工作流
控制容器当前与可通过宏指令和分析应用程序界面设计器窗口访问的调试工作流功能不兼容。包含控制容器的调试工作流将发生错误。