本記事では、CREATE TABLE AS SELECT(CTAS) を使用して、テーブル作成と同時に クエリ結果を新しいテーブルに書き込む方法、および ダイレクトロード ヒントと default_load_mode の組み合わせ方について説明します。
データソースは、内部テーブル、外部テーブル、FILES(...) を含む SELECT などが可能です。
ダイレクトロードモード(フル / 増分)
CREATE TABLE AS SELECT ステートメントでは、DIRECT() ヒントを設定することでダイレクトロードモードを指定します。ヒントが指定されていない場合は、パラメータ default_load_mode でデフォルト動作を制御できます。
使用構文
CREATE /*+ [APPEND | DIRECT(need_sort,max_error,{'full'|'inc'|'inc_replace'})] parallel(N) */ TABLE table_name [AS] select_sentence
CREATE TABLE AS SELECT 構文の詳細については、CREATE TABLE(MySQLモード) および CREATE TABLE(Oracleモード) を参照してください。
パラメータの説明:
パラメータ |
説明 |
|---|---|
| APPEND | DIRECT() | ヒントを使用してダイレクトロード機能を有効にします。
注意
|
| parallel(N) | データロードの並列度です。必須項目で、1より大きい整数を指定します。 |
使用例
ダイレクトロードを使用して、テーブル tbl1 のデータを他のテーブルにインポートします。
テーブル
tbl1を作成し、テストデータを書き込みます。obclient [test]> CREATE TABLE tbl1(c1 int); obclient [test]> INSERT INTO tbl1 VALUES (1),(2),(3); obclient [test]> SELECT * FROM tbl1;CREATE TABLE AS SELECTを使用してtbl2にインポートします。フルモード:
obclient [test]> CREATE /*+ direct(true, 0, 'full') parallel(4) */ TABLE tbl2 AS SELECT * FROM tbl1;増分モード:
obclient [test]> CREATE /*+ direct(true, 0, 'inc') parallel(4) */ TABLE tbl2 AS SELECT * FROM tbl1; obclient [test]> CREATE /*+ direct(true, 0, 'inc_replace') parallel(4) */ TABLE tbl2 AS SELECT * FROM tbl1;オプション:
APPENDを使用する場合(DIRECT(true, 0)と同じ):obclient [test]> CREATE /*+ append parallel(4) */ TABLE tbl2 AS SELECT * FROM tbl1;
ヒントを指定しない場合、パラメータでデフォルトモードを制御できます:
obclient [test]> ALTER SYSTEM SET default_load_mode ='FULL_DIRECT_WRITE'; obclient [test]> CREATE TABLE tbl2 AS SELECT * FROM tbl1;または:
obclient [test]> ALTER SYSTEM SET default_load_mode ='INC_DIRECT_WRITE'; obclient [test]> CREATE TABLE tbl2 AS SELECT * FROM tbl1;
ダイレクトロードを使用して、テーブル tbl1 のデータを他のテーブルにインポートします。
テーブル
tbl1を作成し、テストデータを書き込みます。obclient [SYS]> CREATE TABLE tbl1(c1 int); obclient [SYS]> INSERT INTO tbl1 VALUES (1),(2),(3); obclient [SYS]> SELECT * FROM tbl1;CREATE TABLE AS SELECTを使用してtbl2にインポートします。フルモード:
obclient [SYS]> CREATE /*+ direct(true, 0, 'full') parallel(4) */ TABLE tbl2 AS SELECT * FROM tbl1;増分モード:
obclient [SYS]> CREATE /*+ direct(true, 0, 'inc') parallel(4) */ TABLE tbl2 AS SELECT * FROM tbl1; obclient [SYS]> CREATE /*+ direct(true, 0, 'inc_replace') parallel(4) */ TABLE tbl2 AS SELECT * FROM tbl1;オプション:
APPENDを使用する場合(DIRECT(true, 0)と同じ):obclient [SYS]> CREATE /*+ append parallel(4) */ TABLE tbl2 AS SELECT * FROM tbl1;
ヒントを指定しない場合、パラメータでデフォルトモードを制御できます:
obclient [SYS]> ALTER SYSTEM SET default_load_mode ='FULL_DIRECT_WRITE'; obclient [SYS]> CREATE TABLE tbl2 AS SELECT * FROM tbl1;または:
obclient [SYS]> ALTER SYSTEM SET default_load_mode ='INC_DIRECT_WRITE'; obclient [SYS]> CREATE TABLE tbl2 AS SELECT * FROM tbl1;