2009-07-06 7 views
2

私はOracleデータベースに大量のデータをロードしようとしています。oracleにロードするための代替語

入力されるデータはCSV形式であり、少し解析するとCSV形式に変換できます。

ロード中に一部の行が拒否されることがありますが、他の挿入をロールバックしたくない場合があります。

私は、次のいずれかの方法検討しています:誰でもプロのためのいくつかの良いのURLに私を指すことができますストアドプロシージャ

を使用してexternal table

  • を使用してsqlloader
  • を使用して

    1. を私は考慮すべき他の選択肢を示唆しているでしょうか?

      ありがとうございました。

      編集:

      申し訳ありませんが、私は外部表を作成しようとしています。2.を明確にして、データベースに選択する必要があります。 CSVのような大量のデータにはこれが良いアプローチだと私は理解していますか?

  • 答えて

    0

    私は外部テーブルアプローチを使用します。

    は、私がこれを行うにはPerlスクリプトを書かれ、SQLLDRを使用しましたasktom

    1

    を参照してください。

    マシン自体にアクセスでき、CSVに問題がない(CSVが苦しい)場合は、sqlldrを使用します。制御ファイルを高速に処理するのに費やす価値があり、あなたが出会った各Oracleボックスに縛られています。

    1

    これは、Oracleでデータを取得した後で、データの処理内容によって異なります。頻繁にクエリを実行する場合は、sqlloaderを使用する方が効率的です。データを通常のOracle表に入れることで、索引、主キーなどを追加することができます。また、Oracleによってデータが管理されるため、データがより厳密に定義された構造に編成されるため、パフォーマンスが向上する可能性があります。

    外部データセットでデータを頻繁に照会しない場合は、外部表は便利です。ストレージ(ファイルとOracleの表領域)の複製やバッチ・ジョブの終了を待っているsqlloaderの手間を省くことができます。しかし、Oracleは特定の行を見つける方法がないため、一般的にはフル・テーブル読取りに使用します。

    短い答え: "where"句を使用してこのテーブルをクエリする場合は、sqlloaderを使用してテーブルを作成します。そうでない場合は、両方を試してパフォーマンスを評価してください。

    0

    SQLローダーと外部テーブルのアプローチは非常に似ています。いくつかの行が拒否された場合にデータセット全体を破棄しないため、どちらも要件を満たしています。

    SQLローダーの方法を選択した場合、oracle-csv-loaderを使用して、手動でテーブルと制御ファイルを作成する代わりにタスクを自動的に実行できます。

    2

    私はSQL * Loaderのではなく、外部表を使用したい、なぜ唯一の理由は、以下のとおりです。

    1. 私はANからそれを取得するためにも、前処理スクリプトで(サーバからデータファイルにアクセスできなかった場合
    2. 外部テーブルに制限がある場合(ストリーム形式のファイルを読み込めないなど)、制限がある場合。

    外部表は、(スクリプトなどの前処理、マージし、負荷時の結合および/または集計、マルチテーブル挿入)、およびすべてのラウンドだけでより良い経験遠く、より使いやすく、より柔軟です。パラレルDMLもです。 SQL * Loaderより簡単です。

    関連する問題