Snowflake Stage

CHAN LIM·2023년 12월 28일
0

Snowflake

목록 보기
3/18

Snowflake Stage

Snowflake를 익히면서,
가장 독특하다고 생각한 오브젝트? 개념?이 바로 Stage이다.

왜 사용하는지 이해를 못했기 때문에,


Stage?

데이터 웨어하우징의 세계에서
여러 소스의 외부 파일을 하나의 임시 혹은 중간 지점에 최초로 로드할 때
이를 Stage라고 한다.

  • 기본적으로 Snowflake의 각 사용자와 테이블에는 로드할 데이터 파일을 스테이징하기 위한 Internal Stage가 자동으로 할당된다.
  • 내부 스테이지
    • User stage : @~
    • Table stage : @%[Table Name]
    • Named stage : @[Stage Name]
  • 외부 스테이지
    • 보통 클라우드 서비스의 스토리지를 위함이다.

공통 사안

PUT 명령을 사용하여 파일을 Internal Stage로 Load 합니다.
(SnowSQL 명령)

파일을 TableStage로 Unload 하려면
사용자 COPY INTO 명령을 사용합니다.


User Stage

@~

  • 각 사용자에게 파일을 저장하라고 자동적으로 할당되는 스테이지

    • 사용자에게 Private하게 제공된다.
  • 다중 테이블에 적재될 수 있다.

  • User stage는 변경하거나 삭제할 수 없다.


Table Stage

@%<table name>

  • 각 테이블을 생성할 때, Table stage는 사용 가능하다.

  • 다중 사용자에게 공유될 수 있다.

    • 테이블에 소유권 권한이 있다면,
  • 단일 테이블에만 로드할 수 있습니다.

  • 마찬가지로 변경하거나 삭제할 수 없습니다.


Named Stage

@<Stage Name>

  • CREATE STAGE는 스키마에서 생성된 데이터베이스 개체입니다.

  • 여러 사용자가 준비하고 관리하며 여러 테이블에 로드되는 파일을 저장할 수 있습니다.

  • 보안 액세스 제어 권한을 사용하여 생성, 수정, 삭제 기능을 제어할 수 있습니다.

  • CREATE STAGE 명령을 사용하여 스테이지를 만듭니다.


Internal Stage 사용법

PUT file://<path_to_file>/<filename> internalStage
	[ PARALLEL = <internal> ]
    [ AUTO_COMPRESS = TRUE | FALSE ]
    [ SOURCE_COMPRESSION = AUTO_DETECT | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE ]
    [ OVERWRITE = TRUE | FALSE ]
    
# Where? 

internalStage :=
	@[<namespace>.]<int_stage_name>[/<path>]
  | @[<namespace>.]%<table_name>[/<path>]
  | @~[</path>]

사용 예

put file:///data/data.csv @~/staged;

External Stage

S3와 같이, 외부 지원 클라우드 스토리지와 연결하는 Stage

create stage my_s3_stage
storage_integration = s3_int
url = 's3://mybucket/encrypted_files/’
file_format = my_csv_format;

왜 사용할까?

나의 의문점

  • 이전 실습에서는
    해당 부분 개념이 없이, NiFi로 Snowflake Table에 그대로 데이터를 삽입했었다.

  • 다른 동작도 그대로 넣으면 되지 않을까? 라는 생각이 머리에 멤돈다.

  • 다음은 조사한 Stage의 사용 이유
  • Snowflake Internal Stage의 스토리지는 당신에게서 추상화된다..
  • 유연성을 위해

    • 스노우플레이크의 내부 블롭 스토리지(어떤 스토리지든 상관없이)를 사용하거나 자체 스토리지를 사용하여 데이터를 스테이징할 수 있습니다.
  • 자체 블롭 스토리지 없이 빠르게 데이터를 테이블에 로드할 수 있습니다.
  • 관리자가 아닌 사용자도 쉽게 사용할 수 있습니다.

    • 최종 사용자는 S3/Azure blob/GCS 등을 사용하는 방법을 모르더라도 자신의 테이블에 데이터를 로드할 수 있다.
    • 각 사용자는 홈 디렉토리처럼 자신만의 작은 내부 스테이지 영역을 가진다.
      • 또한 각 테이블에는 자신이 넣을 수 있는 자신만의 내부 스테이지가 있습니다.
profile
클라우드, 데이터, DevOps 엔지니어 지향 || 글보단 사진 지향

0개의 댓글