今日もプログラミング

IT技術とかプログラミングのこととか特にJavaを中心に書いていきます

Oracle SQL*LoaderのPARTITIONについて

Oracle SQL*Loaderでは、制御ファイルに以下のように書くと、特定のパーティションにロードすることができる。

INSERT INTO SOME_TABLE PARTITION (SOME_PARTITION) VALUES ... 

 

挙動について

ドキュメントによると、

「行が指定のパーティションに対応しない場合、その行は拒否され」

とある。

実際に試してみたが、パーティションの条件に合わない行はロードされず、合う行だけがロードされる。

 

なお、PARTITIONを指定しない場合は、各行がそれぞれの条件に合うパーティションにロードされる。

 

パフォーマンスについて

これもドキュメントにある通り、PARTITION指定のロードでは、「従来型パス・ロード」が使用される。

SQL*Loaderには「ダイレクト・パス・ロード」と「従来型パス・ロード」があり、前者は高速だが、後者はそれほどでもない(1行ずつINSERTするよりは高速だが…)。

 

結論

ロードするデータが、単一のパーティションに含まれると分かっている場合は、PARTITIONを指定しない方がよいだろう(その方高速にロードされるので)。

そうでなく、特定パーティションに含まれない行を除外したい場合のみ、PARTITIONを指定するのがよさそうだ。