로컬 파일용 내부 스테이지 선택
로컬 파일용 내부 스테이지 선택
스테이지는 데이터 파일이 저장(즉, "스테이징")되어 파일의 데이터를 테이블에 로드할 수 있게 해주는 위치를 지정해요.
출처: Documentation
본문
내부 스테이지의 유형
Snowflake는 다음 유형의 내부 스테이지를 지원해요.
- 사용자(User)
- 테이블(Table)
- 이름이 있는(Named)
기본적으로 Snowflake의 각 사용자와 테이블에는 로드할 데이터 파일을 스테이징하기 위한 내부 스테이지가 자동으로 할당돼요. 또한 이름이 있는 내부 스테이지를 만들 수 있어요.
데이터 로드 프로세스의 두 단계 모두에서 파일 스테이징 정보가 필요해요.
- 파일을 Snowflake에 업로드할 때 PUT 명령에 내부 스테이지를 지정해야 해요.
- 스테이징된 파일에서 테이블로 데이터를 로드할 때 COPY INTO <table> 명령에 같은 스테이지를 지정해야 해요.
특정 데이터 파일에 가장 좋은 스테이지 유형을 고려해요. 각 옵션은 장점과 잠재적 단점을 제공해요.
사용자 스테이지
각 사용자에게는 파일 저장용 Snowflake 스테이지가 기본적으로 할당돼요. 이 스테이지는 파일이 단일 사용자만 접근하지만 여러 테이블에 복사해야 할 때 편리한 옵션이에요.
사용자 스테이지에는 다음 특성과 제한 사항이 있어요.
- 사용자 스테이지는
@~로 참조돼요. 예:LIST @~를 사용해 사용자 스테이지의 파일을 나열해요. - 이름이 있는 스테이지와 달리 사용자 스테이지는 변경하거나 삭제할 수 없어요.
- 사용자 스테이지는 파일 형식 옵션 설정을 지원하지 않아요. 대신 COPY INTO <table> 명령의 일부로 파일 형식과 복사 옵션을 지정해야 해요.
이 옵션은 다음과 같은 경우에 적합하지 않아요.
- 여러 사용자가 파일에 접근해야 하는 경우.
- 현재 사용자가 데이터가 로드될 테이블에 INSERT 권한이 없는 경우.
테이블 스테이지
참고 — Snowflake의 Apache Iceberg™ 테이블은 테이블 스테이지를 지원하지 않아요.
기본적으로 각 테이블에는 파일 저장용 Snowflake 스테이지가 할당돼요. 이 스테이지를 테이블 스테이지라고 해요.
파일을 단일 테이블에만 복사하면 되지만 여러 사용자가 파일에 접근할 수 있게 하려면 테이블 스테이지를 사용할 수 있어요.
테이블 스테이지에는 다음 특성과 제한 사항이 있어요.
- 테이블 스테이지는 테이블과 같은 이름을 가져요. 예를 들어
mytable이라는 테이블에는@%mytable로 참조되는 스테이지가 있어요. - 테이블 스테이지는 테이블 객체에 묶인 암시적 스테이지예요. 별도의 데이터베이스 객체가 아니에요. 그 결과 테이블 스테이지에는 자체적으로 부여 가능한 권한이 없어요. 또한 파일 데이터를 여러 테이블에 복사해야 한다면 테이블 스테이지는 적합하지 않아요.
- 테이블 스테이지에 파일을 스테이징하거나, 파일을 나열하거나, 파일을 조회하거나, 파일을 삭제하려면 테이블 소유자(테이블에 OWNERSHIP 권한이 있는 역할)여야 해요.
- 이름이 있는 스테이지와 달리 테이블 스테이지는 변경하거나 삭제할 수 없어요.
- 테이블 스테이지는 로드 중 데이터 변환(COPY 명령의 원본으로 쿼리 사용)을 지원하지 않아요.
이름이 있는 스테이지
이름이 있는 스테이지는 데이터 로드에 가장 큰 유연성을 제공하는 데이터베이스 객체예요.
- 스테이지에 적절한 권한이 있는 사용자는 어떤 테이블에든 데이터를 로드할 수 있어요.
- 스테이지가 데이터베이스 객체이므로 모든 객체에 적용되는 보안/액세스 규칙이 적용돼요. 스테이지 사용 권한은 역할에 부여하거나 취소할 수 있어요. 또한 스테이지의 소유권을 다른 역할로 이전할 수 있어요.
스테이징할 데이터 파일을 자신만 로드하거나 단일 테이블에만 로드할 계획이라면, 사용자 스테이지나 데이터를 로드할 테이블의 스테이지를 사용하는 편이 좋을 수 있어요.
이름이 있는 스테이지는 선택 사항이지만, 여러 사용자 및/또는 테이블이 관련될 수 있는 정기적인 데이터 로드를 계획할 때 권장돼요. 이름이 있는 스테이지 만들기 지침은 아래 이름이 있는 스테이지 만들기를 참고해요.
이름이 있는 스테이지 만들기
SQL 또는 웹 인터페이스를 사용해 이름이 있는 내부 스테이지를 만들 수 있어요.
참고 — 스테이지를 만들려면 필요한 권한이 부여되거나 상속된 역할을 사용해야 해요. 자세한 내용은 CREATE STAGE의 액세스 제어 요구 사항을 참고해요.
SQL로 이름이 있는 스테이지 만들기
CREATE STAGE 명령을 사용해 SQL로 이름이 있는 스테이지를 만들어요.
다음 예제는 서버 측 암호화를 사용하는 내부 스테이지를 만들어요.
CREATE STAGE my_int_stage
ENCRYPTION = (TYPE = 'SNOWFLAKE_SSE');
Python으로 이름이 있는 스테이지 만들기
Snowflake Python API의 StageCollection.create 메서드를 사용해 이름이 있는 스테이지를 만들어요. 자세한 내용은 스테이지 만들기를 참고해요.
다음 예제는 서버 측 암호화를 사용하는 내부 스테이지를 만들어요.
from snowflake.core.stage import Stage, StageEncryption
my_stage = Stage(
name="my_int_stage",
encryption=StageEncryption(type="SNOWFLAKE_SSE")
)
root.databases["<database>"].schemas["<schema>"].stages.create(my_stage)
Snowsight로 이름이 있는 스테이지 만들기
Snowsight로 이름이 있는 내부 스테이지를 만들려면 다음을 수행해요.
- Snowsight에 로그인해요.
- 탐색 메뉴 상단에서 (Create) » Stage » Snowflake Managed를 선택해요.
- Create Stage 대화 상자에서 Stage Name을 입력해요.
- 스테이지를 만들 데이터베이스와 스키마를 선택해요.
- 선택적으로 Directory table을 선택 해제해요. 디렉터리 테이블을 사용하면 스테이지의 파일을 볼 수 있지만 웨어하우스가 필요하므로 비용이 발생해요. 지금은 이 옵션을 선택 해제하고 나중에 디렉터리 테이블을 활성화할 수 있어요.
- 스테이지의 모든 파일에 지원되는 Encryption 유형을 선택해요. 자세한 내용은 내부 스테이지용 암호화를 참고해요. 스테이지를 만든 후에는 암호화 유형을 변경할 수 없어요.
참고 — 데이터 접근을 활성화하려면 서버 측 암호화를 사용해요. 그렇지 않으면 스테이징된 파일이 기본적으로 클라이언트 측 암호화되어 다운로드 시 읽을 수 없어요. 자세한 내용은 비정형 데이터 접근용 서버 측 암호화를 참고해요.
- 스테이지를 설명하는 필드를 완료해요. 자세한 내용은 CREATE STAGE를 참고해요.
- Create를 선택해요.