Amazon S3 호환 저장소 사용하기¶
업계 표준 Amazon Simple Storage Service(S3) REST API 는 저장소 버킷 및 오브젝트에 프로그래밍 방식으로 액세스하여 CRUD 작업과 다양한 관리 작업을 수행할 수 있도록 지원합니다. 자체 S3 호환 API가 있는 저장소 애플리케이션과 디바이스가 점점 더 많아지고 있습니다. S3 저장소에 액세스하여 상호 작용하는 Snowflake 기능은 S3 호환 저장소에서도 작동할 수 있지만, 몇 가지 제한 사항이 있습니다.
공용 클라우드(예: 온프레미스 또는 에지) 외부의 저장소에 액세스하기 위해 Snowflake에서 S3 호환 API 엔드포인트, 버킷 이름 및 경로, 자격 증명을 저장하는 외부 스테이지를 만들 수 있습니다. 사용자가 저장소 위치에 대해 데이터를 로딩하거나 언로딩할 수 있도록 이러한 스테이지에 대한 권한을 역할에 부여합니다.
외부 스테이지에서 외부 테이블을 생성하여 이 저장소를 포함하도록 데이터 레이크를 확장합니다.
이 항목의 내용:
클라우드 플랫폼 지원¶
이 기능은 지원되는 모든 클라우드 플랫폼 에서 호스팅되는 Snowflake 계정에서 사용할 수 있습니다.
Amazon Web Services
Google Cloud
Microsoft Azure
S3 호환 저장소 요구 사항¶
S3 호환 API 엔드포인트는 다음과 같아야 합니다.
S3 API와 고도로 호환되어야 합니다. 엔드포인트가 S3처럼 동작하지 않으면 Snowflake에서 제 역할을 할 수 없습니다.
서드 파티 저장소 공급자가 테스트로 검증하고 규정을 준수하는 Snowflake S3 호환 서비스로 지원해야 합니다.
Snowflake 계정이 호스팅되는 공용 클라우드에서 액세스할 수 있어야 합니다.
분석 필요성에 부응하는 높은 가용성과 성능을 발휘해야 합니다.
직접 자격 증명을 사용하도록 구성해야 합니다.
유효한 TLS 인증서와 함께 HTTPS 통신을 사용하도록 구성해야 합니다.
외부 스테이지 만들기¶
CREATE STAGE 를 사용하여 명명된 외부 스테이지 를 만듭니다. 명명된 스테이지 오브젝트는 다른 SQL 작업 중에서 파일을 나열하고 데이터를 로딩하고 파일을 언로딩하는 데 사용할 수 있습니다.
생성한 모든 외부 스테이지에 디렉터리 테이블 을 추가할 수 있습니다. 파일 URL을 검색하는 디렉터리 테이블을 쿼리하여 참조된 저장소의 파일뿐 아니라 다른 메타데이터에도 액세스합니다.
구문¶
CREATE [ OR REPLACE ] STAGE <external_stage_name>
URL = 's3compat://{bucket}[/{path}/]'
ENDPOINT = '<s3_api_compatible_endpoint>'
CREDENTIALS = ( AWS_KEY_ID = '<string>' AWS_SECRET_KEY = '<string>' )
..
매개 변수¶
이 섹션에서는 S3 호환 엔드포인트를 통해 저장소 위치를 가리키는 외부 스테이지에 특정한 매개 변수를 설명합니다. 공통 매개 변수에 대한 설명은 CREATE STAGE 섹션을 참조하십시오.
URL = 's3compat://bucket[/path/]'
데이터 파일을 저장하는 데 사용되는 외부 위치(S3 호환 API 엔드포인트를 사용하여 액세스하는 기존 버킷)의 URL. 여기서
bucket
은 버킷의 이름입니다.path
는 클라우드 저장소 위치에 있는 파일(즉, 공통 문자열로 시작하는 이름을 가진 파일)의 선택적인 대/소문자 구분 경로(또는 S3 용어의 접두사)입니다.
ENDPOINT = 's3_api_compatible_endpoint'
S3 호환 API 엔드포인트를 가리키는 정규화된 도메인입니다.
액세스 제어 요구 사항¶
이 SQL 명령을 실행하는 데 사용되는 역할 에는 최소한 다음 권한 이 있어야 합니다.
권한 |
오브젝트 |
참고 |
---|---|---|
CREATE STAGE |
스키마 |
새 스테이지를 만드는 경우에 필요합니다. |
USAGE |
파일 형식 |
스테이지 정의에서 명명된 파일 형식을 참조하는 경우에만 필요합니다. |
스키마의 모든 오브젝트에 대해 작업하려면 상위 데이터베이스 및 스키마에 대한 USAGE 권한도 필요합니다.
지정된 권한 세트로 사용자 지정 역할을 만드는 방법에 대한 지침은 사용자 지정 역할 만들기 섹션을 참조하십시오.
보안 오브젝트 에 대해 SQL 작업을 수행하기 위한 역할과 권한 부여에 대한 일반적인 정보는 액세스 제어의 개요 섹션을 참조하십시오.
사용법 노트¶
S3 호환 저장소에 액세스하려면 직접 자격 증명이 필요합니다.
예¶
엔드포인트 mystorage.com
에서 버킷과 경로 my_bucket/files/
를 가리키는 my_s3compat_stage
라는 외부 스테이지를 만듭니다.
CREATE STAGE my_s3compat_stage
URL = 's3compat://my_bucket/files/'
ENDPOINT = 'mystorage.com'
CREDENTIALS = (AWS_KEY_ID = '1a2b3c...' AWS_SECRET_KEY = '4x5y6z...')
이 예에서 사용하는 AWS_KEY_ID 및 AWS_SECRET_KEY 값은 설명 목적으로만 제공됩니다.
데이터 로딩 및 언로딩¶
(이 항목의) 외부 스테이지 만들기 에서 만든 외부 스테이지를 사용하여 데이터를 로딩 및 언로딩합니다. 다음 기능은 외부 스테이지에서 작동합니다.
COPY INTO <테이블> 명령을 사용한 대량 데이터 로딩.
예를 들어 다음과 같이 생성한
my_s3compat_stage
스테이지에 정의된 버킷과 경로의load
하위 경로에 있는 모든 파일에서t1
테이블로 데이터를 로딩합니다.COPY INTO t1 FROM @my_s3compat_stage/load/;
데이터를 연속으로 로딩하는 Snowpipe REST 엔드포인트 호출하기.
샘플 프로그램은 옵션 1: Snowpipe REST API를 사용하여 데이터 로드하기 섹션을 참조하십시오.
COPY INTO <위치> 명령을 사용한 데이터 언로딩.
예를 들어 테이블
t2
에서 자신이 생성한my_s3compat_stage
스테이지에 정의된 버킷과 경로의unload
하위 경로에 있는 파일로 데이터를 언로딩합니다.COPY INTO @my_s3compat_stage/unload/ FROM t2;
외부 테이블을 사용하여 데이터 레이크 확장하기¶
외부 테이블을 사용하면 Snowflake에 우선 로드하지 않고도 외부 클라우드 저장소에 저장된 데이터를 쿼리하여 분석을 수행할 수 있습니다.
외부 테이블 만들기¶
(이 항목의) 외부 스테이지 만들기 에서 만든 외부 스테이지를 참조하는 CREATE EXTERNAL TABLE 을 사용하여 외부 테이블을 만듭니다.
액세스 제어 요구 사항¶
이 SQL 명령을 실행하는 데 사용되는 역할 에는 최소한 다음 권한 이 있어야 합니다.
권한 |
오브젝트 |
참고 |
---|---|---|
CREATE EXTERNAL TABLE |
스키마 |
|
USAGE |
스테이지 |
스키마의 모든 오브젝트에 대해 작업하려면 상위 데이터베이스 및 스키마에 대한 USAGE 권한도 필요합니다.
사용법 노트¶
이러한 외부 테이블의 메타데이터는 자동으로 새로 고칠 수 없습니다.
AUTO_REFRESH = TRUE
매개 변수 설정은 지원되지 않습니다.외부 테이블의 메타데이터를 수동으로 새로 고쳐야 합니다. 자세한 내용은 (이 항목의) 외부 테이블 메타데이터를 수동으로 새로 고치기 를 참조하십시오.
예¶
자신이 생성한 my_s3compat_stage
스테이지에서 하위 경로 path1
을 참조하는 et
라는 외부 테이블을 생성합니다. 다음과 같이 이 하위 경로의 파일 형식은 Apache Parquet입니다.
CREATE EXTERNAL TABLE et
LOCATION=@my_s3compat_stage/path1/
AUTO_REFRESH = FALSE
REFRESH_ON_CREATE = TRUE
FILE_FORMAT = (TYPE = PARQUET);
외부 테이블 메타데이터를 수동으로 새로 고치기¶
추가되거나 제거된 파일을 등록하려면 ALTER EXTERNAL TABLE … REFRESH 문을 주기적으로 실행하십시오.
외부 테이블 소유자(즉, 외부 테이블에 대한 OWNERSHIP 권한을 가진 역할) 이상만이 명령을 실행할 수 있습니다. 스키마의 모든 오브젝트에 대해 작업하려면 상위 데이터베이스 및 스키마에 대한 USAGE 권한도 필요합니다.
외부 테이블 쿼리하기¶
외부 테이블 메타데이터를 새로 고친 후 사용자는 외부 테이블을 쿼리할 수 있습니다.
외부 테이블을 쿼리하는 데 사용되는 역할에는 외부 테이블에 대한 USAGE 권한이 있어야 합니다. 스키마의 모든 오브젝트에 대해 작업하려면 상위 데이터베이스 및 스키마에 대한 USAGE 권한도 필요합니다.
생성한 외부 테이블의 열 col1
과 col2
를 쿼리하는 예를 들면 다음과 같습니다.
SELECT col1, col2 FROM et;
쿼리 성능은 네트워크 및 애플리케이션 또는 디바이스 성능에 따라 다릅니다.
S3 호환 저장소를 위한 벤더 지원¶
호환 S3 API가 있는 디바이스 또는 애플리케이션은 Snowflake와 함께 사용할 수 있습니다. 규정 준수 보장은 저장소 서비스 공급자의 책임입니다.
다음 벤더는 최소한 자사 제품 중 일부를 테스트한 결과 Snowflake와 원활하게 작동하는 사실을 확인했다고 Snowflake 측에 밝혔습니다.
Cloudian
Dell
Hitachi Content Platform
MinIO
NetApp(StorageGRID)
PureStorage
Scality
이 목록은 편의상 제공되는 것일 뿐입니다. Snowflake는 호환성을 검증하기 위해 외부 제품을 테스트하지 않으며 서드 파티 벤더에서 판매하는 제품의 문제를 해결할 수도 없습니다. S3 API를 사용하는 하드웨어나 소프트웨어가 Snowflake와 원활히 작동하는지 여부나 그 방식에 대해 궁금한 점이 있으시면 해당 벤더에 직접 문의하시기 바랍니다.
S3 호환 API 테스트하기¶
S3 API가 있는 하드웨어 또는 소프트웨어 개발자인 경우 당사의 공개 테스트 모음 (GitHub에 있음)을 사용하여 S3 API를 테스트할 수 있습니다. 이 테스트 모음에서는 실제 구현과 Snowflake가 S3에서 기대하는 바 사이에 명백히 불일치하는 부분을 찾습니다. 테스트에서 비호환성을 식별하지 못하는 경우가 있을 수 있습니다.
고객으로서 자신의 디바이스를 스스로 테스트하려는 경우 벤더에 문의해 도움을 받으면서 이러한 테스트를 실행하는 것이 좋지만, 디바이스에서 이러한 공개 테스트를 실행하여 호환성을 평가할 수도 있습니다.