CREATE TABLE AS コマンドは、SELECT 文の結果に基づいて表を作成するために使用します。このコマンド名は、CTAS に省略されることがあります。
CTAS 処理が実行されると、表の作成と挿入処理が行われます。挿入処理の間、Netezza はすべての列の最小値、最大値、ゾーン・マップを計算します。挿入処理を行う行数が構成されたしきい値 (ctas_auto_stats_min_rows) よりも少なければ、Netezza は統計情報の生成処理をスキップします。
分散キーのデフォルトは最初の列であり (ハッシュ分散)、ここでは認識可能な分散キーがないか、CTAS 表に対するソース・ストリームがラウンドロビン分散となっています。
CREATE TABLE t_one AS SELECT … FROM tbl …;
CREATE TABLE t_two AS SELECT … FROM tbl_one,tbl_two … WHERE
tbl_one.b1 = tbl_two.b2 …
CREATE TABLE t_three AS SELECT … FROM tbl_one, tbl_two, tbl_three…
WHERE … GROUP BY b1,b2,b3;
この変更により、従来のリリースでこの動作を制御していた NZ_DISABLE_SKEW_DEFENSE 環境変数が廃止されました。 リリース 4.6 へのアップグレード時にはこの変数の存在が検査され、これが設定されている場合は、その値に対応する値を使用して enable_random_table_distribute が設定されます。
CREATE [ TEMPORARY | TEMP ] TABLE <table> [ (<col>[,<col>…] ) ]
AS <select_clause> [ DISTRIBUTE ON ( <dist_col>[,<dist_col>…] ) ]
| 入力 | 説明 |
|---|---|
| TEMPORARY または TEMP | 一時表を作成します。 |
| <table> | 作成する表の名前。一時表には、既に存在している永続表と同じ名前を付けられますが、他のテーブル名は、データベースのスコープ内で固有でなければなりません。 |
| <col> | 新しい表内の列の名前。列名を指定しない場合、名前は select 節の出力列名から取得されます。 |
| <select_clause> | SELECT (行の取り出し用) で説明されている SELECT コマンド。 |
| <dist_col> | 分散列の名前。分散列について詳しくは、特権の『分散キーの取り扱い』を参照してください。 |
出力メッセージの一覧については、CREATE TABLE コマンドおよび SELECT コマンドを参照してください。
admin ユーザーか、データベースかスキーマの所有者であるか、Create Table 特権を持っている必要があります。SELECT 文で使用する表に対する Select 特権も必要です。
以下に使用例を示します。
cnumber | cname | cbreed | ckind
---------+--------+-------------+-------
3 | Cindy | Ayrshire | milk
8 | Muffin | Guernsey | milk
2 | Martha | Brown Swiss | milk
7 | Joe | Angus | beef
5 | Gretel | Highland | beef
1 | Betsy | Holstein | milk
6 | Bob | Angus | beef
4 | Mindy | Hereford | beef
9 | Milda | Jersey | milk
MYDB.SCH1(USER)=> CREATE TABLE cows2 AS SELECT cname, cbreed FROM cows;
MYDB.SCH1(USER)=> SELECT * FROM cows2;
cname | cbreed
--------+-------------
Cindy | Ayrshire
Muffin | Guernsey
Mindy | Hereford
Milda | Jersey
Betsy | Holstein
Gretel | Highland
Martha | Brown Swiss
Joe | Angus
Bob | Angus