하이브리드 테이블 만들기¶
이 항목에서는 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 INTO <테이블> 또는 INSERT INTO … SELECT 사용)에서 복사본을 복사하여 하이브리드 테이블에 데이터를 일괄 로드할 수 있습니다.
대량 로딩의 최적화는 테이블이 비어 있는지 여부에 따라 달라집니다. 이 맥락에서 테이블은 행이 로딩되지 않은 경우에만 비어 있는 것으로 간주됩니다. 행이 삭제된 기존 테이블은 비어 있는 것으로 간주되지 않습니다. 방금 생성되었지만 아직 어떤 방식으로도 로딩되지 않았거나 CTAS 로 생성되어 로딩 중인 테이블은 실제로 비어 있는 상태입니다.
하이브리드 테이블이 비어 있는 경우 세 가지 로드 방법(CTAS, COPY, INSERT INTO … SELECT)은 모두 하이브리드 테이블에 데이터를 삽입하기 위한 빠른 실행 모델인 최적화된 대량 로딩을 사용합니다.
현재 하이브리드 테이블이 비어 있지 않은 경우 최적화된 대량 로딩이 사용되지 않습니다. COPY 및 INSERT INTO … SELECT 작업을 사용한 증분 배치 로딩은 여전히 수행할 수 있지만 일반적으로 효율성이 떨어집니다. 분당 약 1백만 개의 기록이 로딩되는 속도를 볼 수 있지만, 이 예상치는 테이블의 구조에 따라 달라집니다(예: 큰 레코드는 로딩 속도가 느립니다). 로딩, 업데이트 및 병합이 너무 오래 걸리고 실패하는 경우 더 작은 데이터 세트로 테스트하거나 이러한 작업을 더 작은 청크로 나누십시오. 최적화된 대량 로딩은 향후 릴리스에서 증분 배치 로딩을 지원하도록 확장될 예정입니다.
대량 로딩 빠른 경로가 사용되었는지 여부는 Snowsight 의 쿼리 프로필에서 Statistics 정보를 확인할 수 있습니다. Number of rows inserted 는 빠른 경로가 사용된 경우 Number of rows bulk loaded 로 참조됩니다. 예를 들어, 이 CTAS 작업은 200,000개의 행을 새 테이블에 대량으로 로딩했습니다.

이후 동일한 테이블에 증분 배치 로딩을 하면 최적화된 대량 로딩이 사용되지 않습니다.
쿼리 프로필에 대한 자세한 내용은 하이브리드 테이블에 대한 쿼리 프로필 분석 및 쿼리 기록으로 쿼리 활동 모니터링하기 섹션을 참조하십시오.
주의
CTAS 명령은 FOREIGN KEY 제약 조건을 지원하지 않습니다. 하이브리드 테이블에 FOREIGN KEY 제약 조건이 필요한 경우 COPY 또는 INSERT INTO … SELECT 를 사용하여 테이블을 로드합니다.
참고
Snowflake 테이블에 데이터를 로드하는 다른 방법(예: Snowpipe)은 현재 지원되지 않습니다.
하이브리드 테이블에 인덱스 추가하기¶
하이브리드 테이블을 생성할 때 키, 인덱스, 제약 조건을 정의할 수 있습니다. 예:
CREATE OR REPLACE HYBRID TABLE target_hybrid_table (
col1 VARCHAR(32) PRIMARY KEY,
col2 NUMBER(38,0) UNIQUE,
col3 NUMBER(38,0),
INDEX index_col3 (col3)
)
AS SELECT col1, col2, col3 FROM source_table);
선택적으로, CREATE INDEX 를 사용하여 기존 하이브리드 테이블에 대한 인덱스를 생성할 수 있습니다. 이 명령을 사용하여 워크로드에 활발하게 사용 중이고 쿼리를 제공하거나 외래 키가 있는 하이브리드 테이블에 인덱스를 추가할 수 있습니다. CREATE INDEX는 작업 중에 테이블을 잠그지 않고 동시에 인덱스를 생성합니다.
그러나 하이브리드 테이블 애플리케이션이 개발 또는 테스트 모드에 있고 테이블의 일부 다운타임이 문제가 되지 않는 경우, 하이브리드 테이블을 다시 만들고 최적화된 대량 로딩을 실행하여 인덱스를 만드는 것이 CREATE INDEX 명령을 사용한 온라인 인덱스 구축보다 더 효율적입니다.
CTAS, COPY, INSERT INTO … SELECT에 대해 최적화된 대량 로딩이 지원되지만, 테이블에 FOREIGN KEY 제약 조건이 있는 경우 CTAS 를 사용할 수 없습니다. 이 예제에서 생성된 두 번째 테이블인 fk_hybrid_table
은 COPY 또는 INSERTINTO … SELECT로 일괄 로딩해야 합니다.
CREATE OR REPLACE HYBRID TABLE ref_hybrid_table (
col1 VARCHAR(32) PRIMARY KEY,
col2 INT UNIQUE);
CREATE OR REPLACE HYBRID TABLE fk_hybrid_table (
col1 VARCHAR(32) PRIMARY KEY,
col2 NUMBER(38,0),
col3 NUMBER(38,0),
FOREIGN KEY (col2) REFERENCES ref_hybrid_table(col2),
INDEX index_col3 (col3)
);
모든 하이브리드 테이블에는 고유한 기본 키가 필요합니다. 하이브리드 테이블의 데이터는 이 기본 키에 따라 정렬됩니다. 기본 키가 아닌 특성에 추가 보조 인덱스를 추가하여 해당 특성을 따라 조회 속도를 높일 수 있습니다. 검사할 레코드 수를 줄이기 위해 =
, >
, >=
, <
, <=
, IN 술어에 인덱스를 활용할 수 있습니다.
주의
보조 인덱스를 추가하려면 하이브리드 테이블에 대한 SELECT 권한이 부여된 역할을 사용해야 합니다. 하이브리드 테이블의 데이터 뷰에 액세스할 수 있지만 테이블 자체에는 액세스할 수 없는 경우 보조 인덱스를 추가할 수 없습니다.
특정 속성 또는 복합 속성 그룹에 대한 조건자를 사용하는 공통적이고 반복되는 쿼리가 있는 경우 해당 속성 또는 속성 그룹에 인덱스를 추가하여 성능을 향상해 보십시오. 그러나 인덱스를 사용할 때는 다음 고려 사항에 유의하십시오.
인덱스에 데이터 하위 세트의 추가 복사본을 저장하면 저장소 소비가 증가합니다.
인덱스가 동기적으로 유지 관리되므로 DML에 오버헤드가 추가됩니다.
로딩 중 인덱스 작성 오류¶
하이브리드 테이블의 열, 특히 많은 수의 열에 인덱스가 작성되는 경우 테이블을 로딩하는 모든 명령(CTAS, COPY 또는 INSERT INTO … SELECT)은 다음과 같은 오류를 반환할 수 있습니다.
The value is too long for index "IDX_HT100_COLS".
이 예제에서 IDX_HT100_COLS
는 생성 중인 테이블의 인덱스 이름입니다.
이 오류는 행 기반 저장소가 레코드당 저장할 수 있는 데이터(및 메타데이터) 크기에 제한을 두기 때문에 발생합니다. 레코드 크기를 줄이려면 큰 열(예: 와이드형 VARCHAR 열)을 인덱스 열로 지정하지 않고 테이블을 생성해 보세요.
열을 직접 인덱싱하는 대신 보조 인덱스에 INCLUDE 열을 사용하여 테이블을 생성해 볼 수도 있습니다. 간단한 예제를 살펴보려면 INCLUDE 열이 있는 보조 인덱스 만들기 섹션을 참조하십시오.