Amazon S3互換ストレージの操作¶
業界標準の Amazon Simple Storage Service (S3) REST API を使用すると、ストレージ バケットとオブジェクトにプログラムでアクセスして、CRUD 操作やさまざまな管理アクションを実行できます。独自のS3互換 APIs を持ったストレージアプリケーションとデバイスの数が増えています。S3ストレージにアクセスして対話するSnowflake機能は、S3互換ストレージでも動作しますが、いくつかの制限があります。
パブリッククラウドの外部(つまり、オンプレミスまたはエッジ)のストレージにアクセスするため、S3互換の API エンドポイント、バケット名とパス、および認証情報を格納する外部ステージをSnowflakeに作成できます。これらのステージに対する権限をロールに付与して、ユーザーがストレージの場所間でデータをロードしたり、アンロードしたりできるようにします。
外部ステージで外部テーブルを作成して、このストレージを含めるようにデータレイクを拡張します。
このトピックの内容:
クラウドプラットフォームのサポート¶
この機能は、サポートされている クラウドプラットフォーム でホストされているSnowflakeアカウントで利用可能です。
Amazon Web Services
Google Cloud
Microsoft Azure
S3互換ストレージの要件¶
S3互換の API エンドポイントは、次の要件を満たす必要があります。
S3 API に高度に準拠している。エンドポイントがS3のように動作しないと、Snowflakeでは機能しません。
Snowflake S3互換のテスト済みおよび準拠サービスとして、サードパーティのストレージプロバイダーによってサポートされている。
Snowflakeアカウントがホストされているパブリッククラウドからアクセス可能である。
分析のニーズに応える高可用性とパフォーマンス。
直接認証情報を使用するように構成されている。
有効な TLS 証明書で HTTPS 通信を使用するように構成されている。
外部ステージの作成¶
CREATE STAGE を使用して名前付きの 外部ステージ を作成します。名前付きステージオブジェクトを使用して、ファイルの一覧表示、データのロード、ファイルのアンロードなどの SQL アクションを実行できます。
作成した外部ステージに ディレクトリテーブル を追加できます。ディレクトリテーブルをクエリしてファイル URLs を取得し、参照されるストレージ内のファイルやその他のメタデータにアクセスします。
構文¶
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/]'
URL データファイルの格納に使用される外部の場所(S3互換の API エンドポイントを使用してアクセスされる既存のバケット)の場合:
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 <テーブル> コマンドを使用した一括データロード。
たとえば、バケット内の
load
サブパスにあるすべてのファイルと、作成したmy_s3compat_stage
ステージで定義されたパスからテーブルt1
にデータをロードします。COPY INTO t1 FROM @my_s3compat_stage/load/;
Snowpipe REST エンドポイントの呼び出しによる継続的なデータのロード。
サンプルプログラムについては、 オプション1:Snowpipe REST API を使用したデータのロード をご参照ください。
COPY INTO <場所> コマンドを使用したデータのアンロード。
たとえば、テーブル
t2
からバケット内のunload
サブパスと、作成したmy_s3compat_stage
ステージで定義されたパス内のファイルにデータをアンロードします。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に期待するものとの間の明らかな不一致を検出します。テストで非互換性が識別されない場合があることに注意してください。
顧客が独自のデバイスをテストしたい場合は、ベンダーに連絡してこれらのテストを実行することをお勧めします。ただし、デバイスでこれらのパブリックテストを実行して、互換性を評価することもできます。