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>' ]
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' ] ) ]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>/]'
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:
AWS_SSE_S3
: Serverseitige Verschlüsselung mit S3-verwalteten Verschlüsselungsschlüsseln. Weitere Informationen dazu finden Sie unter Verwenden der serverseitigen Verschlüsselung mit Amazon S3-verwalteten Verschlüsselungsschlüsseln (SSE-S3).
AWS_SSE_KMS
: Serverseitige Verschlüsselung mit in KMS gespeicherten Schlüsseln. Weitere Informationen dazu finden Sie unter Verwenden der serverseitigen Verschlüsselung mit AWS Key Management Service (SSE-KMS).
NONE
: Keine Verschlüsselung.KMS_KEY_ID = 'string'
(gilt nur fürAWS_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:
GCS_SSE_KMS
: Serverseitige Verschlüsselung mit in KMS gespeicherten Schlüsseln. Weitere Informationen dazu finden Sie unter vom Kunden verwaltete Verschlüsselungsschlüssel.
NONE
: Keine Verschlüsselung.KMS_KEY_ID = 'string'
(gilt nur fürGCS_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 nichthttps://
.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')
)
);
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')
)
);
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'
)
);