Filter组件概述
转换类型:已连接、主动
过滤器转换允许您过滤映射中的行。通过过滤器转换从源转换传递所有的行,然后为转换输入过滤条件。所有过滤器转换中的端口均为输入/输出端口,只有符合条件的行才能通过过滤器转换。
在某些情况下,数据写入目标前需要基于一个或多个条件对其进行过滤。例如,如果您有包含关于当前员工信息的人力资源目标,可能希望过滤出兼职员工和钟点工。
下面的映射通过过滤器转换从包含员工数据的人力资源表传递行。过滤器仅允许薪水为 $30,000 或更高的员工行通过。
使用 SALARY > 30000 过滤器,只有员工薪水高于 $30,000 的数据行可通过到达目标。
作为主动转换,过滤器转换可以更改通过它的行数。过滤条件将根据行是否符合指定条件为通过转换的每行返回 TRUE 或 FALSE。只有返回 TRUE 的行可以通过此转换。被放弃行不会出现在会话日志或拒绝文件中。
要使会话性能最优化,应使过滤器转换尽可能靠近映射中的源。并不是将您准备放弃的行传递至映射,而是在随后从源至目标的数据流中过滤出不需要的数据。
您不能将多个转换的端口连接至过滤器转换。过滤器的输入端口必须来自于单个转换。过滤器转换不允许设置输出默认值。
过滤条件
过滤条件可以使用转换语言输入。过滤条件是返回 TRUE 或 FALSE 的表达式。例如,如果您要过滤出员工薪水低于 $30,000 的行,可输入以下条件:
SALARY > 30000
可以使用 AND 和 OR 逻辑运算符来指定多个条件组合。如果要过滤掉薪水低于 $30,000 和多于 $100,000 的员工,您可输入以下条件:
SALARY > 30000 AND SALARY < 100000
无需指定 TRUE 或 FALSE 作为表达式中的值。TRUE 和 FALSE 为您设置的任意条件的隐含返回值。如果过滤条件求值为 NULL,则行假定为 FALSE。
使用过滤器转换的"属性"选项卡提供的"表达式编辑器"来输入条件。过滤条件区分大小写。任何返回单值的表达式均可被用作过滤器。您也可以输入一个常量作为过滤条件。与 FALSE 等效的数字为 zero (0)。非零值则等效于 TRUE。例如,如果您拥有名为 NUMBER_OF_UNITS 且具有数字数据类型的端口,那么如果 NUMBER_OF_UNITS 的值等于零,过滤条件 NUMBER_OF_UNITS 返回 FALSE。否则,条件返回 TRUE。
输入表达式后,您可以通过单击表达式编辑器中的"验证"按钮进行验证。输入表达式时,请在继续前对其进行验证以避免保存无效的映射至资料库。如果表达式中的映射包含语法错误,您将无法运行使用此映射的任意会话,直到您更正此错误。
创建Filter
- 在 Designer 中,切换到 Mapping Designer 并打开映射。
- 选择"转换-创建"。
选择"过滤器转换",然后输入新的转换名称。过滤器转换的命名惯例是 FIL_TransformationName。单击"创建",然后单击"完成"。
- 从源限定符或其它转换选择并拖动所有所需的端口以将其添加至过滤器转换。
选择并拖动端口后,这些端口的副本将出现在过滤器转换中。每列都同时具有输入和输出端口。
- 双击新转换的标题栏。
- 单击"属性"选项卡。
默认条件出现在条件列表中。默认条件为 TRUE(带数字值为 1 的常量)。
- 单击条件的"值"部分,然后单击"打开"按钮。
出现"表达式编辑器"。
- 输入您要应用的过滤条件。
将转换中的其中一个输入端口值用作此条件的一部分。但是,您也可以使用其它转换中的输出端口值。
- 单击"验证"以检查您所输入的条件语法。
在继续操作前,您可能不得不修复语法错误。
- 单击"确定"。
- 选择所需的"跟踪级别",并单击"确定"以返回 Mapping Designer。
- 选择"资料库-保存"以保存映射。
Filter优化
以下提示可提高过滤器性能:
在映射中先使用过滤器转换。
要使会话性能最忧化,应使过滤器转换尽可能靠近映射中的源。并不是将您准备放弃的行传递至映射,而是在随后从源至目标的数据流中过滤出不需要的数据。
使用源限定符转换至过滤器。
源限定符转换是过滤行的另一种方式。源限定符转换并不是从映射中过滤行,而是在从源读取时就进行过滤。主要的差异是源限定符限制从源进行提取的行设置,而过滤器转换限制发送至目标的行设置。由于源限定符减少了映射中使用的行数,它就可以提供更好的性能。
但是,源限定符转换只让您从关系源过滤行,而过滤器转换可以从任意源类型过滤行。另外,请注意由于它在数据库中运行,因此必须确保源限定符转换中的过滤条件仅使用标准的 SQL。过滤器转换可通过使用返回 TRUE 或 FALSE 值的语句或转换函数来定义条件。