各位专家,您好,
我试图了解表比较选项,并开始了逐行选择选项的研究,经过实验,我发现了这些观察结果。
表比较:–
表比较用于在源记录更新/更改时更新目标表。它用于实现缓慢变化的尺寸(类型2和类型3)。它将始终接收正常输入,如何租用服务器,并将生成三个操作码:–
插入(I)–当源表中插入了新记录但目标表中不存在时。
更新(U)–当源记录已更新且源中的这些更新需要反映在目标中时。
删除(D)–当某些记录已从源表中删除时源和那些记录需要从目标中删除,如果需要。
它总是与查询转换连接,因为这是唯一一个生成正常操作码的转换。
根据表比较生成的操作码,目标被更改。
它是如何处理的:–
在表比较选项中,我们有一个表名称部分,在其中我们选择需要比较的表它被称为比较表,它总是目标表。表比较维护目标表的两个图像,图像前和图像后。后像中的最终数据反映在目标上。前图像将其更改发送到后图像。简而言之,图像前和图像后都是保存数据的缓冲区。
选择"逐行选择"时会发生什么?
在逐行选择方法中,根据输入主键列部分定义的列执行SQL语句。如果在"比较列"部分中未指定任何列,则查询为:–
从表名称中选择*其中C1=xxxx和C2=yyyy,依此类推(基于"输入主键列"部分中的列)。
如果在"比较列"部分中指定任何列,则查询为:–
选择C1、C2、C3,…(比较列部分中存在的列的列表)来自表名称,其中C1=xxxx和C2=yyyy,依此类推(基于输入主键列部分中存在的列)。
然后此结果将表比较中的记录带到图像缓冲区之前,并与源进行比较,如果发现任何更改,则发送到图像和结果之后图像发送到目标后。
在比较方法中选择"逐行选择"选项。现在进行比较
假设最初没有记录加载到目标表中,即目标表为空,这意味着图像前和图像后部分也为空。现在,在第一次加载期间,即第一次执行作业时,由于目标表为空,所有记录都用操作码(i)插入到目标表中,前提是在输入主键列
中定义的列中没有重复数据执行前:–
表比较:–
执行后:–
操作码i,因为所有记录都是新的基于EMPID(我们在输入主键列中定义的列名)。
现在我截断目标表。
执行作业后:–
目标表:–
现在在同一个源中插入EMPID 1010和1011的少量副本。
源变为:–
并在执行前在目标表中记录:–
之后执行作业,
在最终目标中记录:–
它是如何处理的?
作业运行时,目标表中的记录放在转换映像之前。
最初在执行之前,对于EMP\u ID 1010,目标表的EMPNAME为RAJ EY…,对于EMP\u ID 1011,EMPNAME为RAJ KPMG…。然后将此EMP_ID与传入源记录进行比较。
转换发现传入源有两个EMP_ID 1010的副本和一个EMP_ID 1011的副本。
然后将这些传入记录与比较表进行比较,并生成"U"、UPDATE和opcode。
现在生成的所有更新中,哪一个将反映在目标中?
总是第一次更新,大数据分析学习,啥叫大数据,因为输入中定义的键列包含主键,将被发送到目标。
对于EMP_ID 1010,第一次更新是ENAME RAJ,因此,它反映在目标中。
表比较为更改的行触发更新语句。
更新表名集合列=xxxxx,其中列名=yyyyy。
现在我更改了源数据:–
已从源中删除EMPID为1010(1010 RAJ…和1010 RAJ EY)的行。
执行前:–
源:–
目标:–
执行后:–
最终目标:–
现在,对于EMP\u ID 1010,执行前埃纳·拉吉在场,多多淘客,对于EMP\u ID 1011,拉吉·麦肯锡在场。在执行转换后,找到EMP_ID 1010和1011的更改,大数据是,并发送更新,这些更改随后反映在目标中。
源中的行不会从目标中删除,因为我们没有选中表比较选项部分中的删除选项,因此TC不会检查删除。
Always where子句将包含列表/组合"输入主键列"部分中出现的列的数目。
希望对您有所帮助!
如有遗漏,请纠正。