Snowflake를 익히면서,
가장 독특하다고 생각한오브젝트
?개념
?이 바로 Stage이다.왜 사용하는지 이해를 못했기 때문에,
데이터 웨어하우징의 세계에서
여러 소스의 외부 파일을 하나의 임시 혹은 중간 지점에 최초로 로드할 때
이를 Stage라고 한다.
PUT 명령
을 사용하여 파일을Internal Stage
로 Load 합니다.
(SnowSQL 명령)파일을
Table
및Stage
로 Unload 하려면
사용자COPY INTO 명령
을 사용합니다.
@~
각 사용자에게 파일을 저장하라고 자동적으로 할당되는 스테이지
다중 테이블에 적재될 수 있다.
User stage는 변경
하거나 삭제
할 수 없다.
@%<table name>
각 테이블을 생성할 때, Table stage는 사용 가능하다.
다중 사용자에게 공유될 수 있다.
단일 테이블에만 로드할 수 있습니다.
마찬가지로 변경하거나 삭제할 수 없습니다.
@<Stage Name>
CREATE STAGE는 스키마에서 생성된 데이터베이스 개체입니다.
여러 사용자가 준비하고 관리하며 여러 테이블에 로드되는 파일을 저장할 수 있습니다.
보안 액세스 제어 권한을 사용하여 생성, 수정, 삭제 기능을 제어할 수 있습니다.
CREATE 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;
S3와 같이, 외부 지원 클라우드 스토리지와 연결하는 Stage
create stage my_s3_stage
storage_integration = s3_int
url = 's3://mybucket/encrypted_files/’
file_format = my_csv_format;
나의 의문점
이전 실습에서는
해당 부분 개념이 없이, NiFi로 Snowflake Table에 그대로 데이터를 삽입했었다.다른 동작도 그대로 넣으면 되지 않을까? 라는 생각이 머리에 멤돈다.
- Snowflake Internal Stage의 스토리지는 당신에게서
추상화
된다..
유연성을 위해
- 스노우플레이크의 내부 블롭 스토리지(어떤 스토리지든 상관없이)를 사용하거나 자체 스토리지를 사용하여 데이터를 스테이징할 수 있습니다.
- 자체 블롭 스토리지 없이 빠르게 데이터를 테이블에 로드할 수 있습니다.
관리자가 아닌 사용자도 쉽게 사용할 수 있습니다.
- 최종 사용자는
S3
/Azure blob
/GCS
등을 사용하는 방법을 모르더라도 자신의 테이블에 데이터를 로드할 수 있다.- 각 사용자는 홈 디렉토리처럼 자신만의 작은 내부 스테이지 영역을 가진다.
- 또한 각 테이블에는 자신이 넣을 수 있는 자신만의 내부 스테이지가 있습니다.