CREATE HYBRID TABLE¶
현재/지정된 스키마에 새 하이브리드 테이블을 만들거나 기존 테이블을 대체합니다. 이름, 데이터 타입 그리고 선택적으로 열이 다음과 같은지 여부로 구성된 각각의 열 정의를 사용하여 테이블에 여러 개의 열이 있을 수 있습니다.
NOT NULL 값이 필요한지 여부.
기본값이 있는지, 또는 ID 열인지 여부.
인라인 제약 조건이 있는지 여부.
참고
하이브리드 테이블을 만들 때는 하나 이상의 열에 대한 기본 키 제약 조건을 정의해야 합니다.
다음 CREATE TABLE 베리언트를 사용하여 하이브리드 테이블을 만들 수도 있습니다.
CREATE HYBRID TABLE … AS SELECT(CTAS) (채워진 테이블을 생성하며 CTAS라고도 함)
CREATE HYBRID TABLE … LIKE (기존 하이브리드 테이블의 빈 복사본을 생성함)
표준 Snowflake 테이블에 사용되는 전체 CREATE TABLE 구문은 CREATE TABLE 섹션을 참조하십시오.
팁
하이브리드 테이블을 생성하고 사용하기 전에 지원되지 않는 몇 가지 기능 및 제한 사항 을 숙지해야 합니다.
- 참고 항목:
CREATE INDEX DROP INDEX, SHOW INDEXES, ALTER TABLE , DROP TABLE , SHOW TABLES
구문¶
CREATE [ OR REPLACE ] HYBRID TABLE [ IF NOT EXISTS ] <table_name>
( <col_name> <col_type>
[
{
DEFAULT <expr>
| { AUTOINCREMENT | IDENTITY }
[
{
( <start_num> , <step_num> )
| START <num> INCREMENT <num>
}
]
[ { ORDER | NOORDER } ]
}
]
[ NOT NULL ]
[ inlineConstraint ]
[ COMMENT '<string_literal>' ]
[ , <col_name> <col_type> [ ... ] ]
[ , outoflineConstraint ]
[ , outoflineIndex ]
[ , ... ]
)
[ COMMENT = '<string_literal>' ]
여기서
inlineConstraint ::= [ CONSTRAINT <constraint_name> ] { UNIQUE | PRIMARY KEY | { [ FOREIGN KEY ] REFERENCES <ref_table_name> [ ( <ref_col_name> ) ] } } [ <constraint_properties> ] outoflineConstraint ::= [ CONSTRAINT <constraint_name> ] { UNIQUE [ ( <col_name> [ , <col_name> , ... ] ) ] | PRIMARY KEY [ ( <col_name> [ , <col_name> , ... ] ) ] | [ FOREIGN KEY ] [ ( <col_name> [ , <col_name> , ... ] ) ] REFERENCES <ref_table_name> [ ( <ref_col_name> [ , <ref_col_name> , ... ] ) ] } [ <constraint_properties> ] [ COMMENT '<string_literal>' ] outoflineIndex ::= INDEX <index_name> ( <col_name> [ , <col_name> , ... ] ) [ INCLUDE ( <col_name> [ , <col_name> , ... ] ) ]인라인 및 아웃오브 라인 제약 조건에 대한 자세한 내용은 CREATE | ALTER TABLE … CONSTRAINT 섹션을 참조하십시오.
필수 매개 변수¶
name
테이블의 식별자(즉, 이름)를 지정하며, 테이블이 생성되는 스키마에 대해 고유해야 합니다.
또한, 식별자는 알파벳 문자로 시작해야 하며 전체 식별자 문자열을 큰따옴표(예:
"My object"
)로 묶지 않는 한 공백이나 특수 문자를 포함할 수 없습니다. 큰따옴표로 묶인 식별자도 대/소문자를 구분합니다.자세한 내용은 식별자 요구 사항 섹션을 참조하십시오.
col_name
열 식별자(예: 이름)를 지정합니다. 테이블 식별자에 대한 모든 요구 사항은 열 식별자에도 적용됩니다.
자세한 내용은 식별자 요구 사항 및 예약된 키워드와 제한된 키워드 섹션을 참조하십시오.
참고
표준 예약 키워드 외에, 다음 키워드는 ANSI 표준 컨텍스트 함수용으로 예약되어 있으므로 열 식별자로 사용할 수 없습니다.
CURRENT_DATE
CURRENT_ROLE
CURRENT_TIME
CURRENT_TIMESTAMP
CURRENT_USER
예약된 키워드의 목록은 예약된 키워드와 제한된 키워드 를 참조하십시오.
col_type
열의 데이터 타입을 지정합니다.
테이블 열에 지정할 수 있는 데이터 타입에 대한 자세한 내용은 SQL 데이터 타입 참조 을 참조하십시오.
PRIMARY KEY ( col_name [ , col_name , ... ] )
열 정의 내(인라인) 또는 별도로(아웃오브 라인) 테이블에 필요한 기본 키 제약 조건을 지정합니다. 하이브리드 테이블 제약 조건 도 참조하십시오.
전체 구문 세부 정보는 CREATE | ALTER TABLE … CONSTRAINT 섹션을 참조하십시오. 제약 조건에 대한 일반적인 내용은 제약 조건 섹션을 참조하십시오.
선택적 매개 변수¶
DEFAULT ...
또는 .AUTOINCREMENT ...
INSERT 또는 CREATE HYBRID TABLE AS SELECT 문을 통해 값이 명시적으로 지정되지 않은 경우 기본값이 열에 자동으로 삽입되는지 여부를 지정합니다.
DEFAULT expr
열 기본값은 다음 중 하나일 수 있는 지정된 식으로 정의됩니다.
상수 값.
간단한 식.
시퀀스 참조(
seq_name.NEXTVAL
).
간단한 식은 스칼라 값을 반환하는 식이지만, 이 식은 다음에 대한 참조를 포함할 수 없습니다.
하위 쿼리.
집계.
윈도우 함수.
외부 함수.
{ AUTOINCREMENT | IDENTITY }
.[ { ( start_num , step_num ) | START num INCREMENT num } ]
.[ { ORDER | NOORDER } ]
AUTOINCREMENT
가 사용될 때 열의 기본값은 지정된 숫자로 시작하고 각각의 연속 값은 자동으로 생성됩니다.AUTOINCREMENT
열에서 생성된 값은 고유성이 보장됩니다. 생성된 값 페어 간의 차이는 증분량의 배수가 되도록 보장됩니다.선택적
ORDER
및NOORDER
매개 변수는 생성된 값이 시퀀스 의미 체계 에 지정된 순서 보장을 제공하는지 여부를 지정합니다.NOORDER
는 하이브리드 테이블의AUTOINCREMENT
열에 대한 기본 옵션입니다.NOORDER
는 일반적으로 포인트 쓰기에 훨씬 더 나은 성능을 제공합니다.이러한 매개 변수는 숫자 데이터 타입(NUMBER, INT, FLOAT 등)이 있는 열에만 사용할 수 있습니다.
AUTOINCREMENT
와IDENTITY
는 동의어입니다. 열에 대해 둘 중 하나가 지정될 경우 Snowflake는 열에 대한 값을 생성하는 시퀀스를 활용합니다. 시퀀스에 대한 자세한 내용은 시퀀스 사용하기 을 참조하십시오.시작 및 단계/증분 모두에 대한 기본값은
1
입니다.
기본값: 값 없음(열에 기본값이 없음)
참고
DEFAULT
와AUTOINCREMENT
는 상호 배타적이며 한 열에 하나만 지정할 수 있습니다.성능에 민감한 워크로드의 경우
NOORDER
는AUTOINCREMENT
열에 권장되는 옵션입니다.
CONSTRAINT ...
테이블에서 지정한 열에 대한 인라인 또는 아웃오브 라인 제약 조건을 정의합니다. 하이브리드 테이블 열의 경우 고유 키 제약 조건과 외래 키 제약 조건은 선택 사항입니다. 하이브리드 테이블 제약 조건 도 참조하십시오.
전체 구문 세부 정보는 CREATE | ALTER TABLE … CONSTRAINT 섹션을 참조하십시오. 제약 조건에 대한 일반적인 내용은 제약 조건 섹션을 참조하십시오.
INDEX index_name ( col_name [ , col_name , ... ]
테이블에서 하나 이상의 열에 대한 보조 인덱스를 지정합니다. (하이브리드 테이블 열에 대한 제약 조건을 정의하면 해당 열에 인덱스가 자동으로 생성됩니다.)
각 레코드의 키에 대한 기본 저장소 엔진과 관련된 공간 제약 조건 때문에 반정형 열 (VARIANT, OBJECT, ARRAY)에 인덱스를 정의할 수 없습니다.
지리 공간 열 (GEOGRAPHY, GEOMETRY) 또는 벡터 데이터 타입 (VECTOR)에 대한 인덱스를 정의할 수 없습니다.
테이블 생성 시에 또는 CREATE INDEX 명령을 사용하여 인덱스를 정의할 수 있습니다. 하이브리드 테이블의 인덱스를 만드는 방법에 대한 자세한 내용은 CREATE INDEX 섹션을 참조하십시오.
INCLUDE ( col_name [ , col_name , ... ] )
보조 인덱스에 포함된 열을 하나 이상 지정합니다. 보조 인덱스와 함께 포함된 열을 사용하는 것은 쿼리가 종종 프로젝션 목록에는 열 세트를 포함하지만 조건자 목록에는 포함하지 않는 경우에 특히 유용합니다. INCLUDE 열이 있는 보조 인덱스 만들기 섹션을 참조하십시오.
INCLUDE 열은 반정형 열(VARIANT, OBJECT, ARRAY) 또는 지리 공간 열(GEOGRAPHY, GEOMETRY)이 될 수 없습니다.
보조 인덱스가 있는 테이블이 생성된 경우에만 INCLUDE 열을 지정할 수 있습니다.
COMMENT = 'string_literal'
열, 제약 조건 또는 테이블 수준에서 설명을 지정합니다. 자세한 내용은 제약 조건에 대한 설명 섹션을 참조하십시오.
기본값: 값 없음
사용법 노트¶
하이브리드 테이블을 다시 생성하거나 교체하려면 CREATE OR REPLACE HYBRID TABLE 명령을 실행하기 전에 GET_DDL 함수를 호출하여 하이브리드 테이블의 정의를 확인하십시오.
임시 또는 일시적 하이브리드 테이블을 만들 수 없습니다. 따라서 일시적 스키마 또는 데이터베이스 내에서는 하이브리드 테이블을 만들 수 없습니다.
스키마는 이름이 같은 테이블 및/또는 뷰를 포함할 수 없습니다. 테이블을 만들 때는 다음 사항이 적용됩니다.
스키마에 같은 이름의 뷰가 이미 있는 경우 오류가 반환되고 테이블이 생성되지 않습니다.
같은 이름의 테이블이 스키마에 이미 있는 경우 명령에 선택적인
OR REPLACE
키워드를 포함하지 않는 한 오류가 반환되고 테이블이 생성되지 않습니다.
중요
OR REPLACE
를 사용하는 것은 기존 테이블에서 DROP TABLE 을 사용한 다음 같은 이름을 가진 새 테이블을 만드는 것과 같습니다.drop 및 create 작업은 단일 원자성 작업에서 발생함에 유의하십시오. 이는 CREATE OR REPLACE TABLE 작업과 동시에 수행되는 모든 쿼리가 이전 또는 새 테이블 버전을 사용함을 의미합니다.
테이블을 다시 만들거나 바꾸면 변경 데이터가 삭제됩니다.
예약된 키워드 와 마찬가지로, ANSI로 예약된 함수 이름(CURRENT_DATE, CURRENT_TIMESTAMP 등)을 열 이름으로 사용할 수 없습니다.
메타데이터 관련:
주의
고객은 Snowflake 서비스를 사용할 때 개인 데이터(사용자 오브젝트 제외), 민감한 데이터, 수출 통제 대상 데이터 또는 기타 규제 데이터가 메타데이터로 입력되지 않도록 해야 합니다. 자세한 내용은 Snowflake의 메타데이터 필드 섹션을 참조하십시오.
하이브리드 테이블 제약 조건¶
하이브리드 테이블에 정의된 제약 조건에는 다음 규칙이 적용됩니다.
하이브리드 테이블은 PRIMARY KEY 제약 조건으로 생성해야 합니다.
다중 열(또는 복합) 기본 키가 지원됩니다. 다중 열 기본 키를 정의하려면 다음 예에 표시된 구문을 사용하는데, 여기서 제약 조건은 “아웃오브 라인”으로 정의되고 테이블에 대해 이전에 정의된 다중 열을 참조합니다.
CREATE OR REPLACE HYBRID TABLE ht2pk ( col1 INTEGER NOT NULL, col2 INTEGER NOT NULL, col3 VARCHAR, CONSTRAINT pkey_1 PRIMARY KEY (col1, col2) );
PRIMARY KEY, UNIQUE, FOREIGN KEY 제약 조건은 모두 하이브리드 테이블에 적용되며 이러한 제약 조건에는 NOT ENFORCED 속성을 설정할 수 없습니다.
PRIMARY KEY, UNIQUE, FOREIGN KEY 제약 조건은 자체 기본 인덱스를 구축합니다. 인덱스가 생성되면 추가 데이터가 저장됩니다. 테이블이 생성될 때
outoflineIndex
구문을 사용하여 보조 인덱스(또는 포괄 인덱스)를 명시적으로 정의할 수도 있습니다.제약 조건은 문 또는 트랜잭션 수준이 아닌 행 수준(즉, 지연 제약 조건)에서 적용됩니다.
제약 조건은 테이블 생성 시에만 정의할 수 있습니다.
열을 UNIQUE 로 변경할 수 없습니다.
다음 규칙은 FOREIGN KEY 제약 조건에 특별히 적용됩니다.
기본 키를 참조하는 하이브리드 테이블의 외래 키는 NULL 이 될 수 없습니다. FOREIGN KEY 제약 조건이 있는 열에 NULL 값을 로드하려고 하면 제약 조건 오류와 함께 로드 작업이 실패합니다. 기본 키/외래 키 관계로 두 개의 하이브리드 테이블 만들기 섹션을 참조하십시오.
FOREIGN KEY 제약 조건은 동일한 데이터베이스에 속하는 하이브리드 테이블 사이에서만 지원됩니다.
FOREIGN KEY 관계가 존재하는 한 FOREIGN KEY 제약 조건에서 참조된 테이블은 잘릴 수 없습니다.
FOREIGN KEY 제약 조건은 부분 일치를 지원하지 않습니다.
FOREIGN KEY 제약 조건은 지연 가능한 동작을 지원하지 않습니다.
FOREIGN KEY 제약 조건은 DELETE 및 UPDATE 작업에 대해 RESTRICT 및 NO ACTION 속성 만 지원합니다.
CREATE HYBRID TABLE … AS SELECT(CTAS)¶
쿼리 결과를 포함하는 새 하이브리드 테이블을 생성합니다.
CREATE [ OR REPLACE ] HYBRID TABLE <table_name> [ ( <col_name> [ <col_type> ] , <col_name> [ <col_type> ] , ... ) ] AS <query> [ ... ]참고
CTAS를 사용하여 하이브리드 테이블을 생성하는 경우 열 정의, 기본 키, 인덱스, 기타 제약 조건을 포함하여 테이블 스키마를 명시적으로 정의하십시오. SELECT 문에서 스키마 추론에 의존하지 마십시오.
지정된 열 이름의 개수는 쿼리의 SELECT 목록 항목 개수와 일치해야 합니다.
행이 특정 순서로 나열된 테이블을 만들려면 쿼리 끝에 ORDER BY 절을 사용합니다.
하이브리드 테이블 로딩에 대한 자세한 내용은 데이터 로딩하기 섹션을 참조하십시오.
CREATE HYBRID TABLE … LIKE¶
기존 하이브리드 테이블과 같은 열 정의를 사용하지만, 기존 테이블에서 데이터를 복사하지 않고 새 하이브리드 테이블을 만듭니다.
열 이름, 유형, 기본값, 제약 조건이 새 테이블에 복사됩니다.
CREATE [ OR REPLACE ] HYBRID TABLE <table_name> LIKE <source_hybrid_table> [ ... ]참고
CREATE HYBRID TABLE … LIKE는 원본 테이블 유형으로 다른 하이브리드 테이블만 지원합니다.
데이터 공유를 통해 액세스되는 자동 증분 시퀀스가 있는 테이블에 대한 CREATE HYBRID TABLE … LIKE는 지원되지 않습니다.
예¶
customer_id
를 기본 키로 하고 email
에 대한 고유한 제약 조건과 full_name
에 대한 보조 인덱스를 사용하여 현재 데이터베이스에 하이브리드 테이블을 만듭니다.
CREATE HYBRID TABLE mytable (
customer_id INT AUTOINCREMENT PRIMARY KEY,
full_name VARCHAR(255),
email VARCHAR(255) UNIQUE,
extended_customer_info VARIANT,
INDEX index_full_name (full_name)
);
+-------------------------------------+
| status |
|-------------------------------------|
| Table MYTABLE successfully created. |
+-------------------------------------+
이 테이블에 행을 삽입합니다.
INSERT INTO mytable (customer_id, full_name, email, extended_customer_info)
SELECT 100, 'Jane Doe', 'jdoe@gmail.com',
parse_json('{"address": "1234 Main St", "city": "San Francisco", "state": "CA", "zip":"94110"}');
+-------------------------+
| number of rows inserted |
|-------------------------|
| 1 |
+-------------------------+
기본 키는 고유해야 합니다. 예를 들어, 이전 예의 동일한 기본 키를 두 번째로 삽입하려고 하면 이 명령은 다음 오류와 함께 실패합니다.
200001 (22000): Primary key already exists
이메일 주소는 인라인 UNIQUE 제약 조건도 따라야 합니다. 예를 들어, 동일한 이메일 주소를 가진 두 개의 레코드를 삽입하려고 하면 다음 오류와 함께 문이 실패합니다.
Duplicate key value violates unique constraint "SYS_INDEX_MYTABLE_UNIQUE_EMAIL"
테이블 속성 및 메타데이터를 확인합니다. is_hybrid
열의 값을 참조하십시오.
SHOW TABLES LIKE 'mytable';
+-------------------------------+---------+---------------+-------------+-------+-----------+---------+------------+------+-------+--------+----------------+----------------------+-----------------+---------------------+------------------------------+---------------------------+-------------+
| created_on | name | database_name | schema_name | kind | is_hybrid | comment | cluster_by | rows | bytes | owner | retention_time | automatic_clustering | change_tracking | search_optimization | search_optimization_progress | search_optimization_bytes | is_external |
|-------------------------------+---------+---------------+-------------+-------+-----------+---------+------------+------+-------+--------+----------------+----------------------+-----------------+---------------------+------------------------------+---------------------------+-------------|
| 2022-02-23 23:53:19.707 +0000 | MYTABLE | MYDB | PUBLIC | TABLE | Y | | | NULL | NULL | MYROLE | 10 | OFF | OFF | OFF | NULL | NULL | N |
+-------------------------------+---------+---------------+-------------+-------+-----------+---------+------------+------+-------+--------+----------------+----------------------+-----------------+---------------------+------------------------------+---------------------------+-------------+
모든 하이브리드 테이블의 세부 정보를 확인합니다.
SHOW HYBRID TABLES;
+-------------------------------+---------------------------+---------------+-------------+--------------+--------------+------+-------+---------+
| created_on | name | database_name | schema_name | owner | datastore_id | rows | bytes | comment |
|-------------------------------+---------------------------+---------------+-------------+--------------+--------------+------+-------+---------|
| 2022-02-24 02:07:31.877 +0000 | MYTABLE | DEMO_DB | PUBLIC | ACCOUNTADMIN | 2002 | NULL | NULL | |
+-------------------------------+---------------------------+---------------+-------------+--------------+--------------+------+-------+---------+
테이블의 열에 대한 정보를 표시합니다.
DESCRIBE TABLE mytable;
+-------------------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+
| name | type | kind | null? | default | primary key | unique key | check | expression | comment | policy name |
|-------------------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------|
| CUSTOMER_ID | NUMBER(38,0) | COLUMN | N | NULL | Y | N | NULL | NULL | NULL | NULL |
| FULL_NAME | VARCHAR(256) | COLUMN | Y | NULL | N | N | NULL | NULL | NULL | NULL |
| APPLICATION_STATE | VARIANT | COLUMN | Y | NULL | N | N | NULL | NULL | NULL | NULL |
+-------------------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+
테이블에서 데이터를 선택합니다.
SELECT customer_id, full_name, email, extended_customer_info
FROM mytable
WHERE extended_customer_info['state'] = 'CA';
+-------------+-----------+----------------+------------------------------+
| CUSTOMER_ID | FULL_NAME | EMAIL | EXTENDED_CUSTOMER_INFO |
|-------------+-----------+----------------+------------------------------|
| 100 | Jane Doe | jdoe@gmail.com | { |
| | | | "address": "1234 Main St", |
| | | | "city": "San Francisco", |
| | | | "state": "CA", |
| | | | "zip": "94110" |
| | | | } |
+-------------+-----------+----------------+------------------------------+
기본 키/외래 키 관계로 두 개의 하이브리드 테이블 만들기¶
이 예제에서는 서로 참조하는 두 개의 하이브리드 테이블을 만드는 방법을 보여 줍니다. 첫 번째 테이블인 team
에는 team_id
열에 PRIMARY KEY 제약 조건이 있습니다. 두 번째 테이블인 player
에는 team_id
열에 FOREIGN KEY 제약 조건이 있으며, 이 제약 조건은 team
테이블의 team_id
열을 참조합니다.
CREATE OR REPLACE HYBRID TABLE team
(team_id INT PRIMARY KEY,
team_name VARCHAR(40),
stadium VARCHAR(40));
CREATE OR REPLACE HYBRID TABLE player
(player_id INT PRIMARY KEY,
first_name VARCHAR(40),
last_name VARCHAR(40),
team_id INT,
FOREIGN KEY (team_id) REFERENCES team(team_id));
두 테이블에 일부 행을 삽입하여 참조 무결성이 적용되었는지 확인할 수 있습니다. 또한 외래 키로 정의된 열에 NULL 값이 허용되지 않는지 확인할 수 있습니다.
player
테이블에 대한 첫 번째 삽입은 예상대로 성공합니다. 3
이 team
테이블에 ID 로 존재하지 않기 때문에 두 번째 삽입이 실패합니다. NULL 은 외래 키로 허용되지 않기 때문에 세 번째 삽입이 실패합니다.
INSERT INTO team VALUES (1, 'Bayern Munich', 'Allianz Arena');
INSERT INTO player VALUES (100, 'Harry', 'Kane', 1);
INSERT INTO player VALUES (301, 'Gareth', 'Bale', 3);
200009 (22000): Foreign key constraint "SYS_INDEX_PLAYER_FOREIGN_KEY_TEAM_ID_TEAM_TEAM_ID" was violated.
INSERT INTO player VALUES (200, 'Tommy', 'Atkins', NULL);
200009 (22000): Foreign key constraint "SYS_INDEX_PLAYER_FOREIGN_KEY_TEAM_ID_TEAM_TEAM_ID" was violated.
SELECT * FROM team t, player p WHERE t.team_id=p.team_id;
+---------+---------------+---------------+-----------+------------+-----------+---------+
| TEAM_ID | TEAM_NAME | STADIUM | PLAYER_ID | FIRST_NAME | LAST_NAME | TEAM_ID |
|---------+---------------+---------------+-----------+------------+-----------+---------|
| 1 | Bayern Munich | Allianz Arena | 100 | Harry | Kane | 1 |
+---------+---------------+---------------+-----------+------------+-----------+---------+
이 경우 NULL 의 거부에 대한 가능한 해결 방법은 team
테이블에 0
의 팀 ID 를 사용하여 “더미” 행을 삽입하는 것입니다. 그런 다음 NULL 대신 0
이라는 일치하는 자리 표시자 값을 사용하는 행을 player
테이블에 삽입하면 됩니다. 예:
INSERT INTO team VALUES (0, 'Unknown', 'Unknown');
INSERT INTO player VALUES (200, 'Tommy', 'Atkins', 0);
SELECT * FROM team t, player p WHERE t.team_id=p.team_id;
+---------+---------------+---------------+-----------+------------+-----------+---------+
| TEAM_ID | TEAM_NAME | STADIUM | PLAYER_ID | FIRST_NAME | LAST_NAME | TEAM_ID |
|---------+---------------+---------------+-----------+------------+-----------+---------|
| 1 | Bayern Munich | Allianz Arena | 100 | Harry | Kane | 1 |
| 0 | Unknown | Unknown | 200 | Tommy | Atkins | 0 |
+---------+---------------+---------------+-----------+------------+-----------+---------+
INCLUDE 열이 있는 보조 인덱스 만들기¶
예를 들어, 포괄 인덱스가 있는 employee
테이블을 만듭니다.
CREATE HYBRID TABLE employee (
employee_id INT PRIMARY KEY,
employee_name STRING,
employee_department STRING,
INDEX idx_department (employee_department) INCLUDE (employee_name)
);
다음 행을 삽입합니다.
INSERT INTO employee VALUES
(1, 'John Doe', 'Marketing'),
(2, 'Jane Smith', 'Sales'),
(3, 'Bob Johnson', 'Finance'),
(4, 'Alice Brown', 'Marketing');
다음 쿼리는 포괄 인덱스를 사용합니다.
SELECT employee_name FROM employee WHERE employee_department = 'Marketing';
SELECT employee_name FROM employee WHERE employee_department IN ('Marketing', 'Sales');
두 쿼리 모두 기본 테이블에 대한 조회를 방지함으로써 포괄 인덱스의 이점을 얻습니다. 그러나 인덱스에 포함된 열을 사용하면 추가 열이 보조 인덱스에 저장되므로 저장소 소비가 증가할 수 있습니다.
기본 키 열에 대한 설명이 있는 하이브리드 테이블 만들기¶
기본 키에 대한 열 정의 내에 설명을 포함하는 하이브리드 테이블을 만듭니다.
CREATE OR REPLACE HYBRID TABLE ht1pk
(COL1 NUMBER(38,0) NOT NULL COMMENT 'Primary key',
COL2 NUMBER(38,0) NOT NULL,
COL3 VARCHAR(16777216),
CONSTRAINT PKEY_1 PRIMARY KEY (COL1));
DESCRIBE TABLE ht1pk;
+------+-------------------+--------+-------+---------+-------------+------------+-------+------------+-------------+-------------+----------------+
| name | type | kind | null? | default | primary key | unique key | check | expression | comment | policy name | privacy domain |
|------+-------------------+--------+-------+---------+-------------+------------+-------+------------+-------------+-------------+----------------|
| COL1 | NUMBER(38,0) | COLUMN | N | NULL | Y | N | NULL | NULL | Primary key | NULL | NULL |
| COL2 | NUMBER(38,0) | COLUMN | N | NULL | N | N | NULL | NULL | NULL | NULL | NULL |
| COL3 | VARCHAR(16777216) | COLUMN | Y | NULL | N | N | NULL | NULL | NULL | NULL | NULL |
+------+-------------------+--------+-------+---------+-------------+------------+-------+------------+-------------+-------------+----------------+
이 설명을 CONSTRAINT 절에 넣으면 DESCRIBE TABLE 출력에 설명이 표시되지 않게 됩니다. TABLE_CONSTRAINTS 뷰 를 쿼리하면 제약 조건에 대한 전체 정보를 확인할 수 있습니다.