Amazon S3 호환 저장소 사용하기

이 항목에서는 Snowflake에서 Amazon S3 호환 저장소에 액세스하는 데 도움이 되는 정보를 제공합니다.

저장소 애플리케이션 또는 디바이스가 산업 표준 Amazon Simple Storage Service(S3) REST API 를 준수하는 애플리케이션 프로그래밍 인터페이스(API)를 제공하는 경우 Amazon S3과 호환됩니다. Amazon S3 REST API는 저장소 버킷 및 오브젝트에 대한 CRUD 작업과 관리 동작을 활성화합니다.

Snowflake에서는 외부 스테이지를 사용하여 공용 클라우드 외부에 존재하는 온프레미스 저장소 및 디바이스를 포함하여 점점 늘어나는 S3 호환 저장소 솔루션에 연결할 수 있습니다. 외부 스테이지는 S3 호환 API 엔드포인트, 버킷 이름 및 경로, 자격 증명을 저장합니다. 사용자가 저장소 위치에 대해 데이터를 로딩하거나 언로딩할 수 있도록 스테이지에 대한 권한을 역할에 부여합니다.

Amazon S3 호환 저장소에 대한 Snowflake 지원을 사용하여 다음과 같은 작업을 수행할 수 있습니다.

클라우드 플랫폼 지원

이 기능은 지원되는 다음의 클라우드 플랫폼 에서 호스팅되는 Snowflake 계정에서 사용할 수 있습니다.

  • Amazon Web Services

  • Google Cloud

  • Microsoft Azure

S3 호환 저장소 요구 사항

Snowflake용 S3 호환 API 엔드포인트는 다음 요구 사항을 충족해야 합니다.

  • S3 API와 고도로 호환되고 (GitHub에 있는) 공개 테스트 세트 를 전달할 수 있습니다. 엔드포인트가 S3처럼 동작하지 않으면 Snowflake에서 제 역할을 할 수 없습니다.

  • 서드 파티 저장소 공급자가 테스트로 검증하고 규정을 준수하는 Snowflake S3 호환 서비스로 지원해야 합니다. 적어도 일부 제품을 테스트하고 Snowflake와 함께 협력하는 것으로 확인된 벤더 목록은 S3 호환 저장소를 위한 벤더 지원 섹션을 참조하십시오.

  • Snowflake 계정이 호스팅되는 공용 클라우드에서 액세스할 수 있어야 합니다.

  • 분석 필요성에 부응하는 높은 가용성과 성능을 발휘해야 합니다.

  • 가상 호스팅 스타일 요청을 사용하도록 구성되었습니다. 자세한 내용은 Amazon S3 설명서에서 버킷의 가상 호스팅 을 참조하십시오.

  • 유효한 TLS 인증서와 함께 HTTPS 통신을 사용하도록 구성해야 합니다.

  • 직접 자격 증명을 사용하도록 구성해야 합니다.

  • 포트 번호를 포함하지 않습니다. 예를 들어 엔드포인트 mystorage.com:3000은 지원되지 않습니다.

중요

Amazon S3 호환 엔드포인트는 모든 계정에 대해 자동으로 활성화되지 않습니다. 요청하려면 Snowflake 계정팀 또는 Snowflake 지원팀 에 문의하십시오. 요청을 보내기 전에 (GitHub에서) 공개 테스트 모음 을 사용하여 엔드포인트를 확인했는지 살펴보십시오.

요청을 제출할 때 다음 정보를 제공하십시오.

  • Snowflake 계정 이름 및 클라우드 리전 배포.

  • 엔드포인트 URL(예: my-s3-endpoint.company.com).

  • 엔드포인트를 제공하는 소프트웨어 또는 하드웨어 벤더.

S3 호환 저장소용 외부 스테이지 생성하기

S3 호환 저장소에 대한 외부 스테이지를 생성하려면 CREATE STAGE 명령을 사용하여 명명된 외부 스테이지 를 생성하십시오. 명명된 스테이지 오브젝트는 다른 SQL 작업 중에서 파일을 나열하고 데이터를 로딩하고 파일을 언로딩하는 데 사용할 수 있습니다.

선택적으로, 디렉터리 테이블 을 외부 스테이지에 추가합니다. 파일 URL을 검색하는 디렉터리 테이블을 쿼리하여 참조된 저장소의 파일뿐 아니라 다른 메타데이터에도 액세스할 수 있습니다.

참고

디렉터리 테이블을 추가할 때 AUTO_REFRESH 매개 변수를 FALSE 로 설정해야 합니다. S3 호환 외부 스테이지의 메타데이터는 자동으로 새로 고칠 수 없습니다.

다음 예에서는 엔드포인트 mystorage.com 에서 my_bucket/files/ 라는 버킷과 경로를 가리키는 my_s3_compat_stage 라는 외부 스테이지를 만듭니다. 이 예에서 사용하는 AWS_KEY_ID 및 AWS_SECRET_KEY 값은 설명 목적으로만 제공됩니다.

CREATE STAGE my_s3compat_stage
  URL = 's3compat://my_bucket/files/'
  ENDPOINT = 'mystorage.com'
  CREDENTIALS = (AWS_KEY_ID = '1a2b3c...' AWS_SECRET_KEY = '4x5y6z...')
Copy

데이터 로딩 및 언로딩

S3 호환 저장소용으로 구성된 외부 스테이지를 사용하여 데이터를 로딩 및 언로딩할 수 있습니다. 다음 기능은 S3 호환 저장소에서 작동합니다.

외부 테이블을 사용하여 데이터 레이크 확장하기

S3 호환 저장소가 있는 외부 테이블을 사용하여 데이터를 Snowflake에 먼저 로딩하지 않고도 쿼리할 수 있습니다. 이 섹션에서는 S3 호환 저장소용으로 구성된 외부 스테이지의 위치를 참조하는 외부 테이블을 만들고 쿼리하는 방법을 간략하게 설명합니다.

S3 호환 외부 스테이지를 참조하는 CREATE EXTERNAL TABLE 을 사용하여 외부 테이블을 생성하는 작업부터 시작합니다.

참고

이러한 외부 테이블의 메타데이터는 자동으로 새로 고칠 수 없습니다. AUTO_REFRESH = TRUE 매개 변수 설정은 지원되지 않습니다. ALTER EXTERNAL TABLE … REFRESH 명령을 실행하여 메타데이터를 수동으로 새로 고쳐 추가되거나 제거된 파일을 모두 등록해야 합니다.

다음 예에서는 my_s3compat_stage 라는 스테이지에서 하위 경로 path1 을 참조하는 et 라는 외부 테이블을 만듭니다. path1 하위 경로에 있는 파일은 Apache Parquet 형식입니다.

CREATE EXTERNAL TABLE et
 LOCATION=@my_s3compat_stage/path1/
 AUTO_REFRESH = FALSE
 REFRESH_ON_CREATE = TRUE
 FILE_FORMAT = (TYPE = PARQUET);
Copy

S3 호환 저장소용 외부 테이블을 만든 후 쿼리할 수 있습니다. 예를 들어 이전에 만든 외부 테이블의 value 열을 쿼리하십시오.

SELECT value FROM et;
Copy

쿼리 성능은 네트워크 및 애플리케이션 또는 디바이스 성능에 따라 다릅니다. 성능이 중요한 경우 외부 테이블에서 구체화된 뷰 를 생성하는 것이 좋습니다.

S3 호환 저장소를 위한 벤더 지원

Snowflake와 함께 S3 호환 API가 있는 디바이스 또는 애플리케이션을 사용할 수 있습니다. 하지만 저장소 서비스 공급자는 규정 준수를 보장할 책임이 있습니다.

다음 벤더는 최소한 자사 제품 중 일부를 테스트한 결과 Snowflake와 원활하게 작동하는 사실을 확인했다고 Snowflake 측에 밝혔습니다.

  • Backblaze

  • Cloudflare

  • Cloudian

  • Cohesity

  • Dell

  • Hitachi Content Platform

  • IDrive e2

  • MinIO

  • NetApp(StorageGRID)

  • Nutanix

  • PureStorage

  • Scality

  • 와사비

이 목록은 편의상 제공되는 것일 뿐입니다. Snowflake는 호환성을 검증하기 위해 외부 제품을 테스트하지 않으며 서드 파티 벤더에서 판매하는 제품의 문제를 해결할 수도 없습니다. S3 API를 사용하는 하드웨어나 소프트웨어가 Snowflake와 원활히 작동하는지 여부나 그 방식에 대해 궁금한 점이 있으시면 해당 벤더에 직접 문의하시기 바랍니다.

S3 호환 API 테스트하기

S3 호환 API를 만든 하드웨어 또는 소프트웨어 개발자라면 (GitHub에 있는) 공개 테스트 세트 를 사용하여 S3 API가 Snowflake에서 작동하는지 테스트할 수 있습니다. 이 테스트 세트에서는 구현과 Snowflake가 S3에서 기대하는 사항 사이에 명백히 불일치하는 부분을 찾습니다. 하지만 테스트에서 비호환성을 식별하지 못하는 경우가 있을 수 있습니다.

고객으로서 자신의 디바이스를 스스로 테스트하려는 경우 벤더에 문의해 도움을 받으면서 이러한 테스트를 실행하는 것이 좋습니다. 디바이스에서 이러한 공개 테스트를 실행하여 호환성을 평가할 수도 있습니다.