このタイプの形式を消費するために、外部テーブルにOracle Preprocessorを使用するにはどうすればよいですか?
-
18-09-2019 - |
質問
nテーブルに類似しているカスタムファイル形式があるとします。 3を選択しましょう。ファイルを変換して、カスタムロードラッパーを書き込み、3つのデータベーステーブルを入力します。
しかし、スペースとリソースの制約については、これらすべてをテーブルスペースに保存することはできません。
Oracle Preprocessorを外部テーブルに使用して、カスタムファイルを3つの異なる方法で変換できますか?
私が読んだ使用の例は、gzip'dテキストファイルを例として説明しました。しかし、これは1対1のファイル間の関係であり、1つの変換しかありません。
データの抽出の可能性がある単一のファイルがあります。
- それぞれが異なるプログラムを参照して、n外部テーブルを定義する必要がありますか?
- 3つのテーブルを同じファイルにマッピングすると、これはパフォーマンスにどのように影響しますか? (アクセスは、ほとんどまたはすべての読み取りであり、書き込みはほとんどありません)。
また、私のプリプロセッサの標準出力はどのような形式である必要がありますか?それはCSVでなければなりません、または外部テーブルドライバーを構成する方法はありますか?
解決
「3つのテーブルを同じファイルにマッピングすると、これはパフォーマンスにどのように影響しますか?
1つの外部テーブル定義または3つの外部テーブル定義を介して、同じファイルにアクセスする3つのセッション間にほとんど、またはまったく違いはありません。外部テーブルはデータベースによってキャッシュされていません(ファイルシステムまたはディスクによる可能性があります)ため、アクセスは純粋に物理的な読み取りです。プリプロセッサプログラムに応じて、そこにはある程度のシリアル化がある可能性があります(または、プレプロセッサプログラムを使用してシリアル化を課すことができます)。
パフォーマンスに関しては、1回のセッションで外部ファイル/テーブルをスキャンし、1つ以上のデータベーステーブルにロードする方が良いでしょう。他のセッションはそこからそれを読み、SGAでキャッシュされています。また、データベーステーブルにインデックスを付けて、すべてを読む必要がないようにすることができます。
使用できる場合があります マルチテーブルインサート 単一のパスで単一の外部テーブル定義から複数のデータベーステーブルをロードします。
「私のプリプロセッサの標準出力はどのような形式である必要がありますか?それはCSVでなければなりません、または外部テーブルドライバーを構成する方法はありますか?」
それはほとんどSQL*ローダーに続き、両方ともにあります ユーティリティマニュアル. 。固定形式またはその他のデリミターを使用できます。
それぞれが異なるプログラムを参照して、n外部テーブルを定義する必要がありますか?
データがどのようにインターリーブされるかに依存します。前処理者を無視すると、同じファイルから異なる列を引く異なる外部テーブルがあるか、 いつロードします どのレコードを含めるか除外するかを決定する節。