

 Amazon Redshift는 패치 198부터 새 Python UDF 생성을 더 이상 지원하지 않습니다. 기존 Python UDF는 2026년 6월 30일까지 계속 작동합니다. 자세한 내용은 [블로그 게시물](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)을 참조하세요.

# 예제
<a name="r_CREATE_TABLE_examples"></a>

다음 예에서는 Amazon Redshift CREATE TABLE 문에 있는 다양한 열 및 테이블 속성을 보여줍니다. 파라미터 정의를 비롯한 CREATE TABLE에 대한 자세한 내용은 [CREATE TABLE](r_CREATE_TABLE_NEW.md) 섹션을 참조하세요.

대부분의 예제는 *TICKIT* 샘플 데이터 세트의 테이블과 데이터를 사용합니다. 자세한 내용은 [샘플 데이터베이스](https://docs.aws.amazon.com/redshift/latest/dg/c_sampledb.html)를 참조하세요.

 CREATE TABLE 명령에서 데이터베이스 이름 및 스키마 이름을 테이블 이름 앞에 붙일 수 있습니다. 예를 들면 다음과 같습니다. `dev_database.public.sales` 데이터베이스 이름은 연결된 데이터베이스여야 합니다. 다른 데이터베이스에서 데이터베이스 객체를 만들려는 모든 시도는 실패하고 잘못된 작업 오류가 발생합니다.

## 배포 키, 복합 정렬 키 및 압축을 사용하여 테이블 생성
<a name="r_CREATE_TABLE_examples-create-a-table-with-distribution-key"></a>

다음 예에서는 여러 열에 대해 정의된 압축을 사용하여 TICKIT 데이터베이스에서 SALES 테이블을 생성합니다. LISTID는 배포 키로 선언되고, LISTID 및 SELLERID는 다중 열 복합 정렬 키로 선언됩니다. 테이블에 대한 기본 키 및 외래 키 제약 조건 역시 정의됩니다. 제약 조건이 없는 경우 예제에서 테이블을 만들기 전에 외래 키가 참조하는 각 열에 UNIQUE 제약 조건을 추가해야 할 수 있습니다.

```
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);
```

결과는 다음과 같습니다.

```
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
```

다음 예에서는 대/소문자를 구분하지 않는 col1 열이 있는 테이블 t1을 생성합니다.

```
create table T1 (
  col1 Varchar(20) collate case_insensitive
 );
            
insert into T1 values ('bob'), ('john'), ('Tom'), ('JOHN'), ('Bob');
```

테이블을 쿼리합니다.

```
select * from T1 where col1 = 'John';
   
col1
------
 john
 JOHN
(2 rows)
```

## 인터리브 정렬 키를 사용하여 테이블 생성
<a name="CREATE_TABLE_NEW-create-a-table-using-interleaved-sortkey"></a>

다음 예에서는 인터리브 정렬 키를 사용하여 CUSTOMER 테이블을 생성합니다.

```
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를 사용하여 테이블 생성
<a name="CREATE_TABLE_NEW-create-a-table-using-if-not-exists"></a>

 다음은 CITIES 테이블을 생성하거나, 이 스키마가 이미 존재하는 경우에는 아무 것도 하지 않고 메시지를 반환하는 예입니다.

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

## ALL 배포로 테이블 생성
<a name="CREATE_TABLE_NEW-create-a-table-with-all-distribution"></a>

 다음 예에서는 ALL 배포로 VENUE 테이블을 생성합니다.

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

## EVEN 배포로 테이블 생성
<a name="r_CREATE_TABLE_NEW-create-a-table-with-default-even-distribution"></a>

다음 예에서는 3개의 열이 있는, MYEVENT라는 테이블을 생성합니다.

```
create table myevent(
eventid int,
eventname varchar(200),
eventcity varchar(30))
diststyle even;
```

이 테이블은 균등하게 배포되고 정렬되지 않습니다. 테이블에 선언된 DISTKEY 또는 SORTKEY 열이 없습니다.

```
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)
```

## 다른 테이블과 같은 임시 테이블 생성
<a name="r_CREATE_TABLE_NEW-create-a-temporary-table-that-is-like-another-table"></a>

다음 예에서는 EVENT 테이블에서 열을 상속하는, TEMPEVENT라는 임시 테이블을 생성합니다.

```
create temp table tempevent(like event); 
```

이 테이블은 상위 테이블의 DISTKEY 및 SORTKEY 속성도 상속합니다.

```
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 열을 포함한 테이블 생성
<a name="r_CREATE_TABLE_NEW-create-a-table-with-an-identity-column"></a>

다음 예에서는 VENUEID로 명명된 IDENTITY 열을 가진, VENUE\_IDENT라는 테이블을 생성합니다. 이 열은 0으로 시작되고 각 레코드마다 1씩 증가합니다. VENUEID는 테이블의 기본 키로도 선언됩니다.

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

## 기본 IDENTITY 열을 포함한 테이블 생성
<a name="r_CREATE_TABLE_NEW-create-a-table-with-default-identity-column"></a>

다음 예제에서는 `t1`이라는 테이블을 생성합니다. 이 테이블에는 `hist_id`라는 IDENTITY 열과 `base_id`라는 기본 IDENTITY 열이 있습니다.

```
CREATE TABLE t1(
  hist_id BIGINT IDENTITY NOT NULL, /* Cannot be overridden */
  base_id BIGINT GENERATED BY DEFAULT AS IDENTITY NOT NULL, /* Can be overridden */
  business_key varchar(10) ,
  some_field varchar(10)
);
```

테이블에 행을 삽입하면 `hist_id` 및 `base_id` 값이 모두 생성됨을 알 수 있습니다.

```
INSERT INTO T1 (business_key, some_field) values ('A','MM');
```

```
SELECT * FROM t1;

 hist_id | base_id | business_key | some_field
---------+---------+--------------+------------
       1 |       1 | A            | MM
```

두 번째 행을 삽입하면 `base_id`의 기본 값이 생성됨을 알 수 있습니다.

```
INSERT INTO T1 (base_id, business_key, some_field) values (DEFAULT, 'B','MNOP');
```

```
SELECT * FROM t1;

 hist_id | base_id | business_key | some_field
---------+---------+--------------+------------
       1 |       1 | A            | MM
       2 |       2 | B            | MNOP
```

세 번째 행을 삽입하면 `base_id`의 값이 고유할 필요가 없음을 알 수 있습니다.

```
INSERT INTO T1 (base_id, business_key, some_field) values (2,'B','MNNN');
```

```
SELECT * FROM t1;
            
 hist_id | base_id | business_key | some_field
---------+---------+--------------+------------
       1 |       1 | A            | MM
       2 |       2 | B            | MNOP
       3 |       2 | B            | MNNN
```

## DEFAULT 열 값을 포함한 테이블 생성
<a name="r_CREATE_TABLE_NEW-create-a-table-with-default-column-values"></a>

다음 예에서는 각 열에 대한 기본값을 선언하는 CATEGORYDEF 테이블을 생성합니다.

```
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 옵션
<a name="r_CREATE_TABLE_NEW-diststyle-distkey-and-sortkey-options"></a>

다음 예에서는 DISTKEY, SORTKEY 및 DISTSTYLE 옵션의 작동 방식을 보여줍니다. 이 예에서, COL1은 분산 키이므로 분산 스타일이 KEY로 설정되거나 설정되지 않아야 합니다. 기본적으로, 이 테이블에는 정렬 키가 없으므로 테이블이 정렬되지 않습니다.

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

```
select "column", type, encoding, distkey, sortkey
from pg_table_def where tablename = 't1';

column |  type   | encoding | distkey | sortkey
-------+---------+----------+---------+---------
col1   | integer | az64     | t       | 0
col2   | integer | az64     | f       | 0
```

다음 예에서는 동일한 열이 배포 키와 정렬 키로 정의되어 있습니다. 이때도 분산 스타일은 KEY로 설정되거나 설정되지 않아야 합니다.

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

```
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 | az64     | f       | 0
```

다음 예에서는 분산 키로 설정되는 열이 없고 COL2는 정렬 키로 설정되고 분산 스타일은 ALL로 설정됩니다.

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

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

다음 예에서는 배포 키가 EVEN으로 설정되고 정렬 키는 명시적으로 정의되지 않으므로, 테이블이 균등하게 배포되지만 정렬되지 않습니다.

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

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

## ENCODE AUTO 옵션을 사용하여 테이블 생성
<a name="r_CREATE_TABLE_NEW-create-a-table-with-encode-option"></a>

다음 예에서는 자동 압축 인코딩을 사용하여 테이블 `t1`을 생성합니다. 열에 대한 인코딩 형식을 지정하지 않으면 ENCODE AUTO가 기본값입니다.

```
create table t1(c0 int, c1 varchar);
```

다음 예에서는 ENCODE AUTO를 지정하여 자동 압축 인코딩으로 테이블 `t2`를 생성합니다.

```
create table t2(c0 int, c1 varchar) encode auto;
```

다음 예에서는 ENCODE AUTO를 지정하여 자동 압축 인코딩으로 테이블 `t3`를 생성합니다. 열 `c0`은 DELTA의 초기 인코딩 형식으로 정의됩니다. 다른 인코딩이 더 나은 쿼리 성능을 제공하는 경우 Amazon Redshift에서 인코딩을 변경할 수 있습니다.

```
create table t3(c0 int encode delta, c1 varchar) encode auto;
```

다음 예에서는 ENCODE AUTO를 지정하여 자동 압축 인코딩으로 테이블 `t4`를 생성합니다. 열 `c0`은 초기 인코딩 DELTA로 정의되고, 열 `c1`은 LZO의 초기 인코딩으로 정의된다. 다른 인코딩이 더 나은 쿼리 성능을 제공하는 경우 Amazon Redshift에서 이러한 인코딩을 변경할 수 있습니다.

```
create table t4(c0 int encode delta, c1 varchar encode lzo) encode auto;
```