如何使用 DataStage 比较 Netezza 中的数据

Posted

技术标签:

【中文标题】如何使用 DataStage 比较 Netezza 中的数据【英文标题】:How to compare data in Netezza using DataStage 【发布时间】:2015-07-13 05:56:10 【问题描述】:

我可以使用 DataStage 比较这两行,然后在 Status 字段发生变化时更新吗?

    ID | desc | ... | ... | Status | Start_Date | End_Date
------------------------------------------------------------
123456 | ...  | ... | ... |   Y    | 12/31/2014 | 21/31/9999
123456 | ...  | ... | ... |   N    | 12/31/2014 | current_date

一开始我只有这一行

    ID | desc | ... | ... | Status | Start_Date | End_Date
------------------------------------------------------------
123456 | ...  | ... | ... |   Y    | 12/31/2014 | 21/31/9999

那么...我想和这一行比较

   ID | desc | ... | ... | Status | Start_Date | End_Date
------------------------------------------------------------
123456| ...  | ... | ... |   N    | 12/31/2014 | current_date

如果状态字段从Y 更改为N,我想用current_date 更新End_Date。如果状态字段从N 更改为Y,我想用current_dateEnd_Date 再次用12/31/9999 更新Start_Date。是否可以在 DataStage 中执行此操作? 我尝试使用 Switch Processing,但是当我想在 Netezza 连接器中更新时卡住了。

【问题讨论】:

【参考方案1】:

仅从表中提取具有End_Date = 12/31/9999 的记录

然后在查找阶段比较ID和状态与新记录,如果匹配则插入更新文件,不匹配的可以直接插入表中。

在更新文件中,您必须保留新记录和从表中获取的数据。

现在在变压器 satge 中对 IDStart_Date 上的记录进行排序,并且在阶段变量中具有 if else 条件,例如如果 Status 为 N 然后结束前一个日期的日期并填充 End_Date = @当前日期的 987654328@。

希望这会有所帮助。

【讨论】:

感谢 Abhis 回答我的问题。这是关于使用数据阶段存储缓慢移动的维度。我尝试使用 SCD 进程但仍然失败。我想念代理键、业务键、Type1、Type2 等...

以上是关于如何使用 DataStage 比较 Netezza 中的数据的主要内容,如果未能解决你的问题,请参考以下文章

从 IBM DB2 迁移到 Netezza 的挑战

如何在 Netezza 中比较日期?

datastage里的timestamp类型转换问题

如何调优,datastage的瓶颈都包含哪些

从 Netezza 中的字符串获取完全匹配

datastage具体啥意思?能帮忙说明清楚吗?