CREATE TABLE - Amazon Redshift

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

CREATE TABLE

現在のデータベースに新しいテーブルを作成します。このテーブルの所有者は CREATE TABLE コマンドの発行者です。

Syntax

CREATE [ [LOCAL ] { TEMPORARY | TEMP } ] TABLE [ IF NOT EXISTS ] table_name ( { column_name data_type [column_attributes] [ column_constraints ] | table_constraints | LIKE parent_table [ { INCLUDING | EXCLUDING } DEFAULTS ] } [, ... ] ) [ BACKUP { YES | NO } ] [table_attribute] where column_attributes are: [ DEFAULT default_expr ] [ IDENTITY ( seed, step ) ] [ GENERATED BY DEFAULT AS IDENTITY ( seed, step ) ] [ ENCODE encoding ] [ DISTKEY ] [ SORTKEY ] and column_constraints are: [ { NOT NULL | NULL } ] [ { UNIQUE | PRIMARY KEY } ] [ REFERENCES reftable [ ( refcolumn ) ] ] and table_constraints are: [ UNIQUE ( column_name [, ... ] ) ] [ PRIMARY KEY ( column_name [, ... ] ) ] [ FOREIGN KEY (column_name [, ... ] ) REFERENCES reftable [ ( refcolumn ) ] and table_attributes are: [ DISTSTYLE { AUTO | EVEN | KEY | ALL } ] [ DISTKEY ( column_name ) ] [ [COMPOUND | INTERLEAVED ] SORTKEY ( column_name [,...]) | [ SORTKEY AUTO ] ]

Parameters

LOCAL

省略可能。Although this keyword is accepted in the statement, it has no effect in Amazon Redshift.

TEMPORARY | TEMP

現在のセッション内でのみ表示可能な一時テーブルを作成するキーワード。このテーブルは、作成したセッションの終了時に自動的に削除されます。一時テーブルには永続テーブルと同じ名前を付けることができます。一時テーブルは、別のセッション固有のスキーマ内に作成されます (このスキーマの名前を指定することはできません)。この一時スキーマは検索パスの最初のスキーマになるため、永続テーブルにアクセスするようにスキーマ名でテーブル名を修飾しなければ、一時テーブルは永続テーブルよりも優先されます。スキーマと優先順位の詳細については、「search_path」を参照してください。

注記

デフォルトでは、PUBLIC グループの自動メンバーシップにより、一時テーブルを作成する権限がユーザーに付与されます。あるユーザーにこの権限が付与されないようにするには、PUBLIC グループから TEMP 権限を取り消して、特定のユーザーまたはユーザーグループにのみ TEMP 権限を明示的に付与します。

IF NOT EXISTS

指定されたテーブルが既に存在する場合、コマンドはエラーで終了するのではなく、何も変更しないで、テーブルが存在するというメッセージを返すことを示す句。既存のテーブルの内容が、作成予定のテーブルとはまったく異なる可能性があることに注意してください。比較されるのはテーブル名のみです。

この句は、CREATE TABLE で既存のテーブルを作成しようとしてもスクリプトが失敗しないため、スクリプトを作成する際に便利です。

table_name

作成するテーブルの名前。

重要

「#」で始まるテーブル名を指定すると、そのテーブルは一時テーブルとして作成されます。次に例を示します。

create table #newtable (id int);

テーブル名の最大長は 127 バイトです。それより長い名前は 127 バイトまで切り詰められます。最大 4 バイトまで UTF-8 マルチバイト文字を使用できます。Amazon Redshift enforces a quota of the number of tables per cluster by node type, including user-defined temporary tables and temporary tables created by Amazon Redshift during query processing or system maintenance. オプションで、テーブル名は、データベース名およびスキーマ名で修飾することができます。次の例では、データベース名は tickit、スキーマ名は public、テーブル名は test です。

create table tickit.public.test (c1 int);

データベースまたはスキーマが存在し、テーブルが作成されていない場合、このステートメントはエラーを返します。システムデータベース template0template1、および padb_harvest にテーブルまたはビューを作成することはできません。

スキーマ名を指定すると、新しいテーブルはそのスキーマ内に作成されます (作成者がスキーマにアクセス権を持っている場合)。テーブル名は、そのスキーマで一意の名前にする必要があります。スキーマを指定しない場合、現在のデータベーススキーマを使用してテーブルが作成されます。一時テーブルを作成する場合、一時テーブルは特殊なスキーマに作成されるので、スキーマ名を指定することはできません。

同じ名前の一時テーブルでも、別のセッションで作成される場合は同じデータベース内に同時に存在することができます。これは、テーブルに割り当てられるスキーマが異なるためです。有効な名前の詳細については、「名前と識別子」を参照してください。

column_name

新しいテーブルで作成される列の名前。列名の最大長は 127 バイトです。それより長い名前は 127 バイトまで切り詰められます。最大 4 バイトまで UTF-8 マルチバイト文字を使用できます。1 つのテーブルで定義できる列の最大数は 1,600 です。有効な名前の詳細については、「名前と識別子」を参照してください。

注記

「横長のテーブル」を作成する場合は、ロードとクエリ処理の結果が即時に表示されるように、列リストが行幅の限度を超えないように注意します。詳細については、「使用に関する注意事項」を参照してください。

data_type

作成する列のデータ型。CHAR および VARCHAR の列の場合、最大長を宣言する代わりに MAX キーワードを使用できます。MAX は、最大長を CHAR では 4096 バイト、VARCHAR では 65535 バイトに設定します。GEOMETRY オブジェクトの最大サイズは 1,048,447 バイトです。

For information about the data types that Amazon Redshift supports, see データ型.

DEFAULT default_expr

列のデフォルトのデータ値を割り当てる句。default_expr のデータ型は列のデータ型に一致する必要があります。DEFAULT 値は、変数を使用しない式にする必要があります。サブクエリ、現在のテーブルに含まれる他の列の相互参照、およびユーザー定義の関数は使用できません。

default_expr 式は、列の値を指定しないすべての INSERT 操作で使用されます。デフォルト値を指定しなかった場合、列のデフォルト値は null です。

定義済み列リストの COPY 操作で、DEFAULT 値が含まれている列を省略すると、COPY コマンドで default_expr の値が挿入されます。

IDENTITY(seed, step)

列が IDENTITY 列であることを指定する句。IDENTITY 列には、一意の自動生成値が含まれます。IDENTITY 列のデータ型は、INT または BIGINT にする必要があります。

INSERT または INSERT INTO [tablename] VALUES() ステートメントを使用して行を追加する場合、これらの値は、seed として指定された値で始まり、step として指定された数が増分されます。

INSERT INTO [tablename] SELECT * FROM または COPY ステートメントを使用してテーブルをロードすると、データはパラレルにロードされ、ノードスライスに分散されます。To be sure that the identity values are unique, Amazon Redshift skips a number of values when creating the identity values. ID 値は一意ですが、順序はソースファイルの順序と一致しない場合があります。

GENERATED BY DEFAULT AS IDENTITY (seedstep)

列がデフォルトの IDENTITY 列であることを指定し、一意の値を列に自動的に割り当てることができるようにする句。IDENTITY 列のデータ型は、INT または BIGINT にする必要があります。値のない行を追加する場合、これらの値は、seed として指定された値で始まり、step として指定された数が増分されます。値の生成方法については、「IDENTITY」を参照してください。

Also, during INSERT, UPDATE, or COPY you can provide a value without EXPLICIT_IDS. Amazon Redshift uses that value to insert into the identity column instead of using the system-generated value. The value can be a duplicate, a value less than the seed, or a value between step values. Amazon Redshift doesn't check the uniqueness of values in the column. 値を指定しても、システムが生成する次の値には影響しません。

注記

列に一意性が必要な場合は、重複する値を追加しないでください。代わりに、seed より小さい値または step 値の間にある一意の値を追加します。

デフォルトの identity 列については、次のことに注意してください。

  • デフォルトの identity 列は NOT NULL です。NULL は挿入できません。

  • 生成された値をデフォルトの identity 列に挿入するには、キーワード DEFAULT を使用します。

    INSERT INTO tablename (identity-column-name) VALUES (DEFAULT);
  • デフォルトの identity 列の値をオーバーライドしても、次に生成される値には影響しません。

  • ALTER TABLE ADD COLUMN ステートメントでデフォルトの identity 列を追加することはできません。

  • ALTER TABLE APPEND ステートメントを使用して、デフォルトの IDENTITY 列を追加できます。

ENCODE encoding

列の圧縮エンコード。If no compression is selected, Amazon Redshift automatically assigns compression encoding as follows:

  • 一時テーブルのすべての列には RAW 圧縮がデフォルトで割り当てられます。

  • ソートキーとして定義されている列には、RAW 圧縮が割り当てられます。

  • BOOLEAN、REAL、DOUBLE PRECISION または GEOMETRY データ型として定義されている列には、RAW 圧縮が割り当てられます。

  • Columns that are defined as SMALLINT, INTEGER, BIGINT, DECIMAL, DATE, TIME, TIMETZ, TIMESTAMP, or TIMESTAMPTZ are assigned AZ64 compression.

  • CHAR または VARCHAR として定義された列には、LZO 圧縮が割り当てられます。

注記

列を圧縮しない場合は、明示的に RAW エンコードを指定します。

次の compression encodingsがサポートされています。

  • AZ64

  • BYTEDICT

  • DELTA

  • DELTA32K

  • LZO

  • MOSTLY8

  • MOSTLY16

  • MOSTLY32

  • RAW (非圧縮)

  • RUNLENGTH

  • TEXT255

  • TEXT32K

  • ZSTD

DISTKEY

列がテーブルの分散キーであることを指定するキーワード。テーブル内の 1 つの列のみを分散キーに指定できます。DISTKEY キーワードは列名の後に使用するか、DISTKEY (column_name) 構文を使用してテーブル定義の一部として使用できます。どちらの方法でも同じ結果が得られます。詳細については、このトピックで後述する DISTSTYLE パラメータを参照してください。

The data type of a distribution key column can be: BOOLEAN, REAL, DOUBLE PRECISION, SMALLINT, INTEGER, BIGINT, DECIMAL, DATE, TIME, TIMETZ, TIMESTAMP, or TIMESTAMPTZ, CHAR, or VARCHAR.

SORTKEY

列がテーブルのソートキーであることを指定するキーワード。データをテーブルにロードすると、データはソートキーとして指定された 1 つまたは複数の列に従ってソートされます。列名の後に SORTKEY キーワードを使用して 1 列のソートキーを指定することができます。または、SORTKEY (column_name [, ...]) 構文を使用して、テーブルのソートキーとして 1 つまたは数の列を指定することができます。この構文では複合ソートキーのみが作成されます。

1 つのテーブルで、最大 400 の SORTKEY 列を定義できます。

The data type of a sort key column can be: BOOLEAN, REAL, DOUBLE PRECISION, SMALLINT, INTEGER, BIGINT, DECIMAL, DATE, TIME, TIMETZ, TIMESTAMP, or TIMESTAMPTZ, CHAR, or VARCHAR.

NOT NULL | NULL

NOT NULL は、列に null 値を使用できないことを指定します。NULL はデフォルトであり、列で null 値を使用できることを指定します。IDENTITY 列はデフォルトで NOT NULL として宣言されます。

UNIQUE

列に一意の値のみを含めることができることを指定するキーワード。一意のテーブル制約の動作は、列制約の動作と同じですが、さらに複数の列に適用される点が異なります。一意のテーブル制約を定義するには、UNIQUE ( column_name [, ... ] ) 構文を使用します。

重要

一意の制約は情報提供に使用され、システムで強制されることはありません。

PRIMARY KEY

列がテーブルのプライマリキーであることを指定するキーワード。列定義を使用してプライマリキーとして定義できるのは 1 列だけです。複数列のプライマリキーを使用してテーブル制約を定義するには、PRIMARY KEY ( column_name [, ... ] ) 構文を使用します。

列をプライマリキーに指定すると、スキーマの設計に関するメタデータが提供されます。プライマリキーは、他のテーブルが、行の一意の識別子としてこの列セットに依存している可能性があることを示します。列制約かテーブル制約かにかかわらず、テーブルに指定できるプライマリキーは 1 つです。プライマリキーの制約は、同じテーブルに定義されている一意の制約で指定された列セットとは異なる列セットを指定する必要があります。

重要

プライマリキーの制約は情報提供にのみ使用されます。プライマリキーの制約がシステムに強制されることはありませんが、プランナーによって使用されます。

References reftable [ ( refcolumn ) ]

参照テーブルの行の参照列に含まれている値と一致する値を列に格納する必要があることを意味する、外部キー制約を指定する句。参照列は、参照テーブルの一意の制約またはプライマリキーの制約の列にする必要があります。

重要

外部キーの制約は情報提供にのみ使用されます。プライマリキーの制約がシステムに強制されることはありませんが、プランナーによって使用されます。

LIKE parent_table [ { INCLUDING | EXCLUDING } DEFAULTS ]

新しいテーブルで、列名、データ型、NOT NULL 制約を自動的にコピーする既存のテーブルを指定する句。新しいテーブルと親テーブル間に関連付けはなく、親テーブルを変更しても、新しいテーブルに変更は適用されません。コピーした列定義のデフォルトの式は、INCLUDING DEFAULTS を指定した場合にのみコピーされます。デフォルトの動作では、デフォルトの式が除外されるため、新しいテーブルのすべての列は NULL のデフォルト値になります。

LIKE オプションを指定して作成したテーブルは、プライマリキーと外部キーの制約を継承しません。分散スタイル、ソートキー、BACKUP、NULL のプロパティは LIKE テーブルで継承されますが、CREATE TABLE ... LIKE ステートメントで明示的に設定することはできません。

BACKUP { YES | NO }

テーブルを自動および手動クラスター スナップショットに含めるかどうかを指定する句。For tables, such as staging tables, that don't contain critical data, specify BACKUP NO to save processing time when creating snapshots and restoring from snapshots and to reduce storage space on Amazon Simple Storage Service. BACKUP NO の設定は、クラスター内の別ノードへのデータの自動レプリケーションには影響しません。そのため、BACKUP NO が指定されたテーブルはノードの障害時に回復されます。デフォルトは BACKUP YES です。

DISTSTYLE { AUTO | EVEN | KEY | ALL }

Keyword that defines the data distribution style for the whole table. Amazon Redshift distributes the rows of a table to the compute nodes according to the distribution style specified for the table. デフォルトは AUTO です。

テーブルにどの分散スタイルを選択するかによって、データベースの全体的なパフォーマンスが左右されます。詳細については、「データ分散スタイルの操作」を参照してください。可能な分散スタイルは次のとおりです。

  • AUTO: Amazon Redshift assigns an optimal distribution style based on the table data. For example, if AUTO distribution style is specified, Amazon Redshift initially assigns ALL distribution style to a small table, then changes the table to EVEN distribution when the table grows larger. If Amazon Redshift determines that a distribution key will improve the performance of queries, then Amazon Redshift might change the DISTSTYLE to KEY and assign a distribution key to your table . The change in distribution style occurs in the background with minimal impact to user queries.

    テーブルに適用された分散スタイルを表示するには、PG_CLASS システムカタログテーブルに対してクエリを実行します。詳細については、「分散スタイルの表示」を参照してください。

  • EVEN: The data in the table is spread evenly across the nodes in a cluster in a round-robin distribution. 行 ID は分散を決定するために使用され、およそ同じ行数が各ノードに分散されます。

  • KEY: The data is distributed by the values in the DISTKEY column. 結合するテーブルの結合列を分散キーとして設定すると、両方のテーブルの結合列がコンピューティングノードによりコロケーションされます。データがコロケーションされることで、オプティマイザーはより効率的に結合を実行できます。DISTSTYLE KEY を指定する場合は、テーブルに対して、または列定義の一部として、DISTKEY 列に名前を付ける必要があります。詳細については、このトピックで先述した DISTKEY パラメータを参照してください。

  • ALL: テーブル全体のコピーがすべてのノードに分散されます。この分散方式により、結合に必要なすべての列が確実にすべてのノードで使用可能になりますが、ストレージ要件が倍増し、テーブルに関する負荷とメンテナンス時間が増大します。ALL 分散を指定する場合、KEY 分散が適さない特定のディメンションテーブルで使用する場合には実行時間が改善される可能性がありますが、パフォーマンスの改善とメンテナンスコストを比較検討する必要があります。

DISTKEY ( column_name )

テーブルの分散キーとして使用する列を指定する制約。DISTKEY キーワードは列名の後に使用するか、DISTKEY (column_name) 構文を使用してテーブル定義の一部として使用できます。どちらの方法でも同じ結果が得られます。詳細については、このトピックで先述した DISTSTYLE パラメータを参照してください。

[COMPOUND | INTERLEAVED ] SORTKEY ( column_name [,...]) | [ SORTKEY AUTO ]

テーブルに対して 1 つ以上のソートキーを指定します。データをテーブルにロードすると、データはソートキーとして指定された列に従ってソートされます。列名の後に SORTKEY キーワードを使用して 1 列のソートキーを指定することができます。または、SORTKEY (column_name [ , ... ] ) 構文を使用して、テーブルのソートキーとして 1 つまたは数の列を指定することができます。

オプションでソート方式として COMPOUND または INTERLEAVED を指定できます。If you specify SORTKEY with columns the default is COMPOUND. 詳細については、「ソートキーの使用」を参照してください。

If you don't specify any sort keys options, the default is AUTO.

1 つのテーブルで最大 400 の COMPOUND SORTKEY 列または 8 の INTERLEAVED SORTKEY 列を定義できます。

AUTO

Specifies that Amazon Redshift assigns an optimal sort key based on the table data. For example, if AUTO sort key is specified, Amazon Redshift initially assigns no sort key to a table. If Amazon Redshift determines that a sort key will improve the performance of queries, then Amazon Redshift might change the sort key of your table . The actual sorting of the table is done by automatic table sort. 詳細については、「自動テーブルソート」を参照してください。

Amazon Redshift doesn't modify tables that have existing sort or distribution keys. With one exception, if a table has a distribution key that has never been used in a JOIN, then the key might be changed if Amazon Redshift determines there is a better key.

To view the sort key of a table, query the SVV_TABLE_INFO system catalog view. 詳細については、「SVV_TABLE_INFO」を参照してください。To view the Amazon Redshift Advisor recommendations for tables, query the SVV_ALTER_TABLE_RECOMMENDATIONS system catalog view. 詳細については、「SVV_ALTER_TABLE_RECOMMENDATIONS」を参照してください。To view the actions taken by Amazon Redshift, query the SVL_AUTO_WORKER_ACTION system catalog view. 詳細については、「SVL_AUTO_WORKER_ACTION」を参照してください。

COMPOUND

リストされているすべての列から成る複合キーを使用して、データがリスト順にソートされるように指定します。複合ソートキーは、クエリがソート列の順序に従って行をスキャンする場合に最も便利です。複合キーを使用したソートのパフォーマンス上のメリットは、クエリがセカンダリソート列に依存する状況が減少する点にあります。1 つのテーブルで、最大 400 の COMPOUND SORTKEY 列を定義できます。

INTERLEAVED

インターリーブソートキーを使用してデータがソートされるように指定します。インターリーブソートキーには、最大 8 つの列を指定できます。

インターリーブソートは、ソートキーの各列または列のサブセットに等しい重みを割り当てるため、クエリはソートキーの列の順序に依存しません。クエリが 1 つ以上のセカンダリソート列を使用すると、インターリーブソートによってクエリのパフォーマンスは大幅に向上します。インターリーブソートでは、データのロード操作とバキューム操作にわずかなオーバーヘッドコストがかかります。

重要

ID 列、日付、タイムスタンプなど、一定間隔で増加する属性を持つ列で、インターリーブソートキーを使用しないでください。

UNIQUE ( column_name [,...] )

テーブルの 1 つまたは複数の列のグループに、一意の値のみを含めることができることを指定する制約。一意のテーブル制約の動作は、列制約の動作と同じですが、さらに複数の列に適用される点が異なります。一意の制約がある場合、NULL 値は等値と見なされません。各一意のテーブル制約は、テーブルに定義されている他の一意のキーまたはプライマリキーで指定された列セットとは異なる列セットを指定する必要があります。

重要

一意の制約は情報提供に使用され、システムで強制されることはありません。

PRIMARY KEY ( column_name [,...] )

テーブルの 1 つまたは複数の列のグループに、一意の (重複しない) NULL 以外の値のみを含めることができることを指定する制約。列セットをプライマリキーに指定すると、スキーマの設計に関するメタデータも提供されます。プライマリキーは、他のテーブルが、行の一意の識別子としてこの列セットに依存している可能性があることを示します。単一の列制約かテーブル制約かにかかわらず、テーブルに指定できるプライマリキーは 1 つです。プライマリキーの制約は、同じテーブルに定義されている一意の制約で指定された列セットとは異なる列セットを指定する必要があります。

重要

プライマリキーの制約は情報提供にのみ使用されます。プライマリキーの制約がシステムに強制されることはありませんが、プランナーによって使用されます。

FOREIGN KEY ( column_name [, ... ] ) REFERENCES reftable [ ( refcolumn ) ]

外部キーの制約を指定する制約。この制約では、新しいテーブルの 1 列以上のグループに、参照テーブルのいずれかの行の参照列の値と一致する値のみを含める必要があります。refcolumn を省略すると、reftable のプライマリキーが使用されます。参照列は、参照テーブルの一意の制約またはプライマリキーの制約の列にする必要があります。

重要

外部キーの制約は情報提供にのみ使用されます。プライマリキーの制約がシステムに強制されることはありませんが、プランナーによって使用されます。