CREATE STORAGE INTEGRATION

Erstellt eine neue Speicherintegration im Konto oder ersetzt eine vorhandene Integration.

Eine Speicherintegration ist ein Snowflake-Objekt, das eine generierte Identitäts- und Zugriffsverwaltungsentität (IAM) für Ihren externen Cloudspeicher zusammen mit einem optionalen Satz zulässiger oder blockierter Speicherorte (Amazon S3, Microsoft Azure oder Google Cloud Storage) speichert. Cloudanbieter-Administratoren in Ihrer Organisation erteilen der generierten Entität Berechtigungen für die Speicherorte. Dank dieser Option müssen Benutzer beim Erstellen von Stagingbereichen oder beim Laden/Entladen von Daten keine Anmeldeinformationen eingeben.

Eine einzelne Speicherintegration kann mehrere externe Stagingbereiche unterstützen. Die URL in der Stagingbereichsdefinition muss mit den für den Parameter STORAGE_ALLOWED_LOCATIONS angegebenen Speicherort übereinstimmen.

Bemerkung

  • Speicherintegrationen können so konfiguriert werden, dass sie Cloudspeicher von Amazon S3, Microsoft Azure oder Google Cloud Storage unterstützen, unabhängig davon, bei welchem Cloudanbieter Ihr Snowflake-Konto gehostet wird. Wenn sich Ihr Cloudspeicher auf einer anderen Cloudplattform als Ihr Snowflake-Konto befindet, muss sich der Speicherort in der öffentlichen Cloud (Public Cloud) und nicht in einer virtuellen privaten Umgebung befinden.

    Cloudanbieter berechnen Gebühren für Daten, die aus dem eigenen Netzwerk heraus übertragen werden. Um diese Kosten wieder hereinzuholen, erhebt Snowflake eine Byte-abhängige Gebühr, wenn Sie Daten aus Snowflake (gehostet auf Amazon Web Services (AWS), Microsoft Azure oder Google Cloud Platform) in den externen Stagingbereich einer anderen Region oder eines anderen Cloudanbieters entladen. Snowflake berechnet keine Gebühren für eingehende Daten (z. B. beim Laden von Daten in Snowflake). Weitere Informationen dazu finden Sie auf der Preisseite (auf der Snowflake-Website).

  • Derzeit ist der Zugriff auf Cloudspeicher in einer Region für Regierungsbehörden unter Verwendung einer Speicherintegration auf Snowflake-Konten beschränkt, die in derselben Regierungsregion gehostet werden. Der Zugriff auf Ihren Cloudspeicher von einem Konto, das außerhalb der Region der Regierungsbehörden gehostet wird, wird unter Verwendung direkter Anmeldeinformationen aber unterstützt.

Siehe auch:

ALTER STORAGE INTEGRATION, DROP INTEGRATION, SHOW INTEGRATIONS

Syntax

CREATE [ OR REPLACE ] STORAGE INTEGRATION [IF NOT EXISTS]
  <name>
  TYPE = EXTERNAL_STAGE
  cloudProviderParams
  ENABLED = { TRUE | FALSE }
  STORAGE_ALLOWED_LOCATIONS = ('<cloud>://<bucket>/<path>/' [ , '<cloud>://<bucket>/<path>/' ... ] )
  [ STORAGE_BLOCKED_LOCATIONS = ('<cloud>://<bucket>/<path>/' [ , '<cloud>://<bucket>/<path>/' ... ] ) ]
  [ COMMENT = '<string_literal>' ]
Copy

Wobei:

cloudProviderParams (for Amazon S3) ::=
  STORAGE_PROVIDER = 'S3'
  STORAGE_AWS_ROLE_ARN = '<iam_role>'
  [ STORAGE_AWS_EXTERNAL_ID = '<external_id>' ]
  [ STORAGE_AWS_OBJECT_ACL = 'bucket-owner-full-control' ]
Copy
cloudProviderParams (for Google Cloud Storage) ::=
  STORAGE_PROVIDER = 'GCS'
Copy
cloudProviderParams (for Microsoft Azure) ::=
  STORAGE_PROVIDER = 'AZURE'
  AZURE_TENANT_ID = '<tenant_id>'
Copy

Erforderliche Parameter

name

Zeichenfolge, die den Bezeichner (d. h. den Namen) für die Integration angibt. Muss in Ihrem Konto eindeutig sein.

Darüber hinaus muss der Bezeichner 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.

TYPE = EXTERNAL_STAGE

Geben Sie den Typ der Integration an:

  • EXTERNAL_STAGE: Erstellt eine Schnittstelle zwischen Snowflake und einem externen Cloudspeicherort.

ENABLED = TRUE | FALSE

Gibt an, ob diese Speicherintegration für die Nutzung in Stagingbereichen verfügbar ist.

  • TRUE ermöglicht Benutzern das Erstellen neuer Stagingbereiche, die auf diese Integration verweisen. Bestehende Stagingbereiche, die auf diese Integration verweisen, funktionieren normal.

  • FALSE verhindert, dass Benutzer neue Stagingbereiche erstellen, die auf diese Integration verweisen. Bestehende Stagingbereiche, die auf diese Integration verweisen, können nicht auf den Speicherort in der Stagingbereichsdefinition zugreifen.

STORAGE_ALLOWED_LOCATIONS = ('cloud_specific_url')

Schränkt externe Stagingbereiche, die die Integration verwenden, explizit darauf ein, auf einen oder mehrere Speicherorte zu verweisen (d. h. S3-Bucket, GCS-Bucket oder Azure-Container) Unterstützt eine durch Kommas getrennte Liste von URLs für vorhandene Buckets und optional Pfade zum Speichern von Datendateien für das Laden/Entladen. Unterstützt alternativ den Platzhalter * mit der Bedeutung „Zugriff auf alle Buckets und/oder Pfade zulassen“.

Beachten Sie Folgendes: Wenn der Wert STORAGE_ALLOWED_LOCATIONS einen bestimmten Speicherort einschließt, müssen alle Unterpfade am selben Speicherort erlaubt sein. In einem STORAGE_BLOCKED_LOCATIONS-Wert kann kein Unterpfad enthalten sein. Beispiel: Wenn STORAGE_ALLOWED_LOCATIONS den Pfad storage_location/ enthält, kann STORAGE_BLOCKED_LOCATIONS nicht storage_location/path1/ enthalten. Wenn STORAGE_ALLOWED_LOCATIONS also storage_location/path1/ enthält, kann STORAGE_BLOCKED_LOCATIONS nicht storage_location/path1/path2/ enthalten, und so weiter.

Amazon S3

STORAGE_ALLOWED_LOCATIONS = ( 's3://bucket/path/' [ , 's3://bucket/path/' ... ] ) | STORAGE_ALLOWED_LOCATIONS = ( 's3gov://bucket/path/' [ , 's3gov://bucket/path/' ... ] )

  • Das Präfix s3 bezieht sich auf S3-Speicher in öffentlichen AWS-Regionen.

    Das Präfix s3gov bezieht sich auf S3-Speicher in Regionen für Regierungsbehörden.

  • bucket ist der Name des S3-Buckets, in dem Ihre Datendateien gespeichert sind (z. B. mybucket).

  • path ist ein optionaler Pfad mit Unterscheidung von Groß-/Kleinschreibung für Dateien am Cloudspeicherort (d. h. Dateien haben Namen, die mit einer gemeinsamen Zeichenfolge beginnen), wodurch der Zugriff auf bestimmte Dateien eingegrenzt wird. Pfade werden von den verschiedenen Cloudspeicherdiensten alternativ als Präfixe oder Ordner bezeichnet.

Google Cloud Storage

STORAGE_ALLOWED_LOCATIONS = ( 'gcs://bucket/path/' [ , 'gcs://bucket/path/' ... ] )

  • bucket ist der Name des GCS-Buckets, in dem Ihre Datendateien gespeichert sind (z. B. mybucket).

  • path ist ein optionaler Pfad mit Unterscheidung von Groß-/Kleinschreibung für Dateien am Cloudspeicherort (d. h. Dateien haben Namen, die mit einer gemeinsamen Zeichenfolge beginnen), wodurch der Zugriff auf bestimmte Dateien eingegrenzt wird. Pfade werden von den verschiedenen Cloudspeicherdiensten alternativ als Präfixe oder Ordner bezeichnet.

Microsoft Azure

STORAGE_ALLOWED_LOCATIONS = ( 'azure://account.blob.core.windows.net/container/path/' [ , 'azure://account.blob.core.windows.net/container/path/' ... ] )

  • account ist der Name des Azure-Speicherkontos (z. B. myaccount). Verwenden Sie den Endpunkt blob.core.windows.net für alle unterstützten Typen von Azure-Blob-Speicherkonten, einschließlich Data Lake Storage Gen2.

  • container ist der Name des Azure Blobspeicher-Containers, in dem Ihre Datendateien gespeichert sind (z. B. mycontainer).

  • path ist ein optionaler Pfad mit Unterscheidung von Groß-/Kleinschreibung für Dateien am Cloudspeicherort (d. h. Dateien haben Namen, die mit einer gemeinsamen Zeichenfolge beginnen), wodurch der Zugriff auf bestimmte Dateien eingegrenzt wird. Pfade werden von den verschiedenen Cloudspeicherdiensten alternativ als Präfixe oder Ordner bezeichnet.

Optionale Parameter

STORAGE_BLOCKED_LOCATIONS = ('cloud_specific_url')

Verhindert ausdrücklich, dass externe Stagingbereiche, die die Integration verwenden, auf einen oder mehrere Speicherorte verweisen (d. h. S3-Buckets oder GCS-Buckets). Unterstützt eine durch Kommas getrennte Liste von URLs für vorhandene Speicherorte und optional Pfade zum Speichern von Datendateien für das Laden/Entladen. Wird häufig verwendet, wenn STORAGE_ALLOWED_LOCATIONS auf den Platzhalter * gesetzt ist, sodass Zugriff auf alle Buckets in Ihrem Konto mit Ausnahme von gesperrten Speicherorten und (optional) Pfaden zulässig ist.

Bemerkung

Achten Sie darauf, nur URLs für einzelne Cloudspeicherorte in Anführungszeichen zu setzen. Wenn Sie den gesamten STORAGE_BLOCKED_LOCATIONS-Wert in Anführungszeichen einschließen, ist der Wert ungültig. Dadurch wird die Parametereinstellung STORAGE_BLOCKED_LOCATIONS ignoriert, wenn Benutzer Stagingbereiche erstellen, die auf die Speicherintegration verweisen.

Amazon S3

STORAGE_BLOCKED_LOCATIONS = ( 's3://bucket/path/' [ , 's3://bucket/path/' ... ] ) | STORAGE_ALLOWED_LOCATIONS = ( 's3gov://bucket/path/' [ , 's3gov://bucket/path/' ... ] )

  • Das Präfix s3 bezieht sich auf S3-Speicher in öffentlichen AWS-Regionen.

    Das Präfix s3gov bezieht sich auf S3-Speicher in Regionen für Regierungsbehörden.

  • bucket ist der Name des S3-Buckets, in dem Ihre Datendateien gespeichert sind (z. B. mybucket).

  • path ist ein optionaler Pfad (oder ein Verzeichnis) im Bucket, der bzw. das den Zugriff auf Datendateien weiter einschränkt.

Google Cloud Storage

STORAGE_BLOCKED_LOCATIONS = ( 'gcs://bucket/path/' [ , 'gcs://bucket/path/' ... ] )

  • bucket ist der Name des GCS-Buckets, in dem Ihre Datendateien gespeichert sind (z. B. mybucket).

  • path ist ein optionaler Pfad (oder ein Verzeichnis) im Bucket, der bzw. das den Zugriff auf Datendateien weiter einschränkt.

Microsoft Azure

STORAGE_BLOCKED_LOCATIONS = ( 'azure://account.blob.core.windows.net/container/path/' [ , 'azure://account.blob.core.windows.net/container/path/' ... ] )

  • account ist der Name des Azure-Speicherkontos (z. B. myaccount).

  • container ist der Name des Azure Blobspeicher-Containers, in dem Ihre Datendateien gespeichert sind (z. B. mycontainer).

  • path ist ein optionaler Pfad (oder ein Verzeichnis) im Bucket, der bzw. das den Zugriff auf Datendateien weiter einschränkt.

COMMENT = 'string_literal'

Zeichenfolge (Literal), die einen Kommentar zur Integration enthält.

Standard: Kein Wert

Cloudanbieterparameter (cloudProviderParams)

Amazon S3

STORAGE_PROVIDER = { S3 | S3GOV }

Gibt den Cloudspeicheranbieter an, der Ihre Datendateien speichert:

  • S3: S3-Speicher in öffentlichen AWS-Regionen.

  • S3GOV: S3-Speicher in AWS-Regionen für Regierungsbehörden.

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_AWS_EXTERNAL_ID = 'external_id'

Gibt optional eine externe ID an, die Snowflake verwendet, um eine Vertrauensstellung mit AWS aufzubauen. Sie müssen in der Vertrauensrichtlinie der IAM-Rolle, die Sie für diese Speicherintegration konfiguriert haben, dieselbe externe ID angeben. 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 der Speicherintegration automatisch eine externe ID.

STORAGE_AWS_OBJECT_ACL = 'bucket-owner-full-control'

Aktiviert die Unterstützung von AWS-Zugriffssteuerungslisten (ACLs), um dem Bucket-Eigentümer volle Kontrolle zu gewähren. Dateien, die in Amazon S3-Buckets aus entladenen Tabellendaten erstellt werden, sind Eigentum einer AWS-Rolle für Identitäts- und Zugriffsmanagement (IAM). ACLs unterstützen den Anwendungsfall, bei dem IAM-Rollen in einem AWS-Konto für den Zugriff auf S3-Buckets in einem oder mehreren anderen AWS-Konten konfiguriert sind. Ohne ACL-Unterstützung konnten Benutzer in Konten von Bucket-Eigentümern nicht auf die Datendateien zugreifen, die mithilfe einer Speicherintegration in einen externen (S3) Stagingbereich entladen wurden.

Wenn Benutzer Snowflake-Tabellendaten in Datendateien in einem S3-Stagingbereich mit COPY INTO <Speicherort> entladen, wendet die Entladeoperation eine ACL auf die entladenen Datendateien an. Die Datendateien wenden die Berechtigung "s3:x-amz-acl":"bucket-owner-full-control" auf die Dateien an und gewähren dem Besitzer des S3-Buckets volle Kontrolle über sie.

Google Cloud Storage

STORAGE_PROVIDER = 'GCS'

Gibt den Cloudspeicheranbieter an, der Ihre Datendateien speichert.

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 einer Speicherintegration kann nur für einen einzigen Mandanten erfolgen. Daher müssen sich die zulässigen und blockierten Speicherorte auf Speicherkonten beziehen, die alle 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.

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 INTEGRATION

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

Vorsicht

Durch das Neuerstellen einer Speicherintegration (mithilfe von CREATE OR REPLACE STORAGE INTEGRATION) wird die Zuordnung zwischen der Speicherintegration und jedem Stagingbereich, der auf sie verweist, aufgehoben. Grund ist, dass ein Stagingbereich mit einer Speicherintegration verknüpft ist, wobei anstelle des Namens der Speicherintegration eine ausgeblendete ID verwendet wird. Im Hintergrund löscht die CREATE OR REPLACE-Syntax das Objekt und erstellt es mit einer anderen verborgenen ID neu.

Wenn Sie eine Speicherintegration neu erstellen müssen, nachdem diese mit einer oder mehreren Stagingbereichen verknüpft wurde, müssen Sie die Zuordnung zwischen einem Stagingbereich und der Speicherintegration neu einrichten, indem Sie ALTER STAGE stage_name SET STORAGE_INTEGRATION = storage_integration_name ausführen, wobei:

  • stage_name ist der Name des Stagingbereichs.

  • storage_integration_name ist der Name der Speicherintegration.

  • 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

Im folgenden Beispiel wird eine Integration erstellt, die externe Stagingbereiche, die die Integration nutzen, explizit darauf beschränkt, auf einen von zwei Buckets und Pfaden zu verweisen:

Amazon S3

CREATE STORAGE INTEGRATION s3_int
  TYPE = EXTERNAL_STAGE
  STORAGE_PROVIDER = 'S3'
  STORAGE_AWS_ROLE_ARN = 'arn:aws:iam::001234567890:role/myrole'
  ENABLED = TRUE
  STORAGE_ALLOWED_LOCATIONS = ('s3://mybucket1/path1/', 's3://mybucket2/path2/');
Copy

Google Cloud Storage

CREATE STORAGE INTEGRATION gcs_int
  TYPE = EXTERNAL_STAGE
  STORAGE_PROVIDER = 'GCS'
  ENABLED = TRUE
  STORAGE_ALLOWED_LOCATIONS = ('gcs://mybucket1/path1/', 'gcs://mybucket2/path2/');
Copy

Microsoft Azure

CREATE STORAGE INTEGRATION azure_int
  TYPE = EXTERNAL_STAGE
  STORAGE_PROVIDER = 'AZURE'
  ENABLED = TRUE
  AZURE_TENANT_ID = '<tenant_id>'
  STORAGE_ALLOWED_LOCATIONS = ('azure://myaccount.blob.core.windows.net/mycontainer/path1/', 'azure://myaccount.blob.core.windows.net/mycontainer/path2/');
Copy

Im folgenden Beispiel wird eine Integration erstellt, die es externen Stagingbereichen, die die Integration nutzen, erlaubt, auf einen beliebigen Bucket und Pfad in Ihrem Konto zu verweisen, mit Ausnahme von solchen, die explizit gesperrt sind:

Amazon S3

CREATE STORAGE INTEGRATION s3_int
  TYPE = EXTERNAL_STAGE
  STORAGE_PROVIDER = 'S3'
  STORAGE_AWS_ROLE_ARN = 'arn:aws:iam::001234567890:role/myrole'
  ENABLED = TRUE
  STORAGE_ALLOWED_LOCATIONS = ('*')
  STORAGE_BLOCKED_LOCATIONS = ('s3://mybucket3/path3/', 's3://mybucket4/path4/');
Copy

Google Cloud Storage

CREATE STORAGE INTEGRATION gcs_int
  TYPE = EXTERNAL_STAGE
  STORAGE_PROVIDER = 'GCS'
  ENABLED = TRUE
  STORAGE_ALLOWED_LOCATIONS = ('*')
  STORAGE_BLOCKED_LOCATIONS = ('gcs://mybucket3/path3/', 'gcs://mybucket4/path4/');
Copy

Microsoft Azure

CREATE STORAGE INTEGRATION azure_int
  TYPE = EXTERNAL_STAGE
  STORAGE_PROVIDER = 'AZURE'
  ENABLED = TRUE
  AZURE_TENANT_ID = 'a123b4c5-1234-123a-a12b-1a23b45678c9'
  STORAGE_ALLOWED_LOCATIONS = ('*')
  STORAGE_BLOCKED_LOCATIONS = ('azure://myaccount.blob.core.windows.net/mycontainer/path3/', 'azure://myaccount.blob.core.windows.net/mycontainer/path4/');
Copy