Snowflake SQL Reference
Snowflake 전용 SQL 함수, 데이터 타입, 스테이지 레퍼런스
Snowflake SQL Reference 소개
이 Snowflake SQL 레퍼런스는 표준 ANSI SQL을 넘어서는 Snowflake 전용 SQL 구문을 위한 검색 가능한 치트시트입니다. DDL, DML, 함수, 스트리밍, 공유의 다섯 가지 카테고리로 구성되어 있으며, 기존 데이터 웨어하우스와 Snowflake를 차별화하는 기능에 초점을 맞춥니다: 외부 스테이지, 대량 로딩을 위한 COPY INTO, VARIANT와 FLATTEN을 활용한 반구조 데이터 처리, Time Travel, 제로 코피 클론, Snowpipe 연속 수집, 계정 간 보안 데이터 공유 등이 포함됩니다.
Snowflake의 클라우드 네이티브 아키텍처는 스토리지와 컴퓨트를 분리하여 독립적인 스케일링과 거의 제로에 가까운 유지보수를 가능하게 합니다. 이 아키텍처적 장점은 온프레미스 데이터베이스에는 없는 SQL 기능으로 나타납니다. Time Travel은 AT(TIMESTAMP => ...) 구문으로 보존 기간 내 과거 데이터를 조회할 수 있습니다. CLONE은 기반 데이터를 복제하지 않고 데이터베이스, 스키마, 테이블의 즉각적이고 스토리지 효율적인 복사본을 생성합니다. QUALIFY는 윈도우 함수 결과를 직접 필터링하여 감싸는 서브쿼리가 필요 없게 하며, 일반적인 중복 제거와 랭킹 쿼리를 단순화합니다.
스트리밍과 공유 카테고리는 Snowflake의 실시간 및 협업 기능을 다룹니다. CREATE STREAM은 테이블의 변경 데이터 캡처(CDC) 이벤트를 캡처하고, CREATE TASK는 cron 구문으로 반복 SQL 문을 예약합니다. AUTO_INGEST가 포함된 CREATE PIPE는 Snowpipe를 활성화하여 클라우드 스토리지에 파일이 도착하면 자동으로 로드합니다. CREATE SHARE를 통한 보안 데이터 공유는 데이터를 복사하거나 이동하지 않고 Snowflake 계정 간에 실시간 데이터에 대한 읽기 접근을 부여하여 데이터 마켓플레이스와 파트너 협업 시나리오를 지원합니다.
주요 기능
- 외부 스테이지(S3/GCS/Azure URL로 CREATE STAGE), AT/BEFORE를 이용한 Time Travel 쿼리, UNDROP, 제로 코피 CLONE을 위한 DDL
- 파일 형식 지정(CSV, Parquet, JSON, Avro)으로 스테이지에서 대량 데이터 로딩을 위한 COPY INTO
- WHEN MATCHED / WHEN NOT MATCHED 절을 포함한 UPSERT 작업을 위한 MERGE 문
- 콜론 경로 표기법과 타입 캐스팅을 지원하는 반구조 데이터 처리 — VARIANT, OBJECT, ARRAY 타입
- LATERAL 조인 구문으로 중첩 배열과 객체를 펼치는 FLATTEN
- Snowpipe(AUTO_INGEST가 포함된 CREATE PIPE), 예약 SQL을 위한 CREATE TASK, CDC를 위한 CREATE STREAM
- 서브쿼리 없이 윈도우 함수 결과를 필터링하는 QUALIFY 절 — 중복 제거에 최적
- 보안 데이터 공유(CREATE SHARE)와 이벤트 시퀀스의 행 패턴 인식을 위한 MATCH_RECOGNIZE
자주 묻는 질문
Snowflake SQL은 표준 SQL과 어떻게 다른가요?
Snowflake는 ANSI SQL을 클라우드 네이티브 기능으로 확장합니다. 주요 추가 사항으로 반구조 데이터를 위한 VARIANT 타입, 중첩 구조를 위한 FLATTEN, 윈도우 함수 필터링을 위한 QUALIFY, 과거 쿼리를 위한 Time Travel, 제로 코피 CLONE, 연속 수집을 위한 Snowpipe, 계정 간 데이터 공유를 위한 CREATE SHARE가 있습니다. 표준 SELECT/INSERT/UPDATE/DELETE 구문은 동일합니다.
Snowflake의 Time Travel은 어떻게 작동하나요?
Time Travel은 SELECT 문에서 AT(TIMESTAMP => timestamp) 또는 BEFORE(STATEMENT => query_id) 절을 사용하여 과거 데이터에 접근합니다. 보존 기간은 구성 가능하며(Enterprise 에디션에서 최대 90일) UNDROP을 사용하여 보존 기간 내에 실수로 삭제한 테이블, 스키마, 데이터베이스를 복원할 수도 있습니다.
제로 코피 클론이란 무엇이고 언제 사용해야 하나요?
CREATE TABLE clone CLONE source는 원본과 기반 스토리지를 공유하는 즉각적인 복사본을 생성합니다. 물리적 데이터 복사가 없어 테이블 크기에 관계없이 몇 초 만에 완료되며 데이터가 분기될 때까지 추가 스토리지 비용이 발생하지 않습니다. 개발/테스트 환경 생성, 안전한 실험, 특정 시점 스냅샷에 사용합니다.
JSON 같은 반구조 데이터를 Snowflake에 어떻게 로드하나요?
FILE_FORMAT=(TYPE=JSON)을 지정한 COPY INTO로 JSON 파일을 VARIANT 컬럼에 로드합니다. 중첩 필드는 콜론 경로 표기법으로 쿼리합니다: data:customer:name::STRING. 배열의 경우 LATERAL과 함께 FLATTEN을 사용하여 중첩 요소를 행으로 펼칩니다: SELECT f.value:id FROM table, LATERAL FLATTEN(input => data:items) f.
Task와 Pipe의 차이는 무엇인가요?
Task(CREATE TASK)는 cron 표현식을 사용하여 정의된 간격으로 SQL 문을 예약합니다 — 데이터베이스 수준의 cron 작업과 유사합니다. Pipe(AUTO_INGEST가 포함된 CREATE PIPE)는 연속 데이터 로딩 전용으로 설계되어 클라우드 스토리지 위치를 모니터링하고 새 파일이 도착하면 자동으로 COPY INTO를 실행합니다.
QUALIFY는 윈도우 함수 쿼리를 어떻게 단순화하나요?
QUALIFY는 감싸는 서브쿼리나 CTE 없이 윈도우 함수 결과를 기반으로 행을 직접 필터링합니다. 예를 들어 SELECT * FROM events QUALIFY ROW_NUMBER() OVER(PARTITION BY user_id ORDER BY ts DESC) = 1은 사용자별 최신 이벤트를 단일 쿼리로 반환합니다. 표준 SQL에서는 서브쿼리가 필요한 패턴입니다.
보안 데이터 공유란 무엇이고 데이터가 복사되나요?
보안 데이터 공유(CREATE SHARE)는 계정의 실시간 데이터에 대한 읽기 전용 접근을 다른 Snowflake 계정에 부여합니다. 데이터가 복사, 이동, 전송되지 않으며 소비자는 자체 컴퓨트 리소스를 사용하여 원본 데이터를 직접 쿼리합니다. ETL 파이프라인이나 파일 내보내기 없이 실시간 데이터 협업, 데이터 마켓플레이스 게시, 파트너 접근을 구현할 수 있습니다.
Stream은 변경 데이터 캡처(CDC)를 어떻게 구현하나요?
테이블에 CREATE STREAM을 설정하면 INSERT, UPDATE, DELETE 작업을 추적합니다. 스트림의 각 행에는 METADATA$ACTION(INSERT 또는 DELETE)과 METADATA$ISUPDATE(업데이트인 경우 true) 컬럼이 포함됩니다. DML 문이나 Task에서 스트림 데이터를 소비하면 스트림 오프셋이 전진합니다. 전체 테이블 스캔 없이 증분 데이터 처리를 가능하게 합니다.