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 アクションを実行できます。

オプションで、 ディレクトリテーブル を外部ステージに追加します。ディレクトリテーブルをクエリしてファイル URLs を取得し、参照されるストレージ内のファイルやその他のメタデータにアクセスできます。

注釈

ディレクトリテーブルを追加する際には、 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互換ストレージのベンダーサポート

S3準拠の API を持つデバイスやアプリケーションをSnowflakeで使用できます。ただし、コンプライアンスを担保する責任は、ストレージサービスプロバイダーにあります。

以下のベンダーは、自社製品の少なくとも一部をテストし、Snowflakeで動作することを確認したとSnowflakeに報告しています。

  • Backblaze

  • Cloudflare

  • Cloudian

  • Cohesity

  • Dell

  • Hitachi Content Platform

  • IDrive e2

  • MinIO

  • NetApp (StorageGRID)

  • Nutanix

  • PureStorage

  • Scality

  • Wasabi

このリストは、便宜上提供されているものです。Snowflakeが外部製品をテストして互換性を検証することはありません。また、サードパーティベンダーが販売する製品の問題を修正することもできません。S3 API を使用するハードウェアまたはソフトウェアがSnowflakeで動作するかどうか、またはどのように動作するかについて質問がある場合は、ベンダーに直接お問い合わせください。

S3互換 API のテスト

S3互換の API を作成したハードウェアまたはソフトウェア開発者は、 公開テストスイート (GitHub 内)を使用して、S3 API がSnowflakeで動作するかどうかをテストできます。テストスイートは、実装とSnowflakeがS3に期待するものとの間の明らかな不一致を検出します。ただし、テストで非互換性が識別されない場合があります。

お客様が独自のデバイスをテストする場合は、ベンダーに連絡してこれらのテストを実行することをお勧めします。また、これらの公開テストをお使いのデバイスで実行し、互換性を評価することもできます。