CREATE EXTERNAL VOLUME¶
アカウントの Icebergテーブル 用に新しい 外部ボリューム を作成するか、既存の外部ボリュームを置き換えます。
- こちらもご参照ください。
ALTER EXTERNAL VOLUME、 DROP EXTERNAL VOLUME、 SHOW EXTERNAL VOLUMES、 DESCRIBE EXTERNAL VOLUME
このトピックの内容:
構文¶
CREATE [ OR REPLACE ] EXTERNAL VOLUME [IF NOT EXISTS]
<name>
STORAGE_LOCATIONS =
(
(
NAME = '<storage_location_name>'
cloudProviderParams
)
[, (...), ...]
)
[ ALLOW_WRITES = { TRUE | FALSE }]
[ COMMENT = '<string_literal>' ]
条件:
cloudProviderParams (for Amazon S3) ::= STORAGE_PROVIDER = 'S3' STORAGE_AWS_ROLE_ARN = '<iam_role>' STORAGE_BASE_URL = 's3://<bucket>[/<path>/]' [ STORAGE_AWS_EXTERNAL_ID = '<external_id>' ] [ ENCRYPTION = ( [ TYPE = 'AWS_SSE_S3' ] | [ TYPE = 'AWS_SSE_KMS' [ KMS_KEY_ID = '<string>' ] ] | [ TYPE = 'NONE' ] ) ]cloudProviderParams (for Google Cloud Storage) ::= STORAGE_PROVIDER = 'GCS' STORAGE_BASE_URL = 'gcs://<bucket>[/<path>/]' [ ENCRYPTION = ( [ TYPE = 'GCS_SSE_KMS' ] [ KMS_KEY_ID = '<string>' ] | [ TYPE = 'NONE' ] ) ]cloudProviderParams (for Microsoft Azure) ::= STORAGE_PROVIDER = 'AZURE' AZURE_TENANT_ID = '<tenant_id>' STORAGE_BASE_URL = 'azure://<account>.blob.core.windows.net/<container>[/<path>/]'
必須パラメーター¶
storage_location_name
外部ボリュームの識別子(名前)を指定する文字列。アカウント内で一意である必要があります。
識別子はアルファベット文字で始まる必要があり、識別子文字列全体が二重引用符で囲まれていない限り、スペースや特殊文字を含めることはできません(例:
"My object"
)。二重引用符で囲まれた識別子も大文字と小文字が区別されます。詳細については、 識別子の要件 をご参照ください。
STORAGE_LOCATIONS = ( ( NAME = 'name' cloudProviderParams ) [, (...), ...] )
さまざまなリージョンにある名前付きクラウドストレージの場所と、オプションでクラウドプラットフォームのセット。
注釈
プレビュー期間中、作成する各外部ボリュームは、単一の アクティブなストレージの場所 をサポートします。
SnowflakeをIcebergカタログとして使用する場合、クロスクラウドおよびクロスリージョンのテーブルは現在サポートされていません。
オプションのパラメーター¶
ALLOW_WRITES = '{ TRUE | FALSE }'
書き込み操作が外部ボリュームで許可されているかどうかを指定します。Snowflakeをカタログとして使用するIcebergテーブルでは
TRUE
に設定する必要があります。このパラメーターの値は、指定した各ストレージの場所のクラウドストレージアカウントに設定した権限と一致する必要があります。
デフォルト:
TRUE
COMMENT = 'string_literal'
外部ボリュームのコメントを指定する文字列(リテラル)。
デフォルト: 値なし
クラウドプロバイダーのパラメーター(cloudProviderParams
)¶
注釈
KMS キーは、Amazon S3またはGoogle Cloud Storageインスタンスのストレージ所有者によって管理されます。サービスプリンシパル(IAM ロールと GCS サービスアカウント)に、KMS キーを使用する権限を付与する必要があります。詳細については、 Icebergテーブル用に外部ボリュームを構成する をご参照ください。
Amazon S3
STORAGE_PROVIDER = 'S3'
データファイルを保存するクラウドストレージプロバイダーを指定します。
STORAGE_AWS_ROLE_ARN = 'iam_role'
データファイルを含むS3バケットに対する権限を付与する AWS IDおよびアクセス管理(IAM)ロールのAmazonリソースネーム(ARN)を指定します。詳細については、 Amazon S3へのセキュアアクセスの構成 をご参照ください。
STORAGE_BASE_URL = 's3://bucket[/path/]'
クラウドストレージの場所のベース URL を指定します。
bucket
は、データファイルを保存するS3バケットの名前です。
path
は、バケット内のオブジェクトを細かく制御するために使用できるオプションのパスです。重要
外部カタログを使用するIcebergテーブルを作成するには、ParquetデータファイルとIcebergメタデータファイルが
STORAGE_BASE_URL
の場所にある必要があります。
STORAGE_AWS_EXTERNAL_ID = 'external_id'
オプションで、Snowflakeが AWS との信頼関係を確立するために使用する外部 ID を指定します。この外部ボリュームに設定した IAM ロールの信頼ポリシーで、同じ外部 ID を指定する必要があります。詳細については、 サードパーティに AWS リソースへのアクセスを許可する場合の外部 ID の使用方法 をご参照ください。
このパラメーターに値を指定しない場合、Snowflakeは外部ボリュームの作成時に自動的に外部 ID を生成します。
ENCRYPTION = ( [ TYPE = 'AWS_SSE_S3' ] | [ TYPE = 'AWS_SSE_KMS' [ KMS_KEY_ID = 'string' ] ] | [ TYPE = 'NONE' ] )
外部ボリューム上のデータを暗号化するために必要なプロパティを指定します。
TYPE = ...
使用される暗号化タイプを指定します。可能な値は次のとおりです。
AWS_SSE_S3
: S3が管理する暗号化キーを使ったサーバー側の暗号化。詳細については、 Amazon S3が管理する暗号化キー(SSE-S3)を使用したサーバー側暗号化の使用 をご覧ください。
AWS_SSE_KMS
: KMS に格納されたキーを使用したサーバー側の暗号化。詳細については、 AWS キー管理サービス(SSE-KMS)を使用したサーバー側暗号化の使用 をご覧ください。
NONE
:暗号化なし。KMS_KEY_ID = 'string'
(AWS_SSE_KMS
暗号化のみに適用)オプションで、バケットに 書き込まれた ファイルの暗号化に使用する AWS KMS が管理するキーの ID を指定します。値が指定されていない場合、デフォルトの KMS キーを使用して、データの書き込み時にファイルが暗号化されます。
この値はデータの読み込み時には無視されことに注意してください。
Google Cloud Storage
STORAGE_PROVIDER = 'GCS'
データファイルを保存するクラウドストレージプロバイダーを指定します。
STORAGE_BASE_URL = 'gcs://bucket[/path/]'
クラウドストレージの場所のベース URL を指定します。
bucket
は、データファイルを保存するCloud Storageバケットの名前です。
path
は、バケット内のオブジェクトを細かく制御するために使用できるオプションのパスです。重要
外部カタログを使用するIcebergテーブルを作成するには、ParquetデータファイルとIcebergメタデータファイルが
STORAGE_BASE_URL
の場所にある必要があります。ENCRYPTION = ( [ TYPE = 'GCS_SSE_KMS' ] [ KMS_KEY_ID = 'string' ] | [ TYPE = 'NONE' ] )
外部ボリューム上のデータを暗号化するために必要なプロパティを指定します。
TYPE = ...
使用される暗号化タイプを指定します。可能な値は次のとおりです。
GCS_SSE_KMS
: KMS に格納されたキーを使用したサーバー側の暗号化。詳細については、 顧客管理暗号化キー をご覧ください。
NONE
:暗号化なし。KMS_KEY_ID = 'string'
(GCS_SSE_KMS
暗号化のみに適用)バケットに 書き込まれた ファイルの暗号化に使用するCloud KMS 管理キーの ID を指定します。
この値はデータの読み込み時には無視されことに注意してください。サービスアカウントにデータと指定された KMS キーに対して十分な権限がある場合、読み取り操作は成功するはずです。
Microsoft Azure
STORAGE_PROVIDER = 'AZURE'
データファイルを保存するクラウドストレージプロバイダーを指定します。
AZURE_TENANT_ID = 'tenant_id'
許可およびブロックされたストレージアカウントが属するOffice 365テナントの ID を指定します。外部ボリュームは1つのテナントのみを認証できるため、許可およびブロックされたストレージの場所は、このテナントに属するすべてストレージアカウントを参照する必要があります。
テナント ID を見つけるには、Azureポータルにログインして Azure Active Directory » Properties をクリックします。テナント ID が Tenant ID フィールドに表示されます。
STORAGE_BASE_URL = 'azure://account.blob.core.windows.net/container[/path/]'
クラウドストレージの場所のベース URL を指定します。
account
はAzureアカウント名で、例えばmyaccount
です。
container
は、データファイルを保存するAzureコンテナーの名前です。
path
は、コンテナー内の論理ディレクトリを細かく制御するために使用できるオプションのパスです。注釈
プレフィックスには、
https://
ではなくazure://
を使用します。重要
外部カタログを使用するIcebergテーブルを作成するには、ParquetデータファイルとIcebergメタデータファイルが
STORAGE_BASE_URL
の場所にある必要があります。
アクセス制御の要件¶
この SQL コマンドの実行に使用される ロール には、少なくとも次の 権限 が必要です。
権限 |
オブジェクト |
メモ |
---|---|---|
CREATE EXTERNAL VOLUME |
アカウント |
Only the ACCOUNTADMIN role has this privilege by default. The privilege can be granted to additional roles as needed. |
指定された権限のセットを使用してカスタムロールを作成する手順については、 カスタムロールの作成 をご参照ください。
セキュリティ保護可能なオブジェクト に対して SQL アクションを実行するためのロールと権限付与に関する一般的な情報については、 アクセス制御の概要 をご参照ください。
使用上の注意¶
重要
Amazon S3ストレージの外部ボリュームのみ: 外部ボリュームを再作成する場合(CREATE OR REPLACE EXTERNAL VOLUME 構文を使用)、Snowflakeアカウントの AWS IDおよびアクセス管理(IAM)ユーザーに、S3ストレージの場所に必要なアクセス許可を付与する手順を繰り返す必要があります。手順については、 ステップ5: Snowflakeアカウントの AWS IAM ユーザーを取得する で始まるステップをご参照ください。
メタデータについて:
注意
Snowflakeサービスを使用する場合、お客様は、個人データ(ユーザーオブジェクト向け以外)、機密データ、輸出管理データ、またはその他の規制されたデータがメタデータとして入力されていないことを確認する必要があります。詳細については、 Snowflakeのメタデータフィールド をご参照ください。
CREATE OR REPLACE <オブジェクト> ステートメントはアトミックです。つまり、オブジェクトが置き換えられると、単一のトランザクションで、古いオブジェクトが削除されて新しいオブジェクトが作成されます。
例¶
次の例は、異なるクラウドプロバイダーのストレージの場所を定義する外部ボリュームを作成しています。
Amazon S3
次の例は、暗号化されたAmazon S3ストレージの場所を定義する外部ボリュームを作成しています。
CREATE OR REPLACE EXTERNAL VOLUME exvol
STORAGE_LOCATIONS =
(
(
NAME = 'my-s3-us-west-2'
STORAGE_PROVIDER = 'S3'
STORAGE_BASE_URL = 's3://MY_EXAMPLE_BUCKET/'
STORAGE_AWS_ROLE_ARN = 'arn:aws:iam::123456789012:role/myrole'
ENCRYPTION=(TYPE='AWS_SSE_KMS' KMS_KEY_ID='1234abcd-12ab-34cd-56ef-1234567890ab')
)
);
Google Cloud Storage
次の例は、暗号化された GCS ストレージの場所を定義する外部ボリュームを作成しています。
CREATE EXTERNAL VOLUME exvol
STORAGE_LOCATIONS =
(
(
NAME = 'my-us-east-1'
STORAGE_PROVIDER = 'GCS'
STORAGE_BASE_URL = 'gcs://mybucket1/path1/'
ENCRYPTION=(TYPE='GCS_SSE_KMS' KMS_KEY_ID = '1234abcd-12ab-34cd-56ef-1234567890ab')
)
);
Microsoft Azure
次の例は、暗号化されたAzureストレージの場所を定義する外部ボリュームを作成しています。
CREATE EXTERNAL VOLUME exvol
STORAGE_LOCATIONS =
(
(
NAME = 'my-azure-northeurope'
STORAGE_PROVIDER = 'AZURE'
STORAGE_BASE_URL = 'azure://exampleacct.blob.core.windows.net/my_container_northeurope/'
AZURE_TENANT_ID = 'a123b4c5-1234-123a-a12b-1a23b45678c9'
)
);