Ab Initio支持Oracle Merge语句吗?



我试图在没有任何Ab Initio培训或文档的情况下设计Ab Initio加载过程。是的,我知道。设计决策是:对于传入的数据文件,将进行插入和更新。我是否应该让feed提供程序将它们分成数据文件(每晚大小为1 - 10gb),并让Ab Initio分别进行插入和更新?

我看到的一个问题是,数据并不总是你期望的那样……插入行可能已经存在(可能清除失败或提要提供者犯了错误)或者UPdate行不存在

所以我想知道我是否应该把所有的插入和更新结合起来…并使用Oracle Merge语句(在将数据并行加载到一个没有索引的staging表之后)

但是我不知道AbInitio是否支持合并。

web上没有太多的从头开始教程或文档…你能给我指个好地方吗?

您刚才描述的解决方案(在staging表中插入和更新,然后将内容合并到主表中)是可行的。

一个设计决策是:对于传入的数据文件,将有插入和更新。

我不知道这个决定的背景,但是你应该知道这个解决方案会导致更长的执行时间。为了执行插入和更新,您必须使用"Update Table"组件,这比简单的"Output Table"组件要慢。顺便说一下,不要同时为插入和更新使用相同的"Update Table"组件。为插入使用单独的"Update Table",为更新使用另一个"Update Table"(通过这种方式,您将体验到显著的性能提升)。(如果你可以改变上面提到的设计决策,那么使用"输出表"代替。)

在这两种情况下,将"Update Table"/"Output Table"组件设置为"never abort",这样当相同的插入语句出现两次或没有条目需要更新时,你的图就不会失败。

最后,"oracle merge"语句应该在"Run SQL"组件中触发/执行,当所有的插入和更新处理完成时。使用阶段来确保它以这种方式发生…

如果你想构建一个并行执行的图,那么要确保相同条目的插入和更新语句将由相同的分区处理。(使用最终表的主键作为"partition by key"组件中的键)

如果您想了解在混乱的输入中发生了多少重复插入或错误更新,请使用适当的"Update Table"/"Output Table"组件的"Reject"(最终是"Error")端口进行进一步处理。

我当然不会依赖源系统来告诉我目标表中是否存在行。我的直觉告诉我,如果可能的话,我应该选择并行的、无记录的(如果可能的话),压缩(如果可能的话)加载到一个staging表中,然后进行合并——如果Ab-Initio不支持合并,那么希望它支持调用PL/SQL过程,或者直接执行SQL语句。

如果这是大量的数据,我想在连接键上为新的和当前的数据集安排哈希分区。

相关内容

  • 没有找到相关文章

最新更新