メニュー
Amazon Redshift
データベース開発者ガイド (API Version 2012-12-01)

次の例は、Amazon Redshift CREATE TABLE ステートメントのさまざまな列とテーブルの属性を示しています。

分散キー、複合ソートキー、圧縮を使用してテーブルを作成する

次の例では、複数の列に圧縮が定義された SALES テーブルを TICKIT データベースに作成します。LISTID は分散キーとして宣言され、LISTID と SELLERID は複数列の複合ソートキーとして宣言されています。このテーブルでは、プライマリキーと外部キーの制約も定義されています。

Copy
create table sales( salesid integer not null, listid integer not null, sellerid integer not null, buyerid integer not null, eventid integer not null encode mostly16, dateid smallint not null, qtysold smallint not null encode mostly8, pricepaid decimal(8,2) encode delta32k, commission decimal(8,2) encode delta32k, saletime timestamp, primary key(salesid), foreign key(listid) references listing(listid), foreign key(sellerid) references users(userid), foreign key(buyerid) references users(userid), foreign key(dateid) references date(dateid)) distkey(listid) compound sortkey(listid,sellerid);

結果は次のようになります。

Copy
schemaname | tablename | column | type | encoding | distkey | sortkey | notnull -----------+-----------+------------+-----------------------------+----------+---------+---------+-------- public | sales | salesid | integer | lzo | false | 0 | true public | sales | listid | integer | none | true | 1 | true public | sales | sellerid | integer | none | false | 2 | true public | sales | buyerid | integer | lzo | false | 0 | true public | sales | eventid | integer | mostly16 | false | 0 | true public | sales | dateid | smallint | lzo | false | 0 | true public | sales | qtysold | smallint | mostly8 | false | 0 | true public | sales | pricepaid | numeric(8,2) | delta32k | false | 0 | false public | sales | commission | numeric(8,2) | delta32k | false | 0 | false public | sales | saletime | timestamp without time zone | lzo | false | 0 | false

インターリーブソートキーを使用してテーブルを作成する

次の例では、インターリーブソートキーを使用してCUSTOMERテーブルを作成しています。

Copy
create table customer_interleaved ( c_custkey integer not null, c_name varchar(25) not null, c_address varchar(25) not null, c_city varchar(10) not null, c_nation varchar(15) not null, c_region varchar(12) not null, c_phone varchar(15) not null, c_mktsegment varchar(10) not null) diststyle all interleaved sortkey (c_custkey, c_city, c_mktsegment);

IF NOT EXISTS を使用したテーブルの作成

次の例では、CITIES テーブルを作成します。そのテーブルが既に存在する場合は、何もしないでメッセージを返します。

Copy
create table if not exists cities( cityid integer not null, city varchar(100) not null, state char(2) not null);

ALL 分散を指定したテーブルの作成

次の例では、ALL 分散を指定して VENUE テーブルを作成します。

Copy
create table venue( venueid smallint not null, venuename varchar(100), venuecity varchar(30), venuestate char(2), venueseats integer, primary key(venueid)) diststyle all;

デフォルトの EVEN 分散を指定したテーブルの作成

次の例では、3 つの列を持つ MYEVENT というテーブルを作成します。

Copy
create table myevent( eventid int, eventname varchar(200), eventcity varchar(30));
デフォルトで、テーブルは均等に分散され、ソートされません。このテーブルに DISTKEY 列または SORTKEY 列は宣言されません。
Copy
select "column", type, encoding, distkey, sortkey from pg_table_def where tablename = 'myevent'; column | type | encoding | distkey | sortkey -----------+------------------------+----------+---------+--------- eventid | integer | lzo | f | 0 eventname | character varying(200) | lzo | f | 0 eventcity | character varying(30) | lzo | f | 0 (3 rows)

別のテーブルの LIKE である一時テーブルの作成

次の例では、TEMPEVENT という一時テーブルを作成します。このテーブルは EVENT テーブルの列を継承します。

Copy
create temp table tempevent(like event);
また、このテーブルは、親テーブルの DISTKEY 属性と SORTKEY 属性も継承します。
Copy
select "column", type, encoding, distkey, sortkey from pg_table_def where tablename = 'tempevent'; column | type | encoding | distkey | sortkey -----------+-----------------------------+----------+---------+--------- eventid | integer | none | t | 1 venueid | smallint | none | f | 0 catid | smallint | none | f | 0 dateid | smallint | none | f | 0 eventname | character varying(200) | lzo | f | 0 starttime | timestamp without time zone | bytedict | f | 0 (6 rows)

IDENTITY 列があるテーブルの作成

次の例では、VENUE_IDENT というテーブルを作成します。このテーブルには、VENUEID という IDENTITY 列があります。この列は 0 から始まり、レコードごとに 1 ずつ増分します。VENUEID は、テーブルのプライマリキーとしても宣言されています。

Copy
create table venue_ident(venueid bigint identity(0, 1), venuename varchar(100), venuecity varchar(30), venuestate char(2), venueseats integer, primary key(venueid));

DEFAULT 列値を指定したテーブルの作成

次の例では、各列のデフォルト値を宣言した CATEGORYDEF テーブルを作成します。

Copy
create table categorydef( catid smallint not null default 0, catgroup varchar(10) default 'Special', catname varchar(10) default 'Other', catdesc varchar(50) default 'Special events', primary key(catid)); insert into categorydef values(default,default,default,default); select * from categorydef; catid | catgroup | catname | catdesc -------+----------+---------+---------------- 0 | Special | Other | Special events (1 row)

DISTSTYLE、DISTKEY、SORTKEY オプション

次の例は、DISTKEY、SORTKEY、DISTSTYLE オプションがどのように機能するかを示しています。この例で、COL1 は分散キーであるため、分散スタイルを KEY に設定するか、何も設定しない必要があります。デフォルトで、テーブルにはソートキーがないため、ソートされません。

Copy
create table t1(col1 int distkey, col2 int) diststyle key;

結果は次のようになります。

Copy
select "column", type, encoding, distkey, sortkey from pg_table_def where tablename = 't1'; column | type | encoding | distkey | sortkey -------+---------+----------+---------+--------- col1 | integer | lzo | t | 0 col2 | integer | lzo | f | 0

次の例では、同じ列が分散キーおよびソートキーとして定義されています。ここでも、分散スタイルを KEY に設定するか、何も設定しない必要があります。

Copy
create table t2(col1 int distkey sortkey, col2 int);

結果は次のようになります。

Copy
select "column", type, encoding, distkey, sortkey from pg_table_def where tablename = 't2'; column | type | encoding | distkey | sortkey -------+---------+----------+---------+--------- col1 | integer | none | t | 1 col2 | integer | lzo | f | 0

次の例では、分散キーに設定されている列はありません。また、COL2 はソートキーに設定され、分散スタイルは ALL に設定されています。

Copy
create table t3(col1 int, col2 int sortkey) diststyle all;

結果は次のようになります。

Copy
select "column", type, encoding, distkey, sortkey from pg_table_def where tablename = 't3'; Column | Type | Encoding | DistKey | SortKey -------+---------+----------+---------+-------- col1 | integer | lzo | f | 0 col2 | integer | none | f | 1

次の例では、分散スタイルは EVEN に設定され、ソートキーは明示的に定義されていません。そのため、テーブルは均等に分散されますが、ソートされません。

Copy
create table t4(col1 int, col2 int) diststyle even;

結果は次のようになります。

Copy
select "column", type, encoding, distkey, sortkey from pg_table_def where tablename = 't4'; column | type | encoding | distkey | sortkey --------+---------+---------+---------+-------- col1 | integer | lzo | f | 0 col2 | integer | lzo | f | 0