ALTER TABLE の例 - Amazon Redshift

ALTER TABLE の例

次の例は、ALTER TABLE コマンドの基本用法を示しています。

テーブル名の変更

次のコマンドは、USERS テーブルを USERS_BKUP に名前変更します。

alter table users rename to users_bkup;

このタイプのコマンドを使用して、ビューの名前を変更することもできます。

テーブルまたはビューの所有者の変更

次のコマンドは VENUE テーブルの所有者をユーザー DWUSER に変更します。

alter table venue owner to dwuser;

次のコマンドは、ビューを作成した後、その所有者を変更します。

create view vdate as select * from date; alter table vdate owner to vuser;

列名の変更

次のコマンドは VENUE テーブルの列名を VENUESEATS から VENUESIZE に変更します。

alter table venue rename column venueseats to venuesize;

テーブルの制約を削除する

プライマリキー、外部キーまたは一意の制約のようなテーブルの制約を削除するには、まず内部の制約名を見つけます。その後、ALTER TABLE コマンドで制約名を指定します。次の例では、CATEGORY テーブルの制約を見つけてから、category_pkey という名前のプライマリキーを削除します。

select constraint_name, constraint_type from information_schema.table_constraints where constraint_schema ='public' and table_name = 'category'; constraint_name | constraint_type ----------------+---------------- category_pkey | PRIMARY KEY alter table category drop constraint category_pkey;

VARCHAR 列の変更

ストレージを節約するため、最初に現在のデータ要件に必要な最小サイズの VARCHAR 列を使用してテーブルを定義することができます。後でより長い文字列を収容するには、テーブルを変更して列のサイズを大きくすることができます。

次の例では、EVENTNAME 列のサイズを VARCHAR(300) に増やします。

alter table event alter column eventname type varchar(300);

列の圧縮エンコードを変更する

列の圧縮エンコードは変更できます。以下に、このアプローチを示す一連の例を示します。これらの例のテーブルは次のように定義されています。

create table t1(c0 int encode lzo, c1 bigint encode zstd, c2 varchar(16) encode lzo, c3 varchar(32) encode zstd);

次のステートメントは、列 c0 の圧縮エンコードを LZO エンコードから AZ64 エンコードに変更します。

alter table t1 alter column c0 encode az64;

次のステートメントは、列 c1 の圧縮エンコードを Zstandard エンコードから AZ64 エンコードに変更します。

alter table t1 alter column c1 encode az64;

次のステートメントは、列 c2 の圧縮エンコードを LZO エンコードからバイトディクショナリエンコードに変更します。

alter table t1 alter column c2 encode bytedict;

次のステートメントは、列 c3 の圧縮エンコードを Zstandard エンコードから Runlength エンコードに変更します。

alter table t1 alter column c3 encode runlength;

DISTSTYLE KEY DISTKEY 列の変更

次の例は、テーブルの DISTSTYLE および DISTKEY を変更する方法を示しています。

EVEN 分散スタイルを指定してテーブルを作成します。SVV_TABLE_INFO ビューは、DISTSTYLE が EVEN であることを示しています。

create table inventory( inv_date_sk int4 not null , inv_item_sk int4 not null , inv_warehouse_sk int4 not null , inv_quantity_on_hand int4 ) diststyle even; Insert into inventory values(1,1,1,1); select "table", "diststyle" from svv_table_info; table | diststyle -----------+---------------- inventory | EVEN

DISTKEY テーブルを inv_warehouse_sk に変更してください。SVV_TABLE_INFO ビューは、inv_warehouse_sk 列を結果の分散キーとして示しています。

alter table inventory alter diststyle key distkey inv_warehouse_sk; select "table", "diststyle" from svv_table_info; table | diststyle -----------+----------------------- inventory | KEY(inv_warehouse_sk)

DISTKEY テーブルを inv_item_sk に変更してください。SVV_TABLE_INFO ビューは、inv_item_sk 列を結果の分散キーとして示しています。

alter table inventory alter distkey inv_item_sk; select "table", "diststyle" from svv_table_info; table | diststyle -----------+----------------------- inventory | KEY(inv_item_sk)

テーブルを DISTSTYLE ALL に変更する

次の例では、テーブルを DISTSTYLE ALL に変更する方法を説明します。

EVEN 分散スタイルを指定してテーブルを作成します。SVV_TABLE_INFO ビューは、DISTSTYLE が EVEN であることを示しています。

create table inventory( inv_date_sk int4 not null , inv_item_sk int4 not null , inv_warehouse_sk int4 not null , inv_quantity_on_hand int4 ) diststyle even; Insert into inventory values(1,1,1,1); select "table", "diststyle" from svv_table_info; table | diststyle -----------+---------------- inventory | EVEN

DISTSTYLE テーブルを ALL に変更します。SVV_TABLE_INFO ビューには、変更された DISTSYTLE が表示されます。

alter table inventory alter diststyle all; select "table", "diststyle" from svv_table_info; table | diststyle -----------+---------------- inventory | ALL

テーブルを ENCODE AUTO に変更する

次の例は、テーブルを ENCODE AUTO に変更する方法を示しています。

例えば、テーブルは次のように定義されています。列 c0 はエンコードタイプ AZ64 で定義され、列 c1 はエンコードタイプ LZO で定義されます。

create table t1(c0 int encode AZ64, c1 varchar encode LZO);

このテーブルの場合、次のステートメントはエンコードを AUTO に変更します。

alter table t1 alter encode auto;

次の例は、テーブルを変更して ENCODE AUTO 設定を削除する方法を示しています。

例えば、テーブルは次のように定義されています。テーブルの列は、エンコードなしで定義されます。この場合、エンコードはデフォルトで ENCODE AUTO になります。

create table t2(c0 int, c1 varchar);

このテーブルの場合、次のステートメントは列 c0 のエンコードを LZO に変更します。テーブルのエンコードが ENCODE AUTO に設定されなくなりました。

alter table t2 alter column c0 encode lzo;;