Oracle SQL*LoaderのPARTITIONについて
Oracle SQL*Loaderでは、制御ファイルに以下のように書くと、特定のパーティションにロードすることができる。
INSERT INTO SOME_TABLE PARTITION (SOME_PARTITION) VALUES ...
挙動について
ドキュメントによると、
「行が指定のパーティションに対応しない場合、その行は拒否され」
とある。
実際に試してみたが、パーティションの条件に合わない行はロードされず、合う行だけがロードされる。
なお、PARTITIONを指定しない場合は、各行がそれぞれの条件に合うパーティションにロードされる。
パフォーマンスについて
これもドキュメントにある通り、PARTITION指定のロードでは、「従来型パス・ロード」が使用される。
SQL*Loaderには「ダイレクト・パス・ロード」と「従来型パス・ロード」があり、前者は高速だが、後者はそれほどでもない(1行ずつINSERTするよりは高速だが…)。
結論
ロードするデータが、単一のパーティションに含まれると分かっている場合は、PARTITIONを指定しない方がよいだろう(その方高速にロードされるので)。
そうでなく、特定パーティションに含まれない行を除外したい場合のみ、PARTITIONを指定するのがよさそうだ。