1

Ab Initio のトレーニングやドキュメントなしで、Ab Initio ロード プロセスを設計しようとしています。ええ、私は知っています。設計上の決定は次のとおりです。着信データ ファイルに対して、挿入と更新が行われます。フィード プロバイダーにデータ ファイル (毎晩 1 ~ 10 GB のサイズ) に分割してもらい、Ab Initio に挿入と更新を別々に行わせる必要がありますか?

私が見ている問題は、データが常に期待どおりであるとは限らないことです...そして、挿入行がすでに存在している可能性があります(おそらく、パージが失敗したか、フィードプロバイダーが間違いを犯しました)またはUPdate行が存在しません.

したがって、すべての挿入と更新を組み合わせて、Oracle Mergeステートメントを使用する必要があるかどうか疑問に思っています(もちろん、インデックスのないステージングテーブルにデータを並行してロードした後)

しかし、AbInitio が Merge をサポートしているかどうかはわかりません。

ab initio のチュートリアルや Web 上のドキュメントはあまりありません。

4

2 に答える 2

1

先ほど説明したソリューション (ステージング テーブルに挿入して更新し、メイン テーブルのコンテンツをマージする) は実現可能です。

設計上の決定は次のとおりです。着信データ ファイルに対して、挿入と更新が行われます。

この決定の背景はわかりませんが、この解決策により実行時間が長くなることを知っておく必要があります。挿入と更新を実行するには、単純な「出力テーブル」コンポーネントよりも遅い「テーブル更新」コンポーネントを使用する必要があります。ちなみに、挿入と更新に同時に同じ「テーブルの更新」コンポーネントを使用しないでください。代わりに、挿入用に別の「更新テーブル」を使用し、更新用に別の「更新テーブル」を使用します (この方法で劇的なパフォーマンスの向上を体験できます)。(上記の設計上の決定を変更できる場合は、代わりに「出力テーブル」を使用してください。)

いずれの場合も、「Update Table」/「Output Table」コンポーネントを「never abort」に設定して、同じ挿入ステートメントが 2 回発生したり、更新するエントリがない場合にグラフが失敗しないようにします。

最後に、すべての挿入と更新の処理が終了したら、「SQL の実行」コンポーネントから「Oracle マージ」ステートメントを起動/実行する必要があります。フェーズを使用して、このようになることを確認してください...

並列実行でグラフを作成する場合は、同じエントリの挿入ステートメントと更新ステートメントが同じパーティションで処理されることを確認してください。(最終テーブルの主キーを「キーによる分割」コンポーネントのキーとして使用します。)

乱雑な入力で重複した挿入または誤った更新が発生した回数の概要を知りたい場合は、適切な「テーブルの更新」/「テーブルの出力」コンポーネントの「拒否」(最終的には「エラー」) ポートを使用して、さらに処理を行います。 .

于 2013-05-30T09:20:53.090 に答える