하이브리드 테이블 만들기

이 항목에서는 Snowflake에서 하이브리드 테이블 을 만드는 방법에 대한 개요를 제공합니다.

참고

하이브리드 테이블을 생성하려면 세션의 현재 웨어하우스로 지정된 실행 중인 웨어하우스가 있어야 합니다. 하이브리드 테이블을 생성할 때 실행 중인 웨어하우스를 지정하지 않으면 오류가 발생할 수 있습니다. 자세한 내용은 웨어하우스 관련 작업하기 를 참조하십시오.

CREATE HYBRID TABLE 옵션

다음 방법 중 하나를 사용하여 하이브리드 테이블을 생성할 수 있습니다.

  • CREATE HYBRID TABLE. 다음 예제에서는 PRIMARY KEY 제약 조건이 있는 하이브리드 테이블을 생성하고, 일부 행을 삽입하고, 행을 삭제하고, 테이블을 쿼리합니다.

    CREATE OR REPLACE HYBRID TABLE application_log (
      id NUMBER PRIMARY KEY AUTOINCREMENT,
      col1 VARCHAR(20),
      col2 VARCHAR(20) NOT NULL
      );
    
    INSERT INTO application_log (col1, col2) VALUES ('A1', 'B1');
    INSERT INTO application_log (col1, col2) VALUES ('A2', 'B2');
    INSERT INTO application_log (col1, col2) VALUES ('A3', 'B3');
    INSERT INTO application_log (col1, col2) VALUES ('A4', 'B4');
    
    SELECT * FROM application_log;
    
    UPDATE application_log SET col2 = 'B3-updated' WHERE id = 3;
    
    DELETE FROM application_log WHERE id = 4;
    
    SELECT * FROM application_log;
    
    Copy
  • CREATE HYBRID TABLE … AS SELECT(CTAS) 또는 CREATE HYBRID TABLE … LIKE. 예:

    CREATE OR REPLACE HYBRID TABLE dept_employees (
      employee_id INT PRIMARY KEY,
      department_id VARCHAR(200)
      )
    AS SELECT employee_id, department_id FROM company_employees;
    
    Copy

데이터 로딩하기

참고

하이브리드 테이블의 기본 저장소는 행 저장소이므로 하이브리드 테이블은 일반적으로 표준 테이블보다 저장 공간이 더 큽니다. 이러한 차이점의 주된 이유는 표준 테이블의 열 형식 데이터는 압축률이 더 높은 경우가 많기 때문입니다. 저장소 비용에 대한 자세한 내용은 하이브리드 테이블의 비용 평가 섹션을 참조하십시오.

대량 로딩 최적화

데이터 스테이지 또는 다른 테이블(CTAS, COPY INTO <테이블> 또는 INSERT INTO … SELECT 사용)에서 복사본을 복사하여 하이브리드 테이블에 데이터를 일괄 로드할 수 있습니다.

대량 로딩의 최적화는 테이블이 레코드가 로딩된 적이 없이 새로 생성되었는지, 아니면 CTAS 쿼리를 사용하여 생성되었는지에 따라 달라집니다.

하이브리드 테이블이 비어 있는 경우 3가지 로딩 방법(CTAS, COPY 및 INSERT INTO … SELECT)은 모두 최적화된 대량 로딩을 사용하여 로딩 프로세스의 속도를 높입니다. 테이블이 로딩되면 일반적인 INSERT 성능이 적용됩니다. COPY 및 INSERT INTO … SELECT 작업을 사용하여 증분 배치 로딩을 계속 실행할 수 있지만 일반적으로 효율성이 떨어집니다. 분당 약 100만 개의 레코드를 대량으로 로드하는 속도가 일반적이지만 테이블의 구조에 따라 크게 달라질 수 있습니다(예: 레코드가 클수록 로딩 속도가 느립니다). 최적화된 대량 로딩은 향후 릴리스에서 증분 배치 로딩을 지원하도록 확장될 예정입니다.

Snowsight 쿼리 프로필에서 Statistics 정보를 확인하여 대량 로딩 빠른 경로가 사용되었는지 확인할 수 있습니다. Number of rows inserted 빠른 경로가 사용되는 경우 Number of rows bulk loaded 로 참조됩니다. 예를 들어, 이 CTAS 작업은 200,000개의 행을 새 테이블에 대량으로 로딩했습니다.

최적화된 대량 로딩을 사용하는 CTAS 쿼리 프로필

이후 동일한 테이블에 증분 배치 로딩을 하면 최적화된 대량 로딩이 사용되지 않습니다.

쿼리 프로필에 대한 자세한 내용은 하이브리드 테이블에 대한 쿼리 프로필 분석쿼리 기록으로 쿼리 활동 모니터링하기 섹션을 참조하십시오.

주의

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;
Copy

선택적으로, CREATE INDEX 를 사용하여 기존 하이브리드 테이블에 대한 인덱스를 생성할 수 있습니다. 이 명령을 사용하여 워크로드에 활발하게 사용 중이고 쿼리를 제공하거나 외래 키가 있는 하이브리드 테이블에 인덱스를 추가할 수 있습니다. CREATE INDEX는 작업 중에 테이블을 잠그지 않고 동시에 인덱스를 생성합니다.

참고

SHOW INDEXES 명령으로 인덱스 빌드 상태를 확인합니다. 한 번에 1개의 인덱스 빌드만 지원됩니다.

그러나 하이브리드 테이블 애플리케이션이 개발 또는 테스트 모드에 있고 테이블의 일부 다운타임이 문제가 되지 않는 경우, 하이브리드 테이블을 다시 만들고 최적화된 대량 로딩을 실행하여 인덱스를 만드는 것이 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 NUMBER(38,0) 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)
);
Copy

모든 하이브리드 테이블에는 고유한 기본 키가 필요합니다. 하이브리드 테이블의 데이터는 이 기본 키에 따라 정렬됩니다. 기본이 아닌 키 특성에 대한 보조 인덱스를 추가로 생성하여 해당 특성을 따라 조회 속도를 높일 수 있습니다. 인덱스는 쿼리 조건자가 다음 조건 중 하나를 사용할 때 스캔하는 레코드의 수를 줄일 수 있습니다.

주의

보조 인덱스를 추가하려면 하이브리드 테이블에 대한 SELECT 권한이 부여된 역할을 사용해야 합니다. 하이브리드 테이블의 데이터 뷰에 액세스할 수 있지만 테이블 자체에는 액세스할 수 없는 경우 보조 인덱스를 추가할 수 없습니다.

특정 속성 또는 복합 속성 그룹에 대한 조건자를 사용하는 공통적이고 반복되는 쿼리가 있는 경우 해당 속성 또는 속성 그룹에 인덱스를 추가하여 성능을 향상해 보십시오. 인덱스를 사용할 때는 다음 고려 사항에 유의하십시오.

  • 인덱스에 데이터 하위 세트의 추가 복사본을 저장하면 저장소 소비가 증가합니다.

  • 인덱스가 동기적으로 유지 관리되므로 DML에 오버헤드가 추가됩니다.

로딩 중 인덱스 작성 오류

인덱스 크기는 너비가 제한되어 있습니다. 하이브리드 테이블의 열, 특히 많은 수의 열에 인덱스가 구축된 경우 테이블을 로드하는 모든 명령(예: CTAS, COPY 또는 INSERT INTO … SELECT)은 다음과 같은 오류를 반환할 수 있습니다. 이 경우 테이블에는 IDX_HT100_COLS 라는 인덱스가 포함됩니다.

The value is too long for index "IDX_HT100_COLS".

이 오류는 행 기반 저장소가 레코드당 저장할 수 있는 데이터(및 메타데이터) 크기에 제한을 두기 때문에 발생합니다. 레코드 크기를 줄이려면 큰 열(예: 와이드형 VARCHAR 열)을 인덱스 열로 지정하지 않고 테이블을 생성해 보세요. 더 적은 수의 열에 인덱스를 생성해 볼 수도 있습니다.

테이블을 생성할 때 보조 인덱스에 INCLUDE 열을 사용해 볼 수도 있습니다. 간단한 예제를 살펴보려면 INCLUDE 열이 있는 보조 인덱스 만들기 섹션을 참조하십시오. (INCLUDE 열은 하이브리드 테이블을 생성할 때 지원되지만, CREATE INDEX 명령으로 인덱스를 생성할 때는 지원되지 않습니다.)