1

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

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

所以我想知道我是否应该组合所有插入和更新......并使用Oracle Merge语句(在将数据并行加载到没有索引的临时表之后)

但我不知道 AbInitio 是否支持 Merge。

网络上的从头开始教程或文档并不多……你能指导我做些什么吗?

4

2 回答 2

1

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

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

我不知道这个决定的背景,但你应该知道这个解决方案会导致更长的执行时间。为了执行插入和更新,您必须使用比简单的“输出表”组件慢的“更新表”组件。顺便说一句,不要同时使用相同的“更新表”组件进行插入和更新。对插入使用单独的“更新表”,对更新使用另一个“更新表”(通过这种方式,您将体验到显着的性能提升)。(如果您可以更改上述设计决策,请改用“输出表”。)

在任何一种情况下,将“更新表”/“输出表”组件设置为“永不中止”,这样如果相同的插入语句出现两次或没有要更新的条目,您的图表就不会失败。

最后,当所有插入和更新的处理完成时,应该从“运行 SQL”组件触发/执行“oracle 合并”语句。使用阶段来确保它以这种方式发生......

如果您打算构建具有并行执行的图形,请确保相同条目的插入和更新语句将由相同的分区处理。(使用最终表的主键作为“按键分区”组件中的键。)

如果您想了解在杂乱的输入中发生了多少重复插入或错误更新,请使用相应“更新表”/“输出表”组件的“拒绝”(最终为“错误”)端口进行进一步处理.

于 2013-05-30T09:20:53.090 回答
0

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

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

于 2013-05-22T16:01:14.560 回答