0

最初のフィールドが UNIX タイムスタンプであるかなり大きなファイル (50 MB) があります。ただし、ファイル全体をロードする必要はありません。必要なのはタイムスタンプ > some_parameterized_timestamp の半分だけです。

sqlldr では、when 句で = および <> 条件のみが許可されているようです。ファイルの読み込みに時間がかかりすぎて、不要なレコードを削除します。

同等のパフォーマンスを持つ sqlldr を使用する代替手段はおそらくありますか? (私はすでに direct=true を使用しています。)

awk を使用して、必要なデータを含むファイルのコピーを作成することを考えています。awk はかなり効率的ですが、その道を進む前に、ここでより良い提案を求めたいと思いました。

4

1 に答える 1

0

asktom に関するこのメモ (「magic」を検索)は、制御ファイルで INFILE '-' を使用すると、次のようにリダイレクトできることを示しているようです。

awk [various switches] sourcefile | sqlldr [sqlldr options]

しかし、私はそれをテストしていません。

データベース サーバー上のファイル システムにアクセスできると仮定すると、データ ファイルの外部テーブル仕様を使用し、SQL を使用して外部テーブルからデータを「ロード」できます。同様に、データをステージング テーブルにロードすることもできます。次に、SQL スクリプトを実行して

INSERT INTO TARGET_TABLE 
SELECT * FROM STAGING_TABLE 
 WHERE TIMESTAMP > :PARAMETER;
TRUNCATE TABLE STAGING_TABLE;
于 2010-02-12T17:03:02.813 に答える