CREATE EXTERNAL VOLUME

Erstellt ein neues externes Volume für Iceberg-Tabellen im Konto oder ersetzt ein vorhandenes externes Volume.

Siehe auch:

ALTER EXTERNAL VOLUME, DROP EXTERNAL VOLUME, SHOW EXTERNAL VOLUMES, DESCRIBE EXTERNAL VOLUME

Unter diesem Thema:

Syntax

CREATE [ OR REPLACE ] EXTERNAL VOLUME [IF NOT EXISTS]
  <name>
  STORAGE_LOCATIONS =
    (
      (
        NAME = '<storage_location_name>'
        cloudProviderParams
      )
      [, (...), ...]
    )
  [ ALLOW_WRITES = { TRUE | FALSE }]
  [ COMMENT = '<string_literal>' ]
Copy

Wobei:

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

Erforderliche Parameter

storage_location_name

Zeichenfolge, die den Bezeichner (den Namen) für das externe Volume angibt. Muss in Ihrem Konto eindeutig sein.

Der Bezeichner muss mit einem Buchstaben beginnen und darf keine Leer- oder Sonderzeichen enthalten, es sei denn, die gesamte Bezeichnerzeichenfolge wird in doppelte Anführungszeichen gesetzt (z. B. "My object"). Bei Bezeichnern, die in doppelte Anführungszeichen eingeschlossen sind, ist auch die Groß-/Kleinschreibung zu beachten.

Weitere Details dazu finden Sie unter Anforderungen an Bezeichner.

STORAGE_LOCATIONS = ( ( NAME = 'name' cloudProviderParams ) [, (...), ...] )

Ein Satz von benannten Cloudspeicherorten in unterschiedlichen Regionen und, optional, auf unterschiedlichen Cloudplattformen.

Bemerkung

  • Während des Vorschauzeitraums unterstützt jedes externe Volume, das Sie erstellen, einen einzigen aktiven Speicherort.

  • Cloud- und regionsübergreifende Tabellen werden derzeit nicht unterstützt, wenn Sie Snowflake als Iceberg-Katalog verwenden.

Optionale Parameter

ALLOW_WRITES = '{ TRUE | FALSE }'

Gibt an, ob Schreiboperationen für das externe Volume erlaubt sind; muss bei Iceberg-Tabellen, die Snowflake als Katalog verwenden, auf TRUE gesetzt werden.

Der Wert dieses Parameters muss auch mit den Berechtigungen übereinstimmen, die Sie für das Cloudspeicherkonto für jeden angegebenen Speicherort festgelegt haben.

Standard: TRUE

COMMENT = 'string_literal'

Zeichenfolge (Literal), die einen Kommentar zum externen Volume enthält.

Standard: Kein Wert

Cloudanbieterparameter (cloudProviderParams)

Bemerkung

Die KMS-Schlüssel werden vom Eigentümer des Speichers in Amazon S3- oder Google Cloud Storage-Instanzen verwaltet. Die Dienstprinzipale (IAM-Rolle und GCS-Dienstkonto) müssen zur Verwendung von KMS-Schlüsseln berechtigt sein. Weitere Informationen dazu finden Sie unter Konfigurieren eines externen Volumes für Iceberg-Tabellen.

Amazon S3

STORAGE_PROVIDER = 'S3'

Gibt den Cloudspeicheranbieter an, der Ihre Datendateien speichert.

STORAGE_AWS_ROLE_ARN = 'iam_role'

Gibt den Amazon Resource Name (ARN) der AWS-Rolle für Identitäts- und Zugriffsverwaltung (IAM) an, die Berechtigungen für den S3-Bucket mit Ihren Datendateien gewährt. Weitere Informationen dazu finden Sie unter Konfigurieren des sicheren Zugriffs auf Amazon S3.

STORAGE_BASE_URL = 's3://bucket[/path/]'

Gibt die Basis-URL für Ihren Cloudspeicherort an, wobei:

  • bucket ist der Name des S3-Buckets, in dem Ihre Datendateien gespeichert sind.

  • path ist ein optionaler Pfad, mit dem Sie Objekte im Bucket genauer steuern können.

Wichtig

Um eine Iceberg-Tabelle zu erstellen, die einen externen Katalog verwendet, müssen sich Ihre Parquet-Datendateien und Iceberg-Metadatendateien innerhalb des Speicherorts STORAGE_BASE_URL befinden.

STORAGE_AWS_EXTERNAL_ID = 'external_id'

Gibt optional eine externe ID an, die Snowflake verwendet, um eine Vertrauensstellung mit AWS aufzubauen. Sie müssen dieselbe externe ID in der Vertrauensrichtlinie der IAM-Rolle angeben, die Sie für dieses externe Volume konfiguriert haben. Weitere Informationen finden Sie unter Verwenden einer externen ID beim Gewähren des Zugriff auf AWS-Ressourcen für Dritte.

Wenn Sie keinen Wert für diesen Parameter angeben, generiert Snowflake beim Erstellen des externen Volumes automatisch eine externe ID.

ENCRYPTION = ( [ TYPE = 'AWS_SSE_S3' ] | [ TYPE = 'AWS_SSE_KMS' [ KMS_KEY_ID = 'string' ] ] | [ TYPE = 'NONE' ] )

Gibt die Eigenschaften an, die zur Verschlüsselung von Daten auf dem externen Volume erforderlich sind.

TYPE = ...

Gibt den verwendeten Verschlüsselungstyp an. Mögliche Werte sind:

KMS_KEY_ID = 'string' (gilt nur für AWS_SSE_KMS-Verschlüsselung)

Gibt optional die ID für den AWS-KMS-verwalteten Schlüssel an, der zum Verschlüsseln von Dateien verwendet wird, die in den Bucket geschrieben wurden. Wenn kein Wert angegeben wird, werden die Dateien zum Schreiben von Daten mit Ihrem standardmäßigen KMS-Schlüssel verschlüsselt.

Beachten Sie, dass dieser Wert beim Lesen von Daten ignoriert wird.

Google Cloud Storage

STORAGE_PROVIDER = 'GCS'

Gibt den Cloudspeicheranbieter an, der Ihre Datendateien speichert.

STORAGE_BASE_URL = 'gcs://bucket[/path/]'

Gibt die Basis-URL für Ihren Cloudspeicherort an, wobei:

  • bucket ist der Name eines Cloud Storage-Buckets, in dem Ihre Datendateien gespeichert sind.

  • path ist ein optionaler Pfad, mit dem Sie Objekte im Bucket genauer steuern können.

Wichtig

Um eine Iceberg-Tabelle zu erstellen, die einen externen Katalog verwendet, müssen sich Ihre Parquet-Datendateien und Iceberg-Metadatendateien innerhalb des Speicherorts STORAGE_BASE_URL befinden.

ENCRYPTION = ( [ TYPE = 'GCS_SSE_KMS' ] [ KMS_KEY_ID = 'string' ] | [ TYPE = 'NONE' ] )

Gibt die Eigenschaften an, die zur Verschlüsselung von Daten auf dem externen Volume erforderlich sind.

TYPE = ...

Gibt den verwendeten Verschlüsselungstyp an. Mögliche Werte sind:

KMS_KEY_ID = 'string' (gilt nur für GCS_SSE_KMS-Verschlüsselung)

Gibt die ID für den Cloud-KMS-verwalteten Schlüssel an, der zum Verschlüsseln von Dateien verwendet wird, die in den Bucket geschrieben wurden.

Beachten Sie, dass dieser Wert beim Lesen von Daten ignoriert wird. Die Leseoperation sollte erfolgreich sein, wenn das Dienstkonto über ausreichende Berechtigungen für die Daten und alle angegebenen KMS-Schlüssel verfügt.

Microsoft Azure

STORAGE_PROVIDER = 'AZURE'

Gibt den Cloudspeicheranbieter an, der Ihre Datendateien speichert.

AZURE_TENANT_ID = 'tenant_id'

Gibt die ID Ihres Office 365-Mandanten an, zu dem die zulässigen und gesperrten Speicherkonten gehören. Die Authentifizierung eines externen Volumes kann nur für einen einzigen Mandanten erfolgen. Daher müssen sich die zulässigen und blockierten Speicherorte auf Speicherkonten beziehen, die alle zu diesem einen Mandanten gehören.

Melden Sie sich beim Azure-Portal an, und klicken Sie auf Azure Active Directory » Properties, um Ihre Mandanten-ID zu ermitteln. Die Mandanten-ID wird im Feld Tenant ID angezeigt.

STORAGE_BASE_URL = 'azure://account.blob.core.windows.net/container[/path/]'

Gibt die Basis-URL für Ihren Cloudspeicherort an, wobei:

  • account ist der Name Ihres Azure-Kontos, z. B. myaccount.

  • container ist der Name des Azure-Containers, in dem Ihre Datendateien gespeichert sind.

  • path ist ein optionaler Pfad, mit dem Sie logische Verzeichnisse im Container genauer steuern können.

Bemerkung

Verwenden Sie das Präfix azure:// und nicht https://.

Wichtig

Um eine Iceberg-Tabelle zu erstellen, die einen externen Katalog verwendet, müssen sich Ihre Parquet-Datendateien und Iceberg-Metadatendateien innerhalb des Speicherorts STORAGE_BASE_URL befinden.

Anforderungen an die Zugriffssteuerung

Eine Rolle, die zur Ausführung dieses SQL-Befehls verwendet wird, muss mindestens die folgenden Berechtigungen haben:

Berechtigung

Objekt

Anmerkungen

CREATE EXTERNAL VOLUME

Konto

Only the ACCOUNTADMIN role has this privilege by default. The privilege can be granted to additional roles as needed.

Eine Anleitung zum Erstellen einer kundenspezifischen Rolle mit einer bestimmten Gruppe von Berechtigungen finden Sie unter Erstellen von kundenspezifischen Rollen.

Allgemeine Informationen zu Rollen und Berechtigungen zur Durchführung von SQL-Aktionen auf sicherungsfähigen Objekten finden Sie unter Übersicht zur Zugriffssteuerung.

Nutzungshinweise

Wichtig

Nur externe Volumes in Amazon S3-Speicher: Wenn Sie ein externes Volume neu erstellen (unter Verwendung der CREATE OR REPLACE EXTERNAL VOLUME-Syntax), müssen Sie die Schritte wiederholen, mit denen Sie dem AWS-Benutzer für die Identitäts- und Zugriffsverwaltung (IAM) Ihres Snowflake-Kontos die erforderlichen Zugriffsberechtigungen für den S3-Storage erteilt haben. Eine Anleitung dazu finden Sie ab den Schritten, die mit Schritt 5: AWS-IAM-Benutzer für Ihr Snowflake-Konto abrufen beginnen.

  • Metadaten:

    Achtung

    Kunden müssen sicherstellen, dass bei der Nutzung des Snowflake-Dienstes keine personenbezogenen Daten (außer für ein Objekt „Benutzer“), sensible Daten, exportkontrollierte Daten oder andere regulierte Daten als Metadaten eingegeben werden. Weitere Informationen dazu finden Sie unter Metadatenfelder in Snowflake.

  • CREATE OR REPLACE <Objekt>-Anweisungen sind atomar. Das heißt, wenn ein Objekt ersetzt wird, erfolgt das Löschen des alten Objekts und das Erstellen des neuen Objekts in einer einzigen Transaktion.

Beispiele

In den folgenden Beispielen werden externe Volumes erstellt, die Speicherorte bei verschiedenen Cloudanbietern definieren:

Amazon S3

Im folgenden Beispiel wird ein externes Volume erstellt, das einen Amazon S3-Speicherort mit Verschlüsselung definiert:

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

Im folgenden Beispiel wird ein externes Volume erstellt, das einen GCS-Speicherort mit Verschlüsselung definiert:

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

Im folgenden Beispiel wird ein externes Volume erstellt, das einen Azure-Speicherort mit Verschlüsselung definiert:

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