Snowflake External Table 사용 방법 알아보기

Daniel
Snowflake Korea
Published in
6 min readOct 31, 2022

이번 게시물에서는 Cloud storage에 업로드 된 데이터 파일을 Snowflake에 적재 하지 않고 직접 쿼리 할 수 있는 외부 테이블 (External Table)에 대해 살펴 보겠습니다.

Snowflake 외부 테이블은 Amazon S3, Azure Blob Store, Google Cloud Storage를 외부 스테이지 (External Stage)로 지정하여 데이터를 조회 할 수 있으며, 외부 테이블은 읽기 전용 (Read-only)이기때문에 DML 작업을 수행 할 수는 없습니다.

간단한 데모를 보면, 다음과 같이 Amazon S3 bucket에 CSV 파일 하나가 업로드 되었습니다.

Snowflake 사용자는 빈번하게 사용 할 데이터를 Copy into SQL 문 또는 Snowpipe 기능을 통해 Snowflake 로컬 테이블에 로딩하여 사용합니다. 그러나, 경우에 따라서는 일부 데이터는 Cloud storage에 남겨 두고 조회해야 일도 필요 할 수 있습니다. 그럴려면, 가장 먼저 해당 Cloud storage bucket을 Snowflake의 외부 스테이지로 다음과 같이 지정해야 합니다.

CREATE OR REPLACE STAGE ext_csv_stage
URL = 's3://autorefreshexternalbucket/'
STORAGE_INTEGRATION = s3_int
FILE_FORMAT = demo_db.public.csv_format;

그 다음은, 생성 된 외부 스테이지 오브젝트를 참조하여 외부 테이블을 생성합니다.

CREATE OR REPLACE EXTERNAL TABLE colors
(color_Code varchar(10) as (value:c1::varchar),
color varchar(20) as ( value:c2::varchar),
color_Type varchar(10) as (value:c3::varchar))
WITH LOCATION = @ext_csv_stage
AUTO_REFRESH = true
FILE_FORMAT = csv_format;

이렇게 생성 된 외부 테이블은 Snowflake 로컬 테이블처럼 데이터를 읽을 수 있을 뿐 아니라 다음과 같이 외부 테이블이 참조하는 파일 메타 정보도 확인 할 수 있습니다.

Cloud storage bucket에 새로운 데이터 파일이 지속적으로 추가되는 경우, 외부 테이블은 auto_refresh=true 옵션 설정을 통해 신규 파일이 업로드 되거나, 기존 파일이 삭제 되는 변경 사항을 자동으로 반영합니다. 이 기능이 제대로 작동하기위해서는 해당 Cloud storage bucket에 SQS event notification 설정 추가가 필요합니다. 연동을 해야하는 SQS ARN은 다음 명령어를 통해 확인 할 수 있습니다.

SHOW EXTERNAL TABLES;

Snowflake는 외부 테이블의 대한 메타정보를 확인 할 수 있는 여러 table function을 제공합니다.

External_table_files function은 외부 테이블에 등록 된 Cloud bucket의 파일 리스트를 확인 할 수 습니다.

SELECT * FROM
TABLE(information_schema.External_table_files(‘colors’));

External_table_file_registration function은 외부 테이블의 auto-refresh 기능으로 인해 cloud bucket에 등록 및 추가 된 파일 이력을 확인 할 수 있습니다.

예를 들어, 해당 Cloud bucket에 color_file1.csv 파일 추가하면, bucket에 설정 된 SQS event notification로 인해 해당 파일이 외부 테이블에 자동으로 등록 됩니다.

외부 테이블을 count 해 보면, 추가 등록 된 파일의 데이터가 count 결과에 반영 된 것을 알 수 있습니다.

만약 Cloud bucket에서 기존 파일을 삭제하면, 외부 테이블에서도 해당 파일의 등록이 자동으로 취소 됩니다.

등록이 취소 된 이 후에 외부 테이블을 다시 count 해 보면, 결과 값이 줄어 든 것을 알 수 있습니다.

이 번 게시물에서는 Cloud bucket에 저장 된 데이터 파일을 Snowflake의 외부 테이블로 사용 할 수 있는 방법에 대해 알아 보았습니다. 점점 더 많은 데이터를 클라우드로 옮기는 기업이 계속해서 늘어나고 있음에도 불구하고 여전히 일부 데이터는 다양한 이유로 온프레미스 또는 프라이빗 클라우드에 저장하는 기업들도 많습니다. Snowflake는 얼마전에 on-premise에 저장 된 데이터를 클라우드로 마이그레이션 하지 않고도, 외부 테이블로 액세스 할 수 있는 신규 기능을 현재 private preview로 공개 하였습니다. 해당 기능은 S3 API와 호환되는 스토리지 솔루션 (예: Dell, Pure Storage, MinIO, 기타 등등)을 Snowflake의 외부 스테이지로 지정하여 해당 스토리지에 저장 된 데이터를 외부 테이블로 액세스 할 수 있습니다. 자세한 내용은 다음 문서를 통해 확인 해 보시길 바랍니다.

--

--