ALTER TABLE - Amazon Redshift

ALTER TABLE

データベーステーブルまたは Amazon Redshift Spectrum の外部テーブルの定義を変更します。このコマンドは、CREATE TABLE または CREATE EXTERNAL TABLE で設定された値とプロパティを更新します。

トランザクションブロック (BEGIN ... END) 内の外部テーブルに対して ALTER TABLE を実行することはできません。トランザクションの詳細については、「直列化可能分離」を参照してください。

注記

ALTER TABLE は、ALTER TABLE オペレーションを囲むトランザクションが完了するまで、テーブルの読み取りおよび書き込みオペレーションをロックします。

Syntax

ALTER TABLE table_name 
{
ADD table_constraint 
| DROP CONSTRAINT constraint_name [ RESTRICT | CASCADE ] 
| OWNER TO new_owner 
| RENAME TO new_name 
| RENAME COLUMN column_name TO new_name            
| ALTER COLUMN column_name TYPE new_data_type
| ALTER COLUMN column_name ENCODE new_encode_type     
| ALTER COLUMN column_name ENCODE encode_type, 
| ALTER COLUMN column_name ENCODE encode_type, .....;      
| ALTER DISTKEY column_name 
| ALTER DISTSTYLE ALL       
| ALTER DISTSTYLE EVEN
| ALTER DISTSTYLE KEY DISTKEY column_name 
| ALTER DISTSTYLE AUTO             
| ALTER [COMPOUND] SORTKEY ( column_name [,...] ) 
| ALTER SORTKEY AUTO 
| ALTER SORTKEY NONE
| ALTER ENCODE AUTO
| ADD [ COLUMN ] column_name column_type
  [ DEFAULT default_expr ]
  [ ENCODE encoding ]
  [ NOT NULL | NULL ] |
| DROP [ COLUMN ] column_name [ RESTRICT | CASCADE ] }

where table_constraint is:

[ CONSTRAINT constraint_name ]
{ UNIQUE ( column_name [, ... ] )  
| PRIMARY KEY ( column_name [, ... ] ) 
| FOREIGN KEY (column_name [, ... ] )
   REFERENCES  reftable [ ( refcolumn ) ]}

The following options apply only to external tables:

SET LOCATION { 's3://bucket/folder/' | 's3://bucket/manifest_file' } 
| SET FILE FORMAT format |
| SET TABLE PROPERTIES ('property_name'='property_value') 
| PARTITION ( partition_column=partition_value [, ...] ) 
  SET LOCATION { 's3://bucket/folder' |'s3://bucket/manifest_file' } 
| ADD [IF NOT EXISTS] 
    PARTITION ( partition_column=partition_value [, ...] ) LOCATION { 's3://bucket/folder' |'s3://bucket/manifest_file' }
    [, ... ]
| DROP PARTITION ( partition_column=partition_value [, ...] )  

ALTER TABLE コマンドの実行時間を短縮するために、ALTER TABLE コマンドの一部の句を組み合わせることができます。

Amazon Redshift では、ALTER TABLE の句の次の組み合わせがサポートされています。

ALTER TABLE tablename ALTER SORTKEY (column_list), ALTER DISTKEY column_Id; ALTER TABLE tablename ALTER DISTKEY column_Id, ALTER SORTKEY (column_list); ALTER TABLE tablename ALTER SORTKEY (column_list), ALTER DISTSTYLE ALL; ALTER TABLE tablename ALTER DISTSTYLE ALL, ALTER SORTKEY (column_list);

Parameters

table_name

変更するテーブルの名前 テーブル名のみを指定するか、schema_name.table_name 形式で特定のスキーマを使用します。外部テーブルは、外部スキーマの名前によって修飾される必要があります。また、ALTER TABLE ステートメントを使用してビュー名かビューの所有者を変更する場合、ビュー名を指定することもできます。テーブル名の最大長は 127 バイトです。それより長い名前は 127 バイトまで切り詰められます。最大 4 バイトまで UTF-8 マルチバイト文字を使用できます。有効な名前の詳細については、「名前と識別子」を参照してください。

ADD table_constraint

指定した制約をテーブルに追加する句。有効な table_constraint 値については、「CREATE TABLE」を参照してください。

注記

プライマリキー制約を null が許容された列に追加することはできません。列が元々 NOT NULL 制約で作成された場合、プライマリキー制約を追加できます。

DROP CONSTRAINT constraint_name

テーブルから指名された制約を削除する句。制約を削除するには、制約タイプではなく制約の名前を指定します。テーブルの制約名を表示するには、次のクエリを実行します。

select constraint_name, constraint_type from information_schema.table_constraints;
RESTRICT

指定の制約のみを削除する句。RESTRICT は DROP CONSTRAINT のオプションです。RESTRICT を CASCADE と併用することはできません。

CASCADE

指定の制約と同制約に依存するすべてを削除する句。CASCADE は DROP CONSTRAINT のオプションです。CASCADE を RESTRICT と併用することはできません。

OWNER TO new_owner

テーブル (またはビュー) の所有者を new_owner 値に変更する句。

RENAME TO new_name

テーブル (またはビュー) の名前を new_name で指定された値に変更する句。テーブル名の最大長は 127 バイトです。それより長い名前は 127 文字まで切り詰められます。

永続テーブルの名前を「#」で始まる名前に変更することはできません。「#」で始まるテーブル名は、一時テーブルを示します。

外部テーブル名を変更することはできません。

ALTER COLUMN column_name TYPE new_data_type

VARCHAR データ型と定義されている列のサイズを変更する句。次の制限事項を検討してください。

  • 圧縮エンコード (BYTEDICT、RUNLENGTH、TEXT255、TEXT32K) で列を変更することはできません。

  • 既存データの最大サイズよりサイズを小さくすることはできません。

  • デフォルト値を含む列は変更できません。

  • UNIQUE、PRIMARY KEY、または FOREIGN KEY を含む列は変更できません。

  • トランザクションブロック (BEGIN ... END) 内の列を変更することはできません。トランザクションの詳細については、「直列化可能分離」を参照してください。

ALTER COLUMN column_name ENCODE new_encode_type

列の圧縮エンコードを変更する句。列に圧縮エンコードを指定すると、テーブルは ENCODE AUTO に設定されなくなります。Amazon Redshift は、テーブルにあるすべての列の圧縮エンコードを自動的に管理しないようになりました。圧縮エンコードに関する詳細は、列圧縮の操作 を参照してください。

次の制限事項を検討してください。

  • 列を現在その列に定義されているものと同じエンコードに変更することはできません。

  • インターリーブされたソートキーを使用して、テーブルの列のエンコードを変更することはできません。

ALTER COLUMN column_name ENCODE encode_type, ALTER COLUMN column_name ENCODE encode_type, .....;

複数の列で、圧縮エンコードを単一のコマンドにより変更するための句。圧縮エンコードに関する詳細は、列圧縮の操作 を参照してください。次の制限事項を検討してください。

  • 1 つのコマンドで、列のエンコーディングを複数回にわたり、同じまたは異なるタイプに変更することはできません。

  • 列を現在その列に定義されているものと同じエンコードに変更することはできません。

  • インターリーブされたソートキーを使用して、テーブルの列のエンコードを変更することはできません。

ALTER DISTSTYLE ALL

テーブルの既存のディストリビューションスタイルを ALL に変更する句。以下の点を考慮します。

  • ALTER DISTSYTLE、ALTER SORTKEY、およびVACUUM は、同じテーブルで同時に実行することはできません。

    • VACUUM を実行中に、ALTER DISTSTYLE ALL を実行すると、エラーが返されます。

    • ALTER DISTKEY が実行されている場合は、テーブルでバックグラウンドバキュームは開始されません。

  • ALTER DISTSTYLE ALL コマンドは、インターリーブソートキーおよび一時テーブルを持つテーブルではサポートされません。

  • ディストリビューションスタイルが以前に AUTO として定義されていた場合、テーブルは自動テーブル最適化の候補ではなくなります。

DISTSTYLE ALL の詳細については、「CREATE TABLE」を参照してください。

ALTER DISTSTYLE EVEN

テーブルの既存のディストリビューションスタイルを EVEN に変更する句。以下の点を考慮します。

  • ALTER DISTSYTLE、ALTER SORTKEY、およびVACUUM は、同じテーブルで同時に実行することはできません。

    • VACUUM を実行中である場合、ALTER DISTSTYLE EVEN を実行すると、エラーが返されます。

    • ALTER DISTKEY EVEN が実行中である場合、テーブルでバックグラウンドバキュームは開始されません。

  • ALTER DISTSTYLE EVEN コマンドは、インターリーブされたソートキーを持つテーブルや一時テーブルではサポートされません。

  • ディストリビューションスタイルが以前に AUTO として定義されていた場合、テーブルは自動テーブル最適化の候補ではなくなります。

DISTSTYLE EVEN の詳細については、「CREATE TABLE」を参照してください。

ALTER DISTKEY column_name または ALTER DISTSTYLE KEY DISTKEY column_name

テーブルの分散キーとして使用される列を変更する句。以下の点を考慮します。

  • 同じテーブルで、VACUUM と ALTER DISTKEY を同時に実行することはできません。

    • VACUUM がすでに実行されている場合は、ALTER DISTKEY よりエラーが返ります。

    • ALTER DISTKEY が実行されている場合は、テーブルでバックグラウンドバキュームは開始されません。

    • ALTER DISTKEY が実行されている場合は、フォアグラウンドバキュームよりエラーが返ります。

  • ALTER DISTKEY コマンドは、1 つのテーブルに対して一度に 1 回のみ実行することができます。

  • インターリーブソートキーを使用するテーブルについては、ALTER DISTKEY コマンドはサポートされていません。

  • ディストリビューションスタイルが以前に AUTO として定義されていた場合、テーブルは自動テーブル最適化の候補ではなくなります。

DISTSTYLE KEY を指定する場合、データは、DISTKEY 列の値で分散されます。DISTSTYLE の詳細については、「CREATE TABLE」を参照してください。

ALTER DISTSTYLE AUTO

テーブルの既存のディストリビューションスタイルを AUTO に変更する句。

ディストリビューションスタイルを AUTO に変更すると、テーブルのディストリビューションスタイルは次のように設定されます。

  • DISTSTYLE ALL を持つ小さなテーブルは、AUTO(ALL) に変換されます。

  • DISTSTYLE EVEN を持つ小さなテーブルは、AUTO(ALL) に変換されます。

  • DISTSTYLE KEY を持つ小さなテーブルは、AUTO(ALL) に変換されます。

  • DISTSTYLE ALL を持つ大きなテーブルは、AUTO(EVEN) に変換されます。

  • DISTSTYLE EVEN を持つ大きなテーブルは、AUTO(EVEN) に変換されます。

  • DISTSTYLE KEY を持つ大きなテーブルは、AUTO(KEY) に変換され、DISTKEY は保持されます。

Amazon Redshift が、新しいディストリビューションスタイルまたはキーによってクエリのパフォーマンスが向上すると判断した場合、Amazon Redshift は、将来、テーブルのディストリビューションスタイルまたはキーを変更する可能性があります。

DISTSTYLE AUTO の詳細については、CREATE TABLE を参照してください。

テーブルのディストリビューションスタイルを表示するには、SVV_TABLE_INFO システムカタログビューに対してクエリを実行します。詳細については、「SVV_TABLE_INFO」を参照してください。テーブルの Amazon Redshift Advisor のレコメンデーションを表示するには、SVV_ALTER_TABLE_RECOMMENDATIONS システムカタログビューをクエリします。詳細については、「SVV_ALTER_TABLE_RECOMMENDATIONS」を参照してください。Amazon Redshift が実行したアクションを表示するには、SVL_AUTO_WORKER_ACTION システムカタログビューにクエリを実行します。詳細については、「SVL_AUTO_WORKER_ACTION」を参照してください。

ALTER [COMPOUND] SORTKEY ( column_name [,...] )

テーブルで使用されるソートキーを変更または追加する句。

ソートキーを変更すると、新しいソートキーまたは元のソートキーの列の圧縮エンコードが変更される場合があります。テーブルにエンコードが明示的に定義されていない場合、Amazon Redshift は、次のように圧縮エンコードを自動的に割り当てます。

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

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

  • SMALLINT、INTEGER、BIGINT、DECIMAL、DATE、TIME、TIMETZ、TIMESTAMP、または TIMESTAMPTZ として定義された列には AZ64 圧縮が割り当てられます。

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

以下の点を考慮します。

  • テーブルあたりのソートキーには最大 400 列を定義できます。

  • 変更できるのは複合ソートキーのみです。インターリーブソートキーは変更できません。

  • ソートキーが以前に AUTO として定義されていた場合、テーブルは自動テーブル最適化の候補ではなくなります。

  • Amazon Redshift では、ソートキーとして定義された列に RAW エンコード (圧縮なし) を使用することをお勧めします。列を変更してソートキーとして選択すると、列の圧縮が RAW 圧縮 (圧縮なし) に変更されます。これにより、テーブルに必要なストレージ量が増加する可能性があります。テーブルのサイズがどれだけ増加するかは、特定のテーブル定義とテーブルの内容によって異なります。圧縮の詳細については、圧縮エンコード を参照してください。

データがテーブルに読み込まれる際、データはソートキーの順序で読み込まれます。ソートキーが変更されると、Amazon Redshift によってデータの順序が変更されます。SORTKEY の詳細については、「CREATE TABLE」を参照してください。

ALTER SORTKEY AUTO

ターゲットテーブルのソートキーを AUTO に変更または追加する句。

ソートキーを AUTO に変更すると、Amazon Redshift はテーブルの既存のソートキーを保持します。

Amazon Redshift が新しいソートキーによってクエリのパフォーマンスが向上すると判断した場合、Amazon Redshift は今後、テーブルのソートキーを変更する可能性があります。

SORTKEY AUTO の詳細については、CREATE TABLE を参照してください。

テーブルのソートキーを表示するには、SVV_TABLE_INFO システムカタログビューに対してクエリを実行します。詳細については、「SVV_TABLE_INFO」を参照してください。テーブルの Amazon Redshift Advisor のレコメンデーションを表示するには、SVV_ALTER_TABLE_RECOMMENDATIONS システムカタログビューをクエリします。詳細については、「SVV_ALTER_TABLE_RECOMMENDATIONS」を参照してください。Amazon Redshift が実行したアクションを表示するには、SVL_AUTO_WORKER_ACTION システムカタログビューにクエリを実行します。詳細については、「SVL_AUTO_WORKER_ACTION」を参照してください。

ALTER SORTKEY NONE

ターゲットテーブルのソートキーを削除する句。

ソートキーが以前に AUTO として定義されていた場合、テーブルは自動テーブル最適化の候補ではなくなります。

ALTER ENCODE AUTO

ターゲットテーブルの列のエンコードタイプを AUTO に変更する句。エンコードを AUTO に変更すると、Amazon Redshift はテーブル内の列の既存のエンコードタイプを保持します。その後、Amazon Redshift が新しいエンコードタイプによってクエリのパフォーマンスが向上すると判断した場合、Amazon Redshift はテーブル列のエンコードタイプを変更できます。

1 つ以上の列を変更してエンコードを指定した場合、Amazon Redshift はテーブル内のすべての列のエンコードを自動的に調整しなくなりました。列は現在のエンコード設定を保持します。

次のアクションは、テーブルの ENCODE AUTO 設定には影響しません。

  • テーブルの名前を変更します。

  • テーブルの DISTSTYLE または SORTKEY 設定を変更します。

  • ENCODE 設定で列を追加または削除します。

  • COPY コマンドの COMPUPDATE オプションを使用します。詳細については、「 データのロード操作」を参照してください。

テーブルのエンコードを表示するには、SVV_TABLE_INFO システムカタログビューにクエリを実行します。詳細については、「SVV_TABLE_INFO」を参照してください。

RENAME COLUMN column_name TO new_name

列の名前を new_name で指定された値に変更する句。列名の最大長は 127 バイトです。それより長い名前は 127 文字まで切り詰められます。有効な名前の詳細については、「名前と識別子」を参照してください。

ADD [ COLUMN ] column_name

指定した名前を持つ列をテーブルに追加する句。各 ALTER TABLE ステートメントでは 1 列しか追加できません。

テーブルの分散キー (DISTKEY) またはソートキー (SORTKEY) である列は追加できません。

ALTER TABLE ADD COLUMN コマンドを使用して次のテーブルと列の属性を変更することはできません。

  • UNIQUE

  • PRIMARY KEY

  • REFERENCES (外部キー)

  • IDENTITY または GENERATED BY DEFAULT AS IDENTITY

列名の最大長は 127 バイトです。それより長い名前は 127 文字まで切り詰められます。1 つのテーブルで定義できる列の最大数は 1,600 です。

外部テーブルに列を追加する場合、次の制限が適用されます。

  • DEFAULT、ENCODE、NOT NULL または NULL を制約する列がある外部テーブルに列を追加することはできません。

  • AVRO ファイル形式を使用して定義した外部テーブルに列を追加することはできません。

  • 擬似列が有効になっている場合、1 つの外部テーブルで定義できる列の最大数は 1,598 です。擬似列が有効でない場合、1 つのテーブルで定義できる列の最大数は 1,600 です。

詳細については、「CREATE EXTERNAL TABLE」を参照してください。

column_type

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

Amazon Redshift でサポートされているデータ型の詳細については、データ型 を参照してください。

DEFAULT default_expr

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

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

COPY 操作により、DEFAULT 値と NOT NULL 制約が設定された列で null フィールドが見つかった場合、COPY コマンドは default_expr の値を挿入します。

DEFAULT は外部テーブルでサポートされていません。

ENCODE encoding

列の圧縮エンコード。デフォルトでは、テーブル内のどの列にも圧縮エンコードを指定しない場合、またはテーブルに ENCODE AUTO オプションを指定した場合、Amazon Redshift はテーブル内のすべての列の圧縮エンコードを自動的に管理します。

テーブルで任意の列に圧縮エンコードを指定する場合、またはテーブルに ENCODE AUTO オプションを指定しない場合、Amazon Redshift は次のように圧縮エンコードを指定しない列に圧縮エンコードを自動的に割り当てます。

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

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

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

  • SMALLINT、INTEGER、BIGINT、DECIMAL、DATE、TIME、TIMETZ、TIMESTAMP、または TIMESTAMPTZ として定義された列には AZ64 圧縮が割り当てられます。

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

注記

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

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

  • AZ64

  • BYTEDICT

  • DELTA

  • DELTA32K

  • LZO

  • MOSTLY8

  • MOSTLY16

  • MOSTLY32

  • RAW (非圧縮)

  • RUNLENGTH

  • TEXT255

  • TEXT32K

  • ZSTD

ENCODE は外部テーブルでサポートされていません。

NOT NULL | NULL

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

NOT NULL と NULL は外部テーブルでサポートされていません。

DROP [ COLUMN ] column_name

テーブルから削除する列の名前。

テーブルの末尾列は削除できません。テーブルには少なくとも 1 つの列が必要です。

テーブルの分散キー (DISTKEY) またはソートキー (SORTKEY) である列は削除できません。ビュー、プライマリキー、外部キー、UNIQUE 制約などの依存オブジェクトが列にある場合、DROP COLUMN のデフォルト動作は RESTRICT です。

外部テーブルから列を削除する場合は、次の制限が適用されます。

  • 列をパーティションとして使用している場合、外部テーブルから列を削除することはできません。

  • AVRO ファイル形式を使用して定義した外部テーブルから列を削除することはできません。

  • RESTRICT と CASCADE は外部テーブルに無視されます。

詳細については、「CREATE EXTERNAL TABLE」を参照してください。

RESTRICT

RESTRICT を DROP COLUMN とともに使用すると、以下の場合に、ドロップされる列がドロップされません。

  • 定義されたビューがドロップされる列を参照している場合

  • 外部キーが列を参照している場合

  • 列がマルチパートキーに属している場合

RESTRICT を CASCADE と併用することはできません。

RESTRICT と CASCADE は外部テーブルに無視されます。

CASCADE

DROP COLUMN と共に使用すると、指定した列およびその列に依存するすべてのものを削除します。CASCADE を RESTRICT と併用することはできません。

RESTRICT と CASCADE は外部テーブルに無視されます。

以下のオプションは、外部テーブルにのみ適用されます。

SET LOCATION { 's3://bucket/folder/' | 's3://bucket/manifest_file' }

データファイルを含む Amazon S3 フォルダ、または Amazon S3 オブジェクトパスのリストを含むマニフェストファイルへのパス。バケットは、Amazon Redshift クラスターと同じ AWS リージョン内に置かれている必要があります。サポートされている AWS リージョンの一覧は、「Amazon Redshift Spectrum の考慮事項」でご確認ください。マニフェストファイルの使用に関する詳細は、CREATE EXTERNAL TABLE Parameters リファレンスの LOCATION を参照してください。

SET FILE FORMAT format

外部データファイルのファイル形式。

有効な形式は次のとおりです。

  • AVRO

  • PARQUET

  • RCFILE

  • SEQUENCEFILE

  • TEXTFILE

SET TABLE PROPERTIES ( 'property_name'='property_value')

外部テーブルのテーブルプロパティのテーブル定義を設定する句。

注記

テーブルのプロパティでは、大文字と小文字が区別されます。

'numRows'='row_count'

テーブル定義の numRows 値を設定するプロパティ。外部テーブルの統計を明示的に更新するには、テーブルのサイズを示す numRows プロパティを設定します。Amazon Redshift は、外部テーブルを分析して、クエリオプティマイザがクエリプランを生成するために使用するテーブル統計を生成することはありません。外部テーブルに対してテーブル統計が設定されていない場合、Amazon Redshift はクエリ実行プランを生成します。このプランは、外部テーブルの方が大きくローカルテーブルの方が小さいという前提に基づきます。

'skip.header.line.count'='line_count'

各ソースファイルの最初に省略する行数を設定するプロパティ。

PARTITION ( partition_column=partition_value [, ...] SET LOCATION { 's3://bucket/folder' | 's3://bucket/manifest_file' }

1 つ以上のパーティション列の新しい場所を設定する句。

ADD [ IF NOT EXISTS ] PARTITION ( partition_column=partition_value [, ...] ) LOCATION { 's3://bucket/folder' | 's3://bucket/manifest_file' } [, ... ]

1 つ以上のパーティションを追加する句。複数の PARTITION 句を指定するには、単一の ALTER TABLE … ADD ステートメントを使用します。

注記

AWS Glue を使用する場合、単一の ALTER TABLE ステートメントを使用して、最大 100 パーティションまで追加できます。

IF NOT EXISTS 句は、指定されたパーティションが既に存在する場合はコマンドが変更を加えないことを示します。また、コマンドが、エラーで終了するのではなく、パーティションが存在することを示すメッセージを返すことも示します。この句は、ALTER TABLE で既存のパーティションを追加しようとしてもスクリプトが失敗しないため、スクリプトを作成する際に便利です。

DROP PARTITION (partition_column=partition_value [, ...] )

指定のパーティションを削除する句。パーティションを削除すると、外部テーブルのメタデータのみが変化します。Amazon S3 のデータは影響を受けません。