span8
span4
此示例旨在说明基于组的(阻塞/特性保持)转换器如何导致工作空间中的数据流中断。
这是一个简单的工作空间,读取一个数据集的人(形状格式),测量他们的身高,并写回另一个数据集(同样是形状格式):
注:连接变压器的存在只是为了帮助演示转换中的相关事件
重要的部分是Sorter中断了工作区的特性流,这可以用来演示关于这个概念的一些关键点。为此,请执行以下操作。
1)打开工作空间(或模板)。右击阅读器功能类型人员和连接变压器之间的连接。选择添加断点的选项。
2)从菜单栏中选择Run > Run with breakpoints:
确保关闭了功能缓存(全面检查)!断点和特性缓存彼此不兼容。
现在运行工作区。注意,从源数据读取一个特性,并在断点处暂停转换。打开一个对话框检查功能:
3)点击Feature Inspector窗口中的“Step to next connection”按钮。这将功能移动到下一个连接(连接->长度计算器)。红线表示这个。再次点击“下一步连接”按钮,功能将出现在LengthCalculator:Output端口。注意,它现在有一个高度属性:
4)再次点击“下一步连接”按钮。在排序器转换器和第二个输入工作区之前,原始特性已经停止。
教训:分类器转换器是一个基于组的转换器。它需要在处理任何数据之前提供所有的源特性(它自己不能对单个特性排序!),因此在等待其他特性赶上它之前,它将这些特性保存在内存中。
5)现在开始点击“继续到下一个断点”按钮在功能检查器对话框。后续的特性将被处理,直到排序器转换器。
教训:因为Sorter转换器存储的特性保存在内存中,所以每次新特性到来时,系统资源使用量都会增加。如果功能足够大(我们的功能非常小),您甚至可能会看到系统任务管理器的内存使用量增加。
6)继续点击Feature Inspector对话框中的“Continue to next breakpoint”按钮,直到LengthCalculator:Output和Sorter之间的Feature count为107或108:
如果您不希望多次单击next按钮,请单击红方按钮以停止转换。右键单击画布上的断点并选择Edit breakpoint。在编辑对话框的底部,将Stop选项从Always更改为hit count = 108。现在重新运行翻译,它将停止在功能108而不是第一个功能。
教训:这也表明,读入FME的特性与它们在源数据集中的顺序相同。特征的顺序不会改变,除非受到转换器的强迫——就像排序器将要做的那样。
7)记录日志窗口到达的行数。
现在点击“下一步连接”按钮三次,以推进下一个功能通过排序器。保持单击,一次单击三次,直到最后的特性从阅读器中出现,并导致排序器对数据进行排序。
您将知道何时达到最终的功能,因为日志窗口会更新几行信息。最重要的消息是“清空工厂管道”这一行,它表示形状读取器已经完成读取数据并关闭。
还要注意关于LengthCalculator(将110个输入特性克隆为110个输出特性)的最终记录信息,以及排序器已经启动并完成对110个特性排序的消息:
教训:实际上,在最后三次单击中,关闭阅读器、使用length计算器执行最后的操作以及对数据进行排序,但是log窗口只是花了一些时间来跟踪所发生的事情。出于同样的原因,您可能会发现在107个特性处停止步骤#6会更好(可能发生的情况是,特性计数落后于实际正在处理的特性)。
8)再次点击“下一步连接”按钮。第一个排序后的特性被发送给写入器,写入器现在才被激活。注意,日志窗口显示已经创建了一个Shapefile写入器(打开的形状文件'C:\FMEData2017\Output\Training\SortedPeople)。轴马力的输出)。
教训:既然阅读器现在已经在写入器打开之前关闭了,那么我们现在实际上可以对正在读取的数据集进行回写。但这仍然不是推荐的行为。
9)点击“继续翻译”按钮运行工作区,不再停留在任何断点上。
教训:最后一个教训是注意翻译所使用的内存峰值。它将被记录在log窗口的底部。在这个转换中,它显示了存储在排序器转换器中的数据量。以这种方式累积存储在数据上的任何属性,不管是否将它们写入输出数据集。因此,在任何工作区开始时使用AttributeManager来删除多余的属性并减少基于组的transformer中使用的内存数量是有意义的。
©2019安全亚搏在线软件公司法律