데이터 로딩 개요¶
이 항목에서는 Snowflake에 데이터를 로드하는 데 사용할 수 있는 기본 옵션에 대한 개요를 제공합니다.
이 항목의 내용:
지원되는 파일 위치¶
Snowflake에서는 클라우드 저장소의 데이터 파일 위치를 스테이지 라고 합니다. 대량 및 연속 데이터 로드(예: Snowpipe)에 사용되는 COPY INTO <테이블> 명령은 비즈니스 엔터티에서 관리하는 클라우드 저장소 계정(예: 외부 스테이지)과 Snowflake 계정에 포함된 클라우드 저장소(예: 내부 스테이지)를 지원합니다.
외부 스테이지¶
Snowflake 계정을 호스팅하는 클라우드 플랫폼 에 관계없이 데이터를 로드할 수 있는 클라우드 저장소 서비스는 다음과 같습니다.
Amazon S3
Google Cloud Storage
Microsoft Azure
사용자는 검색하기 전에 복원이 필요한 아카이브 클라우드 저장소 클래스에 있는 데이터에 액세스할 수 없습니다. 이러한 아카이브 저장소 클래스로는 예를 들어 Amazon S3 Glacier Flexible Retrieval 또는 Glacier Deep Archive 저장소 클래스 또는 Microsoft Azure Archive Storage 등이 있습니다.
클라우드 저장소 서비스에서 제공하는 도구를 사용하여 클라우드 저장소 계정에 파일을 업로드(즉, 스테이지)합니다.
명명된 외부 스테이지는 스키마에서 생성된 데이터베이스 오브젝트입니다. 이 오브젝트는 URL을 클라우드 저장소에 있는 파일, 클라우드 저장소 계정에 액세스하는 데 사용되는 설정, 스테이징된 파일 형식을 설명하는 옵션과 같은 편의 설정을 저장합니다. CREATE STAGE 명령을 사용하여 스테이지를 생성합니다.
참고
Snowflake 계정에서 다른 리전의 클라우드 저장소 서비스 또는 클라우드 플랫폼의 파일에서 데이터를 로드할 때 일부 데이터 전송 청구 요금이 부과될 수 있습니다. 자세한 내용은 데이터 전송 비용 이해하기 섹션을 참조하십시오.
내부 스테이지¶
Snowflake가 사용자 계정에서 관리하는 스테이지 타입은 다음과 같습니다.
- 사용자:
사용자 스테이지는 파일을 저장하기 위해 각 사용자에게 할당됩니다. 이 스테이지 타입은 단일 사용자가 스테이징 및 관리하지만 여러 테이블에 로드할 수 있는 파일을 저장하도록 설계되었습니다. 사용자 스테이지는 변경 또는 삭제가 불가능합니다.
- 테이블:
Snowflake에서 생성된 각 테이블에 대해 테이블 스테이지를 사용할 수 있습니다. 이 스테이지 타입은 한 명 이상의 사용자가 스테이징하고 관리하지만 단일 테이블에만 로드되는 파일을 저장하도록 설계되었습니다. 테이블 스테이지는 변경 또는 삭제가 불가능합니다.
테이블 스테이지는 별도의 데이터베이스 오브젝트가 아닌, 테이블 자체에 연결된 암시적 스테이지입니다. 테이블 스테이지에는 자체적으로 할당할 수 있는 권한이 없습니다. 파일을 테이블 스테이지로 스테이징하거나, 파일을 나열하거나, 스테이지에서 쿼리하거나, 삭제하려면 테이블 소유자여야 합니다(테이블에 대한 OWNERSHIP 권한이 있는 역할이 있어야 함).
- 명명된 스테이지:
명명된 내부 스테이지는 스키마에서 생성된 데이터베이스 오브젝트입니다. 이 스테이지 타입은 한 명 이상의 사용자가 스테이징 및 관리하고 하나 이상의 테이블에 로드되는 파일을 저장할 수 있습니다. 명명된 스테이지는 데이터베이스 오브젝트이기 때문에 보안 액세스 제어 권한을 사용하여 이를 생성, 수정, 사용 또는 삭제하는 기능을 관리할 수 있습니다. CREATE STAGE 명령을 사용하여 스테이지를 생성합니다.
PUT 명령을 사용하여 로컬 파일 시스템에서 내부 스테이지 타입으로 파일을 업로드합니다.
대량 vs 연속 로드¶
Snowflake가 제공하는 기본 데이터 로딩 방법은 다음과 같습니다. 가장 적합한 방법은 로드할 데이터의 양과 로드 빈도에 따라 달라질 수 있습니다.
COPY 명령을 사용한 대량 로드¶
이 옵션을 사용하면 COPY 명령을 사용하여 데이터를 테이블에 로드하기 전에 클라우드 저장소에서 이미 사용 가능한 파일에서 데이터 배치를 로드하거나 로컬 컴퓨터에서 내부(즉, Snowflake) 클라우드 저장소 위치로 데이터 파일을 복사(즉, 스테이징)할 수 있습니다.
컴퓨팅 리소스¶
대량 로드에서는 COPY 문에 지정된 사용자 제공 가상 웨어하우스가 사용됩니다. 사용자는 예상되는 로드를 수용할 수 있도록 웨어하우스의 크기를 적절하게 조정해야 합니다.
로드 중 단순 변환¶
Snowflake는 데이터를 테이블에 로드하는 동안 COPY 명령을 사용한 데이터 변환을 지원합니다. 지원되는 옵션은 다음과 같습니다.
열 재정렬
열 생략
캐스트
대상 열 길이를 초과하는 텍스트 문자열 자르기
데이터 파일의 열 개수 및 순서는 대상 테이블과 같지 않아도 됩니다.
Snowpipe를 사용한 연속 로드¶
이 옵션은 소량의 데이터(즉, 마이크로 배치)를 로드하고 증분식으로 분석에 사용할 수 있도록 설계되었습니다. Snowpipe는 파일이 스테이지에 추가되고 수집용으로 제출된 후 몇 분 이내에 데이터를 로딩합니다. 이를 통해 원시 데이터를 사용할 수 있게 되는 즉시 사용자에게 최신 결과가 제공됩니다.
컴퓨팅 리소스¶
Snowpipe는 Snowflake에서 제공하는 컴퓨팅 리소스(즉, 서버리스 컴퓨팅 모델)를 사용합니다. Snowflake에서 제공하는 이러한 리소스는 필요에 따라 자동으로 크기가 조정되고 확장 또는 축소되며 초당 청구를 사용하여 요금이 청구되고 항목으로 분류됩니다. 데이터 수집과 관련해서는 실제 워크로드에 따라 요금이 부과됩니다.
로드 중 단순 변환¶
파이프 정의의 COPY 문은 데이터를 대량으로 로드할 때와 동일한 COPY 변환 옵션을 지원합니다.
또한, 데이터 파이프라인은 Snowpipe를 활용하여 자동화된 작업과 스트림의 변경 데이터 캡처(CDC) 정보를 사용하여 변환 및 최적화를 위해 데이터의 마이크로 배치를 스테이징 테이블에 지속적으로 로드할 수 있습니다.
복합 변환을 위한 데이터 파이프라인¶
데이터 파이프라인 을 사용하면 로드된 데이터에 복합 변환을 적용할 수 있습니다. 이 워크플로는 일반적으로 Snowpipe를 활용하여 “원시” 데이터를 스테이징 테이블에 로드한 후 일련의 테이블 스트림 및 작업을 사용하여 분석을 위해 새 데이터를 변환하고 최적화합니다.
Snowpipe Streaming을 사용하여 연속 로드하기¶
Snowpipe Streaming API는 파일 스테이징 요구 사항 없이 Snowflake 테이블에 직접 데이터 행을 기록합니다. 이 아키텍처에서는 그 양에 관계없이 데이터를 로딩하는 데 드는 비용이 낮아지는 것과 함께, 로드 지연 시간이 짧아지므로, 거의 실시간으로 데이터 스트림을 처리하는 강력한 도구가 됩니다.
Snowpipe Streaming을 Kafka용 Snowflake 커넥터에도 사용할 수 있는데, 이 커넥터는 짧은 지연 시간 단축과 로딩 비용 절감의 이점을 활용하는 손쉬운 업그레이드 경로를 제공합니다.
자세한 내용은 Snowpipe Streaming 섹션을 참조하십시오.
Apache Kafka 항목에서 데이터 로드하기¶
Kafka용 Snowflake 커넥터 를 사용하면 사용자는 Apache Kafka 서버에 연결하고 1개 이상의 항목에서 데이터를 읽은 후 해당 데이터를 Snowflake 테이블에 로드할 수 있습니다.
스테이징된 반정형 데이터 파일에서 열 정의 감지¶
반정형 데이터에는 수천 개의 열이 포함될 수 있습니다. Snowflake는 이 데이터를 처리하기 위한 강력한 방법을 제공합니다. 제공되는 옵션으로는 외부 테이블을 사용하여 클라우드 저장소에서 직접 데이터 참조, VARIANT 타입의 단일 열로 데이터 로드, 표준 관계형 테이블의 개별 열로 데이터 변환 및 로드 등이 있습니다. 이러한 모든 옵션을 위해서는 데이터의 열 정의에 대한 약간의 지식이 필요합니다.
다른 방법은 스테이징된 반정형 데이터 파일 세트에서 스키마를 자동으로 감지하고 열 정의를 검색하는 것입니다. 열 정의에는 파일의 이름, 데이터 타입, 열 순서가 포함됩니다. Snowflake 표준 테이블, 외부 테이블 또는 뷰를 생성하기 위해 적합한 형식으로 구문을 생성합니다.
참고
이 기능은 Apache Parquet, Apache Avro, ORC, JSON 및 CSV 파일을 지원합니다.
이러한 지원은 다음 SQL 함수를 통해 구현됩니다.
- INFER_SCHEMA
스테이징된 데이터 파일 세트에서 열 정의를 감지하고 Snowflake 오브젝트를 생성하기 위해 적합한 형식으로 메타데이터를 검색합니다.
- GENERATE_COLUMN_DESCRIPTION
INFER_SCHEMA 함수 출력을 사용하여 스테이징된 파일 세트에서 열 목록을 생성합니다.
이러한 SQL 함수는 내부 및 외부 스테이지를 모두 지원합니다.
CREATE TABLE … USING TEMPLATE 또는 CREATE EXTERNAL TABLE … USING TEMPLATE 구문을 사용하여 스테이징된 파일 세트에서 파생된 열 정의로 테이블 또는 외부 테이블을 만듭니다. USING TEMPLATE 절은 INFER_SCHEMA SQL 함수를 호출하여 파일의 열 정의를 감지하는 식을 허용합니다. 테이블이 생성되면 COPY 문에서 MATCH_BY_COLUMN_NAME
옵션을 사용하여 파일을 정형 테이블에 직접 로드할 수 있습니다.
데이터 로드의 대안¶
다음 옵션을 사용하여 클라우드 저장소에 있는 데이터를 Snowflake 테이블에 로딩하지 않고 쿼리할 수 있습니다.
외부 테이블(데이터 레이크)¶
외부 테이블 을 사용하면 Snowflake에 우선 로드하지 않고도 외부 클라우드 저장소에 저장된 기존 데이터를 쿼리하여 분석을 수행할 수 있습니다. 데이터의 정보 소스는 외부 클라우드 저장소에 유지됩니다. 구체화된 뷰를 통해 Snowflake에서 구체화된 데이터 세트는 읽기 전용입니다.
이 방법은 외부 클라우드 저장소에 많은 양의 데이터가 저장되어 있고 데이터의 일부만 쿼리(예: 가장 최근 데이터)하는 계정에 특히 유용합니다. 사용자는 이러한 데이터의 하위 세트에 대한 구체화된 뷰를 생성하여 쿼리 성능 향상할 수 있습니다.
Amazon S3 호환 저장소 사용하기¶
소프트웨어 및 디바이스, 온프레미스 또는 사설 클라우드에서 Amazon S3 API와 고도로 호환되는 외부 스테이지와 외부 테이블을 생성할 수 있습니다. 이 기능을 사용하면 데이터가 실제로 저장된 위치에 관계없이 데이터를 보다 쉽고 효율적으로 관리, 거버넌스, 분석할 수 있습니다. 자세한 내용은 Amazon S3 호환 저장소 사용하기 섹션을 참조하십시오.