하이브리드 테이블 만들기¶
이 항목에서는 Snowflake에서 하이브리드 테이블 을 만드는 방법에 대한 개요를 제공합니다.
참고
하이브리드 테이블을 생성하려면 세션의 현재 웨어하우스로 지정된 실행 중인 웨어하우스가 있어야 합니다. 하이브리드 테이블을 생성할 때 실행 중인 웨어하우스를 지정하지 않으면 오류가 발생할 수 있습니다. 자세한 내용은 웨어하우스 관련 작업하기 를 참조하십시오.
CREATE HYBRID TABLE 옵션¶
다음 SQL 명령 중 하나를 사용하여 하이브리드 테이블을 생성할 수 있습니다.
CREATE HYBRID TABLE. 이 예제에서는 하이브리드 테이블을 생성하고, 여기에 몇 개의 행을 삽입하고, 행을 삭제하고, 테이블을 쿼리합니다.
CREATE OR REPLACE HYBRID TABLE icecream ( id NUMBER PRIMARY KEY AUTOINCREMENT START 1 INCREMENT 1, col1 VARCHAR NOT NULL, col2 VARCHAR NOT NULL ); INSERT INTO icecream VALUES(1, 'A1', 'B1'); INSERT INTO icecream VALUES(2, 'A2', 'B2'); INSERT INTO icecream VALUES(3, 'A3', 'B3'); INSERT INTO icecream VALUES(4, 'A4', 'B4'); UPDATE icecream SET col2 = 'B3-updated' WHERE id = 3; DELETE FROM icecream WHERE id = 4; SELECT * FROM icecream;
CREATE HYBRID TABLE … AS SELECT(CTAS) 또는 CREATE HYBRID TABLE … LIKE. 예:
CREATE OR REPLACE HYBRID TABLE table1 ( employee_id INT PRIMARY KEY, department_id VARCHAR(200) ) AS SELECT * FROM table2;
데이터 로딩하기¶
참고
하이브리드 테이블의 기본 저장소는 행 저장소이므로 하이브리드 테이블은 일반적으로 표준 테이블보다 저장 공간이 더 큽니다. 이러한 차이점의 주된 이유는 표준 테이블의 열 형식 데이터는 압축률이 더 높은 경우가 많기 때문입니다. 저장소 비용에 대한 자세한 내용은 하이브리드 테이블의 비용 평가 섹션을 참조하십시오.
데이터 스테이지 또는 다른 테이블에서 복사하여(즉, CTAS, COPY, or INSERT INTO … SELECT 사용) 하이브리드 테이블에 데이터를 대량 로드할 수 있지만 반드시 CTAS 문을 사용하여 하이브리드 테이블에 대량으로 데이터를 로드하는 것이 좋습니다. CTAS를 사용한 대량 로딩은 성능에 최적화되어 있으며 대부분의 경우 다른 옵션보다 약 10배 빠르게 대용량 로드(수백만 개의 레코드)를 실행할 수 있도록 활성화합니다.
INSERT 또는 COPY를 통한 대량 로드도 지원되지만 대량 데이터의 경우 데이터 로드 속도가 느려집니다. 대규모 데이터 세트를 로드할 때 대기 시간이 길거나 시간 초과가 발생할 수도 있습니다. 최근 로드된 데이터에 대한 쿼리도 더 느립니다. COPY 등의 DML 문에 대한 대량 로드 최적화가 가까운 미래에 계획되어 있습니다.
주의
CTAS 명령은 외래 키 제약 조건을 지원하지 않습니다. 하이브리드 테이블에서 외래 키 제약 조건을 사용해야 하는 경우 COPY 또는 INSERT INTO … SELECT 등 다른 로드 옵션을 사용합니다.
소스 데이터가 Snowflake 테이블이 아닌 외부 스테이지에 있는 경우 다음 구문을 사용합니다.
CREATE TABLE ... AS SELECT * FROM @stage/data.csv
다음 구문은 사용하지 마십시오:
COPY FROM @stage/data.csv
CTAS 옵션은 보다 효율적인 로딩 메서드입니다.
CTAS를 사용하지 않는 경우 분당 최대 약 1백만 개의 레코드를 로드할 수 있어야 합니다. 그러나 이 근사치는 테이블의 구조(예: 레코드 크기, 레코드가 클수록 로드 속도가 느려지는 경우)에 따라 달라집니다. 로딩 작업이 너무 오래 걸려 실패하는 경우 더 작은 데이터 세트로 테스트하거나 로드를 더 작은 청크로 나눕니다.
하이브리드 테이블의 열, 특히 많은 수의 열에 인덱스가 구축된 경우 테이블을 로드하는 모든 명령(예: CTAS, COPY 또는 INSERT INTO … SELECT)은 다음과 같은 오류를 반환할 수 있습니다.
The value is too long for index "IDX_HT100_COLS".
여기서 IDX_HT100_COLS
는 생성 중인 테이블의 인덱스 이름입니다.
이 오류는 행 기반 저장소가 레코드당 저장할 수 있는 데이터(및 메타데이터) 크기에 제한을 두기 때문에 발생합니다. 레코드 크기를 줄이려면 큰 열(예: 와이드형 VARCHAR 열)을 인덱스 열로 지정하지 않고 테이블을 생성해 보세요.
열을 직접 인덱싱하는 대신 보조 인덱스에 INCLUDE 열을 사용하여 테이블을 생성해 볼 수도 있습니다. 간단한 예제를 살펴보려면 INCLUDE 열이 있는 보조 인덱스 만들기 섹션을 참조하십시오.
참고
Snowflake 테이블에 데이터를 로드하는 다른 방법(예: Snowpipe)은 현재 지원되지 않습니다.
하이브리드 테이블에 인덱스 추가하기¶
하이브리드 테이블을 생성할 때 키, 인덱스, 제약 조건을 정의할 수 있습니다. 예:
CREATE OR REPLACE HYBRID TABLE targethybridtable (
col1 VARCHAR(32) PRIMARY KEY,
col2 NUMBER(38,0) UNIQUE,
col3 NUMBER(38,0),
INDEX index_col3 (col3)
)
AS SELECT col1, col2, col3 FROM sourcetable);
선택적으로, CREATE INDEX 를 사용하여 기존 하이브리드 테이블에 대한 인덱스를 생성할 수 있습니다. 이 명령을 사용하여 워크로드에 활발하게 사용 중이고 쿼리를 제공하거나 외래 키가 있는 하이브리드 테이블에 인덱스를 추가할 수 있습니다. CREATE INDEX는 작업 중에 테이블을 잠그지 않고 동시에 인덱스를 생성합니다.
그러나 하이브리드 테이블 애플리케이션이 개발 또는 테스트 모드에 있고 테이블의 일부 다운타임이 문제가 되지 않는 경우에는 하이브리드 테이블을 다시 생성하고 CTAS 명령 내에서 인덱스를 생성하는 것이 더 효율적입니다. CTAS 명령이 제공하는 대량 로딩 빠른 경로는 CREATE INDEX 명령을 사용한 온라인 인덱스 구축보다 더 효율적입니다.
하이브리드 테이블에는 고유한 기본 키가 필요합니다. 테이블의 데이터는 이 기본 키에 따라 정렬됩니다. 기본 키가 아닌 특성에 추가 보조 인덱스를 추가하여 해당 특성을 따라 조회 속도를 높일 수 있습니다. 검사할 레코드 수를 줄이기 위해 =
, >
, >=
, <
, <=
, IN 술어에 인덱스를 활용할 수 있습니다.
주의
보조 인덱스를 추가하려면 하이브리드 테이블에 대한 SELECT 권한이 부여된 역할을 사용해야 합니다. 하이브리드 테이블의 데이터 뷰에 액세스할 수 있지만 테이블 자체에는 액세스할 수 없는 경우 보조 인덱스를 추가할 수 없습니다.
특정 속성 또는 복합 속성 그룹에 대한 조건자를 사용하는 공통적이고 반복되는 쿼리가 있는 경우 해당 속성 또는 속성 그룹에 인덱스를 추가하여 성능을 향상해 보십시오. 그러나 인덱스를 사용할 때는 다음 고려 사항에 유의하십시오.
인덱스에 데이터 하위 세트의 추가 복사본을 저장하면 저장소 소비가 증가합니다.
인덱스가 동기적으로 유지 관리되므로 DML에 오버헤드가 추가됩니다.