IBM PureData System for Analytics, バージョン 7.1

CREATE TABLE

CREATE TABLE コマンドは、空の新規表を現在のデータベース内に作成します。CREATE TABLE コマンドは、表の 1 行に対応したタプル・タイプ (構造タイプ) を表すデータ型を自動的に作成します。

表には以下のような制限があります。
  • 既存のデータ型と同じ名前を持つことはできません。
  • システム・カタログ表と同じ名前を持つことはできません。
  • 1600 を超える列を持つことはできません。タプルの長さの制約により、実際の制限はわずかに低くなります。
  • 以下の名前の表またはビューの属性を持つことはできません。
    • cmax
    • cmin
    • createxid
    • ctid
    • datasliceid
    • deletexid
    • oid
    • rowid
    • tableoid
    • xmax
    • xmin

オプションの制約節では、挿入や更新の操作を正しく実行できるように、新規の行や更新された行が満たす必要のある制約 (またはテスト) が指定されます。制約とは、名前付きのルールであり、表で使用される挿入、更新、または削除操作の結果を制限することで有効な値セットを定義できる、SQL オブジェクトのことです。 Netezza® は、制約チェックをサポートしていません。制約を指定する場合は、制約チェックを実行し、参照整合性を確認する必要があります。

表制約と列制約を定義することができます。
  • 列制約は、列定義の一部として定義される制約です。
  • 表制約は、特定の列に関連付けられるものではなく、複数の列を含むことができます。

また、いずれの列制約も表制約として記述することができます。列制約が 1 つの列しか影響しない場合には、その制約は単なる表記上の制約となります。

分散指定
Netezza RDBMS データベースの各表には分散キーを 1 つだけ設定し、1 ~ 4 個の列から構成することができます。以下の SQL 構文を使用して、分散キーを作成することができます。
  • 明示的に分散キーを作成するには、次の Netezza SQL 構文を使用します。
    CREATE TABLE <tablename> [ ( <col>[,<col>… ] ) ] AS 
    <select_clause> [ DISTRIBUTE ON [HASH] ( <col>[<col>,… ] ) ]

    distribute on というフレーズは分散キーを指定し、hash というワードはオプションです。

  • ラウンドロビン分散キーを作成するには、次の Netezza SQL 構文を使用します。
    CREATE TABLE <tablename> (col1 int, col2 int, col3 int)
    DISTRIBUTE ON RANDOM;

    distribute on random というフレーズは、ラウンドロビン方式の分散を指定します。

  • 分散キーを指定せずに表を作成するには、次の Netezza SQL 構文を使用します。
    CREATE TABLE <tablename> (col1 int, col2 int, col3 int);

    分散キーは Netezza システムが選択します。どのキーが選択されるか確認する方法はなく、Netezza のソフトウェア・リリースによって異なる可能性があります。

制約ルールの動作
制約の更新や削除を行った場合の動作を以下のように指定できます。システムでは制約チェックを実行しないため、これらのルールは使用されるのではなく、単に容認されます。
  • CASCADE は、参照している列の値を被参照列の新しい値に更新します。
  • SET NULL は、参照している列を被参照列の新しい値に設定します。
  • SET DEFAULT は、被参照列を設定します。
  • RESTRICT は NO ACTION と同じです。
  • NO ACTION では、外部キーが違反の場合にエラーになります。
制約属性
制約には、制約チェックが即座に実行されるか延期されるかを決定する属性を以下のように指定できます。システムでは制約チェックを実行しないため、これらの属性は使用されるのではなく、単に容認されます。
  • [NOT] DEFERRABLE は、トランザクションの終了時に制約チェックを実行するかどうかを決定します。
  • INITIALLY DEFERRED は、トランザクションの終了時のみに制約をチェックします。
  • INITIALLY IMMEDIATE は、各文の後に制約をチェックします。

構文

CREATE TABLE コマンドの一般的な構文
CREATE [ TEMPORARY | TEMP ] TABLE <table>
( <col> <type> [<col_constraint>][,<col> <type> [<col_constraint>]…]
[<table_constraint>[,<table_constraint>… ] )
[ DISTRIBUTE ON { RANDOM | [HASH] (<col>[,<col>…]) } ]
[ ORGANIZE ON { (<col>) | NONE } ]
[ ROW SECURITY ]
ここで、<col_constraint> は、以下を表します。
[ CONSTRAINT <constraint_name> ] 
{NOT NULL | NULL | UNIQUE | PRIMARY KEY | DEFAULT <value> | <ref>}
[ [ [ NOT ] DEFERRABLE ] { INITIALLY DEFERRED | INITIALLY IMMEDIATE } |
[ INITIALLY DEFERRED | INITIALLY IMMEDIATE ] [ NOT ] DEFERRABLE ]
ここで、<table_constraint> は、以下を表します。
[ CONSTRAINT <constraint_name> ] 
{UNIQUE (<col>[,<col>…] ) |
PRIMARY KEY (<pkcol_name>[,<pkcol_name>…] ) |
FOREIGN KEY (<fkcol_name>[,<fkcol_name>…] ) <ref>}
[ [ [ NOT ] DEFERRABLE ] { INITIALLY DEFERRED | INITIALLY IMMEDIATE } |
[ INITIALLY DEFERRED | INITIALLY IMMEDIATE ] [ NOT ] DEFERRABLE ]
ここで、<ref> は、以下を表します。
REFERENCES <reftable> [ (<refcol_name>[,<refcol_name>…] ) ]
[ MATCH FULL ]
[ ON UPDATE {CASCADE | RESTRICT | SET NULL | SET DEFAULT | NO ACTION} ]
[ ON DELETE {CASCADE | RESTRICT | SET NULL | SET DEFAULT | NO ACTION} ]

システムでは、PRIMARY KEY、DEFAULT、FOREIGN KEY、UNIQUE、および REFERENCES について許可と管理を行います。IBM® Netezza システムでは、制約チェックおよび参照整合性をサポートしません。各自が制約チェックと参照整合性を確認する必要があります。

入力

CREATE TABLE コマンドの入力は以下のとおりです。
表 1. CREATE TABLE の入力
入力 説明
TEMP[ORARY] 作成する表は、一時表になります。
<table> 作成する表の名前。
<col> 新しい表に作成される列の名前。
<type> 列のデータ型。
DISTRIBUTE ON データベース内の各表には、1 から 4 列で構成される分散キーが存在している必要があります。デフォルトは RANDOM です。これは、システムにランダム分散キーを選択させます。
HASH このパラメーターは明確にするために指定できますが、コマンドには影響しません。
ORGANIZE ON 表の編成の対象となる列 (1 から 4 列)。 これは外部表には指定できません。 列が指定されている場合、表にマテリアライズ・ビューを含めることができません。さらに、指定されたすべての列データ型はゾーン・マップ可能でなければなりません。 表データの再編成は、GROOM TABLE が実行されるときに有効になります。 詳しくは、「IBM Netezza システム管理者ガイド」の『クラスター基本表の使用』を参照してください。
ROW SECURITY 行レベル・セキュリティーを使用して表を作成します。
<constraint_name> 列制約または表制約に付けられる名前。名前を指定しない場合、システムが名前を生成します。
NOT DEFERRABLE | DEFERRABLE 制約をトランザクションの終了まで延期できるかどうかを制御します。デフォルトは、NOT DEFERRABLE です。(Netezza では、制約チェックおよび参照整合性をサポートしません。)
INITIALLY DEFERRED (トランザクションの終了時点) または IMMEDIATE (それぞれの文の終了時点) のいずれかを指定します。
NOT NULL | NULL 列に NULL 値を含めることができるかどうか。NULL がデフォルトです。
UNIQUE (列および表制約) 列の各値が固有である必要があるかどうか。
PRIMARY KEY (列および表制約) 指定した列が表の主キーを形成するかどうか。

この制約は、本質的に UNIQUE 制約と NOT NULL 制約を組み合わせたものですが、列セットを主キーとして識別することにより、スキーマの設計に関するメタデータの提供も行います。主キーは、他の表から、この列セットを行の固有 ID として信頼できることを意味します。

列制約として、または表制約として、1 つの表に対して 1 つの PRIMARY KEY 制約のみを指定できます。

主キーを構成する列セットは、その表に対して定義された UNIQUE 制約で指定された列の他のセットとは異っている必要があります。

DEFAULT (列制約) この列の各行に配置されるデフォルト値。
REFERENCES (列制約) 新規表の指定された列には、指定された表の指定された列内の値と一致する値のみが含まれている必要があります。
FOREIGN KEY および REFERENCES 表 (表制約) 新規表の指定された列には、指定された表の指定された列内の値と一致する値のみが含まれている必要があります。列を指定しない場合、値は表の主キーと一致している必要があります。参照表の指定された列には、その表の UNIQUE 制約または PRIMARY KEY 制約が必要です。
MATCH FULL MATCH FULL を指定すると、複数列からなる外部キーの 1 つの列は、外部キーの他の部分が NULL ではない場合に、NULL を持つことができません。これはデフォルトです。 MATCH PARTIAL はサポートされません。
ON UPDATE | ON DELETE 指定された表または列が更新または削除されたときに実行されるアクション。
NO ACTION
外部キーが違反の場合に、エラーが発行されます。これはデフォルトです。
RESTRICT
NO ACTION と同じです。
CASCADE
削除された行を参照するすべての行を削除します。
SET NULL
参照している列の値をデフォルト値に設定します。
SET DEFAULT
参照している列の値をデフォルト値に設定します。

出力

コマンドの出力は以下のとおりです。

表 2. CREATE TABLE の出力
出力 説明
CREATE TABLE コマンドが正しく終了した場合にシステムがこのメッセージを返します。
ERROR 表の作成が失敗した場合にシステムがこのメッセージを返します。エラー・メッセージには、「ERROR: Relation 'table' already exists」のような説明文が含まれています。

特権

admin ユーザー、またはデータベースかスキーマの所有者であるか、あるいはアカウントが Create Table 特権を持っている必要があります。

使用方法

以下に使用例を示します。



フィードバック | Copyright IBM Corporation 2014 | 最終更新日: 2014-02-28