优化作业会影响其并行性、分区以及作业对数据进行排序的方法。
当优化将处理推送至源或目标数据库时,它会将复杂的本机 SQL 插入与该数据库通信的连接器中。
根据执行的优化类型,优化过程会在连接器中设置各种分区和排序属性。
- 当将处理推送至目标连接器时:
- 在连接器上设置的执行方式(顺序或并行)保留原样,假设它反映作业设计器的意图(例如,
通过将连接器设置为顺序运行,尽量减少目标数据库资源的使用)。
- 连接器输入链接上的分区或收集方法设置为“自动”。
- 当将处理推送至源连接器时:
- 在逻辑被推送至连接器的阶段中指定的任何排序成为连接器中的 ORDER BY 子句。排序操作会替换连接器中已有的任何 ORDER BY 子句。目前,稳定排序和不稳定排序之间没有区别。
- 除了 Sort 阶段的逻辑被推送至使用“批量”方式的源连接器外,在源连接器中指定的执行方式保持不变。在这种情况下,执行方式从并行更改为顺序。
- 如果逻辑被推送至源连接器的阶段使用“相同”分区或收集方法,那么该方法会复位成“(自动)”。
“(自动)”方式会根据链接上的键列插入适当分区。如果使用任何其他分区或收集方法,那么方法保留为先前设置。
- 当 Sort 阶段的逻辑被推送至源连接器时,如果作业中的下一个阶段指定“(自动)”或“相同”分区方法,那么会在优化的作业中由 Sort 阶段的分区方式替换该方法。该分区方法被替换,以在作业中保留期望的分区。
例如,如果 Sort 阶段对特定键指定了“散列”分区,并且随后的 Modify 阶段具有“相同”分区,那么在优化的作业中,Modify 阶段会对该键指定散列分区方法。
InfoSphere® DataStage®通常处理或创建已排序的数据。许多排序语义不能直接在 SQL 中反映出来。
在 UPDATE 语句中,如果两个或更多数据行以非交换的方式影响数据库表中的单行(例如,将某人的薪水设置为两个不同值),
那么将数据行应用于目标表所使用的顺序非常重要。
在 INSERT 语句中,如果具有相同主键的两个或更多数据行尝试将行插入 (INSERT) 目标表,那么只有第一行会成功。
然而,SQL 不能保证数据处理的任何特定顺序。当 InfoSphere DataStage 作业处理被推送至数据库目标时,无法保证应用数据行的实际顺序。
如果数据可能包含多行,这些行以依赖顺序的方式影响数据库内目标表中的相同行(例如,具有固定值或非交换的算术表达式的 UPDATE),那么可以关闭“将处理推送至数据库目标”选项以保证正确操作。