CREATE EXTERNAL VOLUME

アカウントの Icebergテーブル 用に新しい 外部ボリューム を作成するか、既存の外部ボリュームを置き換えます。

こちらもご参照ください。

ALTER EXTERNAL VOLUMEDROP EXTERNAL VOLUMESHOW EXTERNAL VOLUMESDESCRIBE 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>' ]
Copy

条件:

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' ] ) ]
Copy
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' ] ) ]
Copy
cloudProviderParams (for Microsoft Azure) ::=
  STORAGE_PROVIDER = 'AZURE'
  AZURE_TENANT_ID = '<tenant_id>'
  STORAGE_BASE_URL = 'azure://<account>.blob.core.windows.net/<container>[/<path>/]'
Copy

必須パラメーター

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 = ...

使用される暗号化タイプを指定します。可能な値は次のとおりです。

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')
        )
      );
Copy

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')
      )
    );
Copy

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'
      )
    );
Copy