[Snowflake] Cloning (Zero-Copy Cloning)

차지예·2026년 6월 12일

Snowflake

목록 보기
46/49
post-thumbnail

1. Cloning이란?

기존 객체의 복사본을 생성하는 작업. 핵심은 metadata-only operation.

  • 실제 데이터를 복사하지 않고 메타데이터(pointer)만 복사 → source와 동일한 micro-partition을 공유
  • 따라서 매우 빠르고, 변경 전까지 추가 저장 비용(storage cost) 없음
  • 데이터가 수정·추가되는 시점부터 새 micro-partition 생성 → 그때부터 비용 발생

💡 포인트: "Cloning은 즉시 storage cost가 드는가?" → No. 변경 시점부터.


2. Cloning Rules (⭐⭐⭐)

#규칙
1Cloned 객체는 source의 권한(privileges)을 상속 안 함. 단, 테이블은 예외 (COPY GRANTS)
2Cloning은 database·schema에 대해 재귀적(recursive)
3External tablesinternal named stages는 clone 안 됨
4Cloned table은 source의 load history를 포함 안 함
5Temporary·Transient table → Permanent로 clone 불가 (temp/transient로만 가능)

🔴 이 5개가 Cloning 파트 중요 각 규칙은 아래에서 상세 정리.


3. "Clone 안 되는 것" (⭐⭐)

목록 암기보다 예외가 시험에 나온다.

❌ 절대 clone 안 됨

  • External tables ← 가장 빈출
  • Internal named stages (기본 동작 기준)

⚠️ 조건부 clone

객체조건
PIPESexternal stage(S3·GCS·Azure) 참조 pipe만 clone / internal stage 참조 pipe는 ❌
Hybrid tablesdatabase clone 시 가능, schema clone 시 불가
Iceberg tablesSnowflake-managed 테이블만 가능

🔄 변환 제약

  • Temp/Transient → Permanent 변환 clone 불가

💡 포인트: "internal stage를 참조하는 pipe는 clone되는가?" → No

복제된 pipe의 기본 상태 (지엽적이지만 출제 이력 있음)

  • AUTO_INGEST = FALSEpaused
  • AUTO_INGEST = TRUESTOPPED_CLONED

4. 권한(Privileges) 상속 (⭐⭐)

대상권한 상속
일반 객체❌ (상속 안 함)
Table (COPY GRANTS 사용 시)✅ OWNERSHIP 제외하고 상속
DB/Schema clone 시 자식 객체✅ 자식의 grant는 유지
DB/Schema 컨테이너 자체❌ 컨테이너에 걸린 grant는 상속 안 함

💡 포인트: 권한 상속의 예외는 테이블(COPY GRANTS). 그 외엔 새로 GRANT 필요.


5. Cloning With Time Travel (⭐)

retention period 내 특정 시점의 객체를 clone (DB·Schema·non-temporary table·stream 등).

TIMESTAMP 지정

CREATE TABLE MY_TABLE_CLONE CLONE MY_TABLE
  AT (TIMESTAMP => TO_TIMESTAMP('2022-01-01'));

OFFSET 지정 (초 단위, 음수=과거)

CREATE TABLE MY_TABLE_CLONE CLONE MY_TABLE
  AT (OFFSET => -60*30);   -- 1800초 = 30분 전

⚠️ 에러 조건 (출제 포인트)

  • 지정 시점에 source 객체가 존재하지 않았으면 → 에러
  • 자식 객체의 historical data가 retention 초과로 purge됐으면 → DB/Schema clone 실패
    • 해결: IGNORE TABLES WITH INSUFFICIENT DATA RETENTION 파라미터로 skip

💡 포인트: OFFSET => -60*30 해석 = 30분 전. 음수가 과거 방향.


6. 기본 SQL 문법

-- 공통 패턴: CREATE <object> <new> CLONE <source>;
CREATE TABLE MY_TABLE_CLONE CLONE MY_TABLE;
CREATE DATABASE MY_DB_CLONE CLONE MY_DB;        -- 재귀적
CREATE SCHEMA  MY_SC_CLONE CLONE MY_SCHEMA;     -- 재귀적

기존 CREATE 문에 CLONE 키워드만 추가한 변형.


한 줄 요약

"Cloning = 메타데이터만 복사(빠름·공짜), 변경분만 새 micro-partition.
권한은 테이블만 상속(COPY GRANTS), DB/Schema는 재귀,
External table·Internal named stage는 clone ❌,
Temp/Transient는 Permanent로 ❌, load history 안 따라옴."

🔑 핵심 두문자

  • clone 안 되는 것"외부테이블·내부명명스테이지"
  • 권한 상속 예외"테이블만 챙긴다 (COPY GRANTS)"
  • 재귀 대상"DB·스키마"
  • PIPES"바깥(external) 보는 파이프만 산다"

0개의 댓글