Automatisches Aktualisieren von Verzeichnistabellen für Azure Blob Storage

Unter diesem Thema finden Sie Anweisungen zum Erstellen von Verzeichnistabellen und zum automatischen Aktualisieren der Metadaten von Verzeichnistabellen mithilfe von Microsoft Azure Event Grid-Benachrichtigungen für einen Azure-Container. Diese Operation synchronisiert die Metadaten mit dem neuesten Satz zugeordneter Dateien im externen Stagingbereich und Pfad, d. h.:

  • Neue Dateien im Pfad werden zu den Tabellenmetadaten hinzugefügt.

  • Änderungen an Dateien im Pfad werden in den Tabellenmetadaten aktualisiert.

  • Dateien, die sich nicht mehr im Pfad befinden, werden aus den Tabellenmetadaten entfernt.

Snowflake unterstützt die folgenden Typen von Blob-Speicherkonten:

  • Blob-Speicher

  • Data Lake Storage Gen2

  • General Purpose v2

Beachten Sie, dass nur Microsoft.Storage.BlobCreated- und Microsoft.Storage.BlobDeleted-Ereignisse die Aktualisierung von Verzeichnistabellen auslösen. Nur das Hinzufügen neuer Objekte zum Blob-Speicher löst diese Ereignisse aus. Das Umbenennen eines Verzeichnisses oder Objekts löst diese Ereignisse nicht aus. Snowflake empfiehlt, nur unterstützte Ereignisse für Verzeichnistabellen zu senden, um Kosten, Ereignisrauschen und Latenz zu reduzieren.

Snowflake unterstützt die folgenden Microsoft.Storage.BlobCreated-APIs:

  • CopyBlob

  • PutBlob

  • PutBlockList

  • FlushWithClose

  • SftpCommit

Snowflake unterstützt die folgenden Microsoft.Storage.BlobDeleted-APIs:

  • DeleteBlob

  • DeleteFile

  • SftpRemove

Bei Data Lake Storage Gen2-Speicherkonten werden Microsoft.Storage.BlobCreated-Ereignisse ausgelöst, wenn Clients die Operationen CreateFile und FlushWithClose verwenden. Wenn das SSH File Transfer Protocol (SFTP) verwendet wird, werden Microsoft.Storage.BlobCreated-Ereignisse durch SftpCreate- und SftpCommit-Operationen ausgelöst. Die CreateFile- oder SftpCreate-API allein bedeutet nicht, dass eine Datei in das Speicherkonto übertragen wurde. Snowflake aktualisiert die Verzeichnistabelle nur dann, wenn die FlushWithClose- oder SftpCommit-Meldung gesendet wird.

Bemerkung

Um die unter diesem Thema beschriebenen Aufgaben auszuführen, müssen Sie eine Rolle verwenden, die über die Berechtigungen CREATE STAGE und für ein Schema verfügt.

Darüber hinaus müssen Sie Administratorzugriff auf Microsoft Azure haben. Wenn Sie kein Azure-Administrator sind, bitten Sie Ihren Azure-Administrator, die Schritte in Schritt 1: Konfigurieren des Event Grid-Abonnements auszuführen.

Unter diesem Thema:

Unterstützung von Cloudplattformen

Das Auslösen automatisierter Aktualisierungen von externen Metadaten mithilfe von Azure Event Grid-Meldungen wird nur von Snowflake-Konten unterstützt, die auf folgenden Cloudplattformen gehostet werden:

  • Amazon Web Services (AWS)

  • Microsoft Azure

Die Anweisungen zum Konfigurieren dieser Unterstützung sind für Konten auf beiden Cloudhosting-Plattformen identisch.

Konfigurieren des sicheren Zugriffs auf Cloudspeicher

Bemerkung

Wenn Sie bereits den sicheren Zugriff auf den Azure Blob-Speichercontainer konfiguriert haben, in dem Ihre Datendateien gespeichert sind, können Sie diesen Abschnitt überspringen.

In diesem Abschnitt wird beschrieben, wie Sie ein Speicherintegrationsobjekt konfigurieren, um die Authentifizierungsverantwortung für den Cloudspeicher an eine Snowflake-Entität für die Identitäts- und Zugriffsverwaltung (IAM) zu delegieren.

Bemerkung

Diese Option wird dringend empfohlen, um beim Zugriff auf Cloudspeicher keine IAM-Anmeldeinformationen angeben zu müssen. Weitere Speicherzugriffsoptionen finden Sie unter Konfigurieren eines Azure-Containers zum Laden von Daten.

In diesem Abschnitt wird beschrieben, wie Sie mit Speicherintegrationen dafür sorgen können, dass Snowflake Daten in einem Azure-Container lesen und in einen Azure-Container schreiben kann, auf den in einem externen (Azure) Stagingbereich verwiesen wird. Integrationen sind benannte First-Class-Snowflake-Objekte, bei denen keine expliziten Cloudanbieter-Anmeldeinformationen wie geheime Schlüssel oder Zugriffstoken übergeben werden müssen. Integrationsobjekte speichern die Benutzer-ID aus der Identitäts- und Zugriffsverwaltung (IAM) von Azure. Diese wird als App-Registrierung bezeichnet. Ein Administrator in Ihrer Organisation erteilt dieser App die erforderlichen Berechtigungen für das Azure-Konto.

Eine Integration muss auch Container (und optionale Pfade) angeben, um die Speicherorte einzuschränken, die Benutzer beim Erstellen externer Stagingbereiche zur Verwendung mit der Integration angeben können.

Bemerkung

Zum Ausführen der Anweisungen in diesem Abschnitt sind Berechtigungen zum Verwalten von Speicherkonten in Azure erforderlich. Wenn Sie kein Azure-Administrator sind, bitten Sie Ihren Azure-Administrator, diese Aufgaben auszuführen.

Unter diesem Thema:

Schritt 1: Cloud Storage-Integration in Snowflake erstellen

Erstellen Sie mit dem Befehl CREATE STORAGE INTEGRATION eine Speicherintegration. Eine Speicherintegration ist ein Snowflake-Objekt, in dem ein für Ihren Azure-Cloudspeicher generierter Dienstprinzipal zusammen mit einem optionalen Satz zulässiger oder blockierter Speicherorte (d. h. Container) gespeichert wird. Cloudanbieter-Administratoren Ihrer Organisation erteilen dem generierten Dienstprinzipal Berechtigungen für die Speicherorte. Dank dieser Option müssen Benutzer beim Erstellen von Stagingbereichen oder beim Laden von Daten keine Anmeldeinformationen eingeben.

Eine einzelne Speicherintegration kann mehrere externe (d. h. Azure) Stagingbereiche unterstützen. Die URL in der Stagingbereichsdefinition muss mit den für den Parameter STORAGE_ALLOWED_LOCATIONS angegebenen Azure-Containern (und optionalen Pfaden) übereinstimmen.

Bemerkung

Dieser SQL-Befehl kann nur von Kontoadministratoren (Benutzer mit der Rolle ACCOUNTADMIN) oder von Rollen mit der globalen Berechtigung CREATE INTEGRATION ausgeführt werden.

CREATE STORAGE INTEGRATION <integration_name>
  TYPE = EXTERNAL_STAGE
  STORAGE_PROVIDER = 'AZURE'
  ENABLED = TRUE
  AZURE_TENANT_ID = '<tenant_id>'
  STORAGE_ALLOWED_LOCATIONS = ('azure://<account>.blob.core.windows.net/<container>/<path>/', 'azure://<account>.blob.core.windows.net/<container>/<path>/')
  [ STORAGE_BLOCKED_LOCATIONS = ('azure://<account>.blob.core.windows.net/<container>/<path>/', 'azure://<account>.blob.core.windows.net/<container>/<path>/') ]
Copy

Wobei:

  • integration_name ist der Name der neuen Integration.

  • tenant_id ist die ID Ihres Office 365-Mandanten, 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.

  • container ist der Name des Azure-Containers, in dem Ihre Datendateien gespeichert sind (z. B. mycontainer). Die Parameter STORAGE_ALLOWED_LOCATIONS und STORAGE_BLOCKED_LOCATIONS beschränken bzw. blockieren den Zugriff auf diese Container, wenn Stagingbereiche, die auf diese Integration verweisen, erstellt oder geändert werden.

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

Im folgenden Beispiel wird eine Integration erstellt, die die externen Stagingbereiche, die die Integration verwenden, explizit darauf beschränkt, auf zwei Container oder Pfade zu verweisen: In einem späteren Schritt werden wir einen externen Stagingbereich erstellen, der auf einen dieser Container und Pfade verweist. Es können auch mehrere externe Stagingbereiche, die diese Integration verwenden, auf die zulässigen Container und Pfade verweisen:

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

Schritt 2: Snowflake Zugriff auf die Speicherorte gewähren

  1. Führen Sie den Befehl DESCRIBE INTEGRATION aus, um die Zustimmungs-URL abzurufen:

    DESC STORAGE INTEGRATION <integration_name>;
    
    Copy

    Wobei:

Beachten Sie die Werte in den folgenden Spalten:

AZURE_CONSENT_URL

URL der Microsoft-Berechtigungsanforderungsseite.

AZURE_MULTI_TENANT_APP_NAME

Name der Snowflake-Clientanwendung, die für Ihr Konto erstellt wurde. In einem späteren Schritt in dieser Anleitung müssen Sie dieser Anwendung die erforderlichen Berechtigungen erteilen, um ein Zugriffstoken für die zulässigen Speicherorte zu erhalten.

  1. Navigieren Sie in einem Webbrowser zu der in der Spalte AZURE_CONSENT_URL angegebenen URL. Es wird eine Microsoft-Berechtigungsanforderungsseite angezeigt.

  2. Klicken Sie auf die Schaltfläche Accept. Mit dieser Aktion kann dem Azure-Dienstprinzipal, der für Ihr Snowflake-Konto erstellt wurde, ein Zugriffstoken für die angegebenen Ressourcen in Ihrem Mandantenbereich zugewiesen werden. Das Abrufen eines Zugriffstokens ist nur erfolgreich, wenn Sie dem Dienstprinzipal die entsprechenden Berechtigungen für den Container erteilen (siehe nächster Schritt).

    Die Microsoft-Berechtigungsanforderungsseite leitet auf die Snowflake-Firmenwebsite (snowflake.com) um.

  3. Melden Sie sich beim Microsoft Azure-Portal an.

  4. Navigieren Sie zu Azure Services » Storage Accounts. Klicken Sie auf den Namen des Speicherkontos, auf das Sie dem Snowflake-Dienstprinzipal Zugriff gewähren.

  5. Klicken Sie auf Access Control (IAM) » Add role assignment.

  6. Wählen Sie die gewünschte Rolle aus, die dem Snowflake-Dienstprinzipal gewährt werden soll:

    • Storage Blob Data Reader gewährt nur Lesezugriff. Dies ermöglicht das Laden von Daten aus Stagingdateien, die im Speicherkonto bereitgestellt wurden.

    • Storage Blob Data Contributor gewährt Lese- und Schreibzugriff. Dies ermöglicht das Laden oder Entladen von Daten in/aus Dateien, die im Speicherkonto bereitgestellt sind. Die Rolle ermöglicht auch die Ausführung des Befehls REMOVE zum Entfernen von Dateien, die im Speicherkonto bereitgestellt sind.

  7. Suchen Sie nach dem Snowflake-Dienstprinzipal. Dies ist die Identität in der Eigenschaft AZURE_MULTI_TENANT_APP_NAME der Ausgabe von DESC STORAGE INTEGRATION (in Schritt 1). Suchen Sie in der Eigenschaft AZURE_MULTI_TENANT_APP_NAME nach der Zeichenfolge vor dem Unterstrich.

    Wichtig

    • Es kann eine Stunde oder länger dauern, bis Azure den über die oben genannte Microsoft-Anforderungsseite angeforderten Snowflake-Dienstprinzipal erstellt hat. Wenn der Dienstprinzipal nicht sofort verfügbar ist, empfehlen wir, ein bis zwei Stunden zu warten und ihn dann erneut zu suchen.

    • Wenn Sie den Dienstprinzipal löschen, funktioniert die Speicherintegration nicht mehr.

    Add role assignment in Azure Storage Console
  8. Klicken Sie auf die Schaltfläche Review + assign.

    Bemerkung

    • Gemäß der Microsoft Azure-Dokumentation kann die Weitergabe von Rollenzuweisungen bis zu fünf Minuten dauern.

    • Snowflake speichert die temporären Anmeldeinformationen im Cache für einen Zeitraum, der die Ablaufzeit von 60 Minuten nicht überschreiten darf. Wenn Sie den Zugriff von Snowflake widerrufen, sind Benutzer vor Ablauf des Cache möglicherweise in der Lage, Dateien auflisten und Daten vom Cloudspeicherort zu laden.

Konfigurieren der Automatisierung mit Azure Event Grid

Schritt 1: Konfigurieren des Event Grid-Abonnements

In diesem Abschnitt wird beschrieben, wie Sie unter Verwendung der Azure-CLI ein Event Grid-Abonnement für Azure Storage-Ereignisse einrichten. Weitere Informationen zu den in diesem Abschnitt beschriebenen Schritten finden Sie in den folgenden Artikeln der Azure-Dokumentation:

Ressourcengruppe erstellen

Ein Event Grid-Thema liefert einen Endpunkt, an den die Quelle (d. h. Azure-Speicher) Ereignisse sendet. Ein Thema wird für eine Sammlung verwandter Ereignisse verwendet. Event Grid-Themen sind Azure-Ressourcen und müssen in einer Azure-Ressourcengruppe platziert werden.

Führen Sie den folgenden Befehl aus, um eine Ressourcengruppe zu erstellen:

az group create --name <resource_group_name> --location <location>
Copy

Wobei:

  • resource_group_name ist der Name der neuen Ressourcengruppe.

  • location ist in Snowflake-Terminologie der Ort oder die Region Ihres Azure Storage-Kontos.

Event Grid-Ressourcenanbieter aktivieren

Führen Sie den folgenden Befehl aus, um den Event Grid-Ressourcenanbieter zu registrieren. Beachten Sie, dass dieser Schritt nur erforderlich ist, wenn Sie Event Grid mit Ihrem Azure-Konto zuvor noch nicht verwendet haben:

az provider register --namespace Microsoft.EventGrid
az provider show --namespace Microsoft.EventGrid --query "registrationState"
Copy

Speicherkonto für Datendateien erstellen

Führen Sie den folgenden Befehl aus, um ein Speicherkonto zum Speichern Ihrer Datendateien zu erstellen. Dieses Konto muss entweder ein Blob-Speicherkonto (d. h. ein BlobStorage-Konto) oder ein GPv2-Konto (d. h. ein StorageV2-Konto) sein, da nur diese beiden Kontotypen Ereignismeldungen unterstützen.

Bemerkung

Wenn Sie bereits über ein Blob-Speicherkonto oder ein GPv2-Konto verfügen, können Sie stattdessen eines dieser Konten verwenden.

Erstellen Sie beispielsweise ein Blob-Speicherkonto:

az storage account create --resource-group <resource_group_name> --name <storage_account_name> --sku Standard_LRS --location <location> --kind BlobStorage --access-tier Hot
Copy

Wobei:

  • resource_group_name ist der Name der Ressourcengruppe, die Sie unter Ressourcengruppe erstellen erstellt haben.

  • storage_account_name ist der Name des neuen Speicherkontos.

  • location ist der Speicherort Ihres Azure Storage-Kontos.

Speicherkonto für die Speicherwarteschlange erstellen

Führen Sie den folgenden Befehl aus, um ein Speicherkonto zum Hosten Ihrer Speicherwarteschlange zu erstellen. Dieses Konto muss ein GPv2-Konto sein, da nur diese Art von Konto Ereignismeldungen an eine Speicherwarteschlange unterstützt.

Bemerkung

Wenn Sie bereits über ein GPv2-Konto verfügen, können Sie dieses Konto zum Hosten Ihrer Datendateien und Ihrer Speicherwarteschlange verwenden.

Erstellen Sie zum Beispiel ein GPv2-Konto:

az storage account create --resource-group <resource_group_name> --name <storage_account_name> --sku Standard_LRS --location <location> --kind StorageV2
Copy

Wobei:

  • resource_group_name ist der Name der Ressourcengruppe, die Sie unter Ressourcengruppe erstellen erstellt haben.

  • storage_account_name ist der Name des neuen Speicherkontos.

  • location ist der Speicherort Ihres Azure Storage-Kontos.

Speicherwarteschlange erstellen

Eine einzelne Speicherwarteschlange kann die Ereignismeldungen für viele Event Grid-Abonnements erfassen. Für optimale Leistung empfiehlt Snowflake, eine einzelne Speicherwarteschlange zu erstellen, in der alle Ihre Abonnements für Snowflake gespeichert werden.

Führen Sie den folgenden Befehl aus, um eine Speicherwarteschlange zu erstellen. In einer Speicherwarteschlange werden Gruppen von Nachrichten gespeichert, in diesem Fall Ereignismeldungen aus Event Grid:

az storage queue create --name <storage_queue_name> --account-name <storage_account_name>
Copy

Wobei:

Speicherkonto- und Warteschlangen-IDs zum Verweisen exportieren

Führen Sie die folgenden Befehle aus, um Umgebungsvariablen für die Speicherkonto- und Warteschlangen-IDs festzulegen, die später in diesen Anweisungen angefordert werden:

  • Linux oder macOS:

    export storageid=$(az storage account show --name <data_storage_account_name> --resource-group <resource_group_name> --query id --output tsv)
    export queuestorageid=$(az storage account show --name <queue_storage_account_name> --resource-group <resource_group_name> --query id --output tsv)
    export queueid="$queuestorageid/queueservices/default/queues/<storage_queue_name>"
    
    Copy
  • Windows:

    set storageid=$(az storage account show --name <data_storage_account_name> --resource-group <resource_group_name> --query id --output tsv)
    set queuestorageid=$(az storage account show --name <queue_storage_account_name> --resource-group <resource_group_name> --query id --output tsv)
    set queueid="%queuestorageid%/queueservices/default/queues/<storage_queue_name>"
    
    Copy

Wobei:

Event Grid-Erweiterung installieren

Führen Sie den folgenden Befehl aus, um die Event Grid-Erweiterung für die Azure-CLI zu installieren:

az extension add --name eventgrid
Copy

Event Grid-Abonnement erstellen

Führen Sie den folgenden Befehl aus, um das Event Grid-Abonnement zu erstellen. Durch das Abonnieren eines Themas wird Event Grid darüber informiert, welche Ereignisse verfolgt werden sollen:

  • Linux oder macOS:

    az eventgrid event-subscription create \
    --source-resource-id $storageid \
    --name <subscription_name> --endpoint-type storagequeue \
    --endpoint $queueid \
    --advanced-filter data.api stringin CopyBlob PutBlob PutBlockList FlushWithClose SftpCommit DeleteBlob DeleteFile SftpRemove
    
    Copy
  • Windows:

    az eventgrid event-subscription create \
    --source-resource-id %storageid% \
    --name <subscription_name> --endpoint-type storagequeue \
    --endpoint %queueid% \
    -advanced-filter data.api stringin CopyBlob PutBlob PutBlockList FlushWithClose SftpCommit DeleteBlob DeleteFile SftpRemove
    
    Copy

Wobei:

Schritt 2: Erstellen der Benachrichtigungsintegration

Eine Benachrichtigungsintegration ist ein Snowflake-Objekt, das eine Schnittstelle zwischen Snowflake und dem Cloud-Nachrichtenwarteschlangendienst eines Drittanbieters wie Azure Event Grid bereitstellt.

Bemerkung

Eine einzelne Benachrichtigungsintegration unterstützt genau eine Azure Storage-Warteschlange. Wenn mehrere Benachrichtigungsintegrationen auf dieselbe Speicherwarteschlange verweisen, kann dies zu fehlenden Daten in den Zieltabellen führen, da Ereignisbenachrichtigungen zwischen Benachrichtigungsintegrationen aufgeteilt werden.

Speicherwarteschlangen-URL und Mandanten-ID abrufen

  1. Melden Sie sich beim Microsoft Azure-Portal an.

  2. Navigieren Sie zu Storage account » Queue service » Queues. Notieren Sie die URL für die Warteschlange, die Sie unter Erstellen einer Speicherwarteschlange erstellt haben, um später darauf zu verweisen. Die URL hat das folgende Format:

    https://<storage_account_name>.queue.core.windows.net/<storage_queue_name>
    
    Copy
  3. Navigieren Sie zu Azure Active Directory » Properties. Notieren Sie den Wert Tenant ID zum späteren Verweisen. Die Verzeichnis-ID oder Mandanten-ID wird benötigt, um die Zustimmungs-URL zu generieren, die Snowflake Zugriff auf das Event Grid-Abonnement gewährt.

Benachrichtigungsintegration erstellen

Erstellen Sie eine Benachrichtigungsintegration mit dem Befehl CREATE NOTIFICATION INTEGRATION.

Bemerkung

  • Dieser SQL-Befehl kann nur von Kontoadministratoren (Benutzer mit der Rolle ACCOUNTADMIN) oder von Rollen mit der globalen Berechtigung CREATE INTEGRATION ausgeführt werden.

  • Der Azure-Dienstprinzipal für Benachrichtigungsintegrationen unterscheidet sich von dem Dienstprinzipal, der für Speicherintegrationen erstellt wird.

CREATE NOTIFICATION INTEGRATION <integration_name>
  ENABLED = true
  TYPE = QUEUE
  NOTIFICATION_PROVIDER = AZURE_STORAGE_QUEUE
  AZURE_STORAGE_QUEUE_PRIMARY_URI = '<queue_URL>'
  AZURE_TENANT_ID = '<directory_ID>';
Copy

Wobei:

Beispiel:

CREATE NOTIFICATION INTEGRATION my_notification_int
  ENABLED = true
  TYPE = QUEUE
  NOTIFICATION_PROVIDER = AZURE_STORAGE_QUEUE
  AZURE_STORAGE_QUEUE_PRIMARY_URI = 'https://myqueue.queue.core.windows.net/mystoragequeue'
  AZURE_TENANT_ID = 'a123bcde-1234-5678-abc1-9abc12345678';
Copy

Snowflake Zugriff auf die Speicherwarteschlange gewähren

Beachten Sie, dass bestimmte Schritte in diesem Abschnitt eine lokale Installation der Azure-Befehlszeilenschnittestelle (CLI) erfordern.

  1. Führen Sie den Befehl DESCRIBE INTEGRATION aus, um die Zustimmungs-URL abzurufen:

    DESC NOTIFICATION INTEGRATION <integration_name>;
    
    Copy

    Wobei:

    Beachten Sie die Werte in den folgenden Spalten:

    AZURE_CONSENT_URL

    URL der Microsoft-Berechtigungsanforderungsseite.

    AZURE_MULTI_TENANT_APP_NAME

    Name der Snowflake-Clientanwendung, die für Ihr Konto erstellt wurde. In einem späteren Schritt in dieser Anleitung müssen Sie der Anwendung die erforderlichen Berechtigungen erteilen, um ein Zugriffstoken für die zulässigen Themen zu erhalten.

  2. Navigieren Sie in einem Webbrowser zu der in der Spalte AZURE_CONSENT_URL angegebenen URL. Es wird eine Microsoft-Berechtigungsanforderungsseite angezeigt.

  3. Klicken Sie auf die Schaltfläche Accept. Mit dieser Aktion kann der Azure-Dienstprinzipal, der für Ihr Snowflake-Konto erstellt wurde, ein Zugriffstoken für eine beliebige Ressource in Ihrem Mandantenbereich erhalten. Das Abrufen eines Zugriffstokens ist nur erfolgreich, wenn Sie dem Dienstprinzipal die entsprechenden Berechtigungen für den Container erteilen (siehe nächster Schritt).

    Die Microsoft-Berechtigungsanforderungsseite leitet auf die Snowflake-Firmenwebsite (snowflake.com) um.

  4. Melden Sie sich beim Microsoft Azure-Portal an.

  5. Navigieren Sie zu Azure Active Directory » Enterprise applications. Überprüfen Sie, ob der Snowflake-Anwendungsbezeichner, den Sie sich in Schritt 2 in diesem Abschnitt notiert haben, aufgeführt ist.

    Wichtig

    Wenn Sie die Snowflake-Anwendung zu einem anderen Zeitpunkt in Azure Active Directory löschen, funktioniert die Benachrichtigungsintegration nicht mehr.

  6. Navigieren Sie zu Queues » storage_queue_name, wobei storage_queue_name der Name der Speicherwarteschlange ist, die Sie unter Speicherwarteschlange erstellen erstellt haben.

  7. Klicken Sie auf Access Control (IAM) » Add role assignment.

  8. Suchen Sie nach dem Snowflake-Dienstprinzipal. Dies ist die Identität in der Eigenschaft AZURE_MULTI_TENANT_APP_NAME der Ausgabe von DESC NOTIFICATION INTEGRATION (in Schritt 1). Suchen Sie in der Eigenschaft AZURE_MULTI_TENANT_APP_NAME nach der Zeichenfolge vor dem Unterstrich.

    Wichtig

    • Es kann eine Stunde oder länger dauern, bis Azure den über die oben genannte Microsoft-Anforderungsseite angeforderten Snowflake-Dienstprinzipal erstellt hat. Wenn der Dienstprinzipal nicht sofort verfügbar ist, empfehlen wir, ein bis zwei Stunden zu warten und ihn dann erneut zu suchen.

    • Wenn Sie den Dienstprinzipal löschen, funktioniert die Benachrichtigungsintegration nicht mehr.

  9. Erteilen Sie der Snowflake-App die folgenden Berechtigungen:

    • Role: Storage Queue Data Contributor

    • Assign access to: Azure-AD-Benutzer, -Gruppe oder -Dienstprinzipal

    • Select: Der appDisplayName-Wert.

    Der Snowflake-Anwendungsbezeichner sollte jetzt unter Storage Queue Data Contributor (im selben Dialogfeld) aufgeführt sein.

Schritt 3: Erstellen eines Stagingbereichs mit einer eingebundenen Verzeichnistabelle

Erstellen Sie mit dem Befehl CREATE STAGE einen externen Stagingbereich, der auf Ihren Azure-Container verweist. Snowflake liest Ihre Staging-Datendateien in die Metadaten der externen Tabelle. Alternativ können Sie einen vorhandenen externen Stagingbereich verwenden.

Bemerkung

  • Informationen zum Konfigurieren des sicheren Zugriffs auf den Speicherort in der Cloud finden Sie unter Konfigurieren des sicheren Zugriffs auf Cloudspeicher (unter diesem Thema).

  • Um in der CREATE STAGE-Anweisung auf eine Speicherintegration zu verweisen, muss die Rolle über USAGE-Berechtigung für das Speicherintegrationsobjekt verfügen.

-- External stage
CREATE [ OR REPLACE ] [ TEMPORARY ] STAGE [ IF NOT EXISTS ] <external_stage_name>
      <cloud_storage_access_settings>
    [ FILE_FORMAT = ( { FORMAT_NAME = '<file_format_name>' | TYPE = { CSV | JSON | AVRO | ORC | PARQUET | XML } [ formatTypeOptions ] } ) ]
    [ directoryTable ]
    [ COPY_OPTIONS = ( copyOptions ) ]
    [ COMMENT = '<string_literal>' ]
Copy

Wobei:

directoryTable (for Microsoft Azure) ::=
  [ DIRECTORY = ( ENABLE = { TRUE | FALSE }
                  [ AUTO_REFRESH = { TRUE | FALSE } ]
                  [ NOTIFICATION_INTEGRATION = '<notification_integration_name>' ] ) ]
Copy

Parameter der Verzeichnistabelle (directoryTable)

ENABLE = TRUE | FALSE

Gibt an, ob eine Verzeichnistabelle zum Stagingbereich hinzugefügt werden soll. Wenn der Wert TRUE ist, wird beim Erstellen des Stagingbereichs auch eine Verzeichnistabelle erstellt.

Standard: FALSE

AUTO_REFRESH = TRUE | FALSE

Gibt an, ob Snowflake das Auslösen einer automatischen Aktualisierung der Metadaten der Verzeichnistabelle aktivieren soll, wenn in dem in [ WITH ] LOCATION = angegebenen benannten externen Stagingbereich neue oder aktualisierte Datendateien verfügbar sind.

TRUE

Snowflake ermöglicht das Auslösen automatischer Aktualisierungen von Metadaten externer Tabellen.

FALSE

Snowflake ermöglicht nicht das Auslösen automatischer Aktualisierungen von Metadaten externer Tabellen. Sie müssen die Metadaten der externen Tabellen manuell mit ALTER STAGE … REFRESH aktualisieren, um die Metadaten mit der aktuellen Liste der Dateien im Stagingbereichspfad zu synchronisieren.

Standard: FALSE

Microsoft Azure

NOTIFICATION_INTEGRATION = '<Name_der_Benachrichtigungsintegration>'

Name der Benachrichtigungsintegration, die zur automatischen Aktualisierung der Metadaten der Tabelle im Verzeichnis unter Verwendung von Azure Event Grid-Benachrichtigungen verwendet wird. Eine Benachrichtigungsintegration ist ein Snowflake-Objekt, das eine Schnittstelle zwischen Snowflake und Cloud-Nachrichtenwarteschlangendiensten von Drittanbietern bereitstellt.

Im folgenden Beispiel wird im aktiven Schema der Benutzersitzung ein Stagingbereich mit dem Namen mystage erstellt. Die Cloudspeicher-URL enthält den Pfad files. Der Stagingbereich verweist auf eine Speicherintegration mit dem Namen my_storage_int.

USE SCHEMA mydb.public;
Copy
CREATE STAGE mystage
  URL='azure://myaccount.blob.core.windows.net/load/files/'
  STORAGE_INTEGRATION = my_storage_int
  DIRECTORY = (
    ENABLE = true
    AUTO_REFRESH = true
    NOTIFICATION_INTEGRATION = 'MY_NOTIFICATION_INT'
  );
Copy

Bemerkung

  • Verwenden Sie den Endpunkt blob.core.windows.net für alle unterstützten Typen von Azure-Blob-Speicherkonten, einschließlich Data Lake Storage Gen2.

  • Der Speicherort im URL-Wert muss mit einem Schrägstrich (/) enden.

Der Parameter NOTIFICATION_INTEGRATION verweist auf die Benachrichtigungsintegration my_notification_int, die Sie in Schritt 2: Erstellen der Benachrichtigungsintegration erstellt haben. Der Integrationsname muss komplett in Großbuchstaben angegeben werden.

Wenn neue oder aktualisierte Datendateien zum S3-Bucket hinzugefügt werden, weist die Ereignisbenachrichtigung Snowflake an, sie in die Metadaten der externen Tabelle zu scannen.

Schritt 4: Manuelles Aktualisieren der Metadaten der externen Tabelle

Aktualisieren Sie die Metadaten in einer Verzeichnistabelle manuell mit dem Befehl ALTER STAGE.

Syntax

ALTER STAGE [ IF EXISTS ] <name> REFRESH [ SUBPATH = '<relative-path>' ]
Copy

Wobei:

REFRESH

Greift auf die Staging-Datendateien zu, auf die in der Definition der externen Tabelle verwiesen wird, und aktualisiert die Tabellenmetadaten:

  • Neue Dateien im Pfad werden zu den Tabellenmetadaten hinzugefügt.

  • Änderungen an Dateien im Pfad werden in den Tabellenmetadaten aktualisiert.

  • Dateien, die sich nicht mehr im Pfad befinden, werden aus den Tabellenmetadaten entfernt.

Derzeit muss dieser Befehl jedes Mal ausgeführt werden, wenn Dateien zum Stagingbereich hinzugefügt, aktualisiert oder gelöscht werden. Dieser Schritt synchronisiert die Metadaten mit dem neuesten Satz zugeordneter Dateien im Stagingbereich und Pfad in der externen Tabellendefinition.

SUBPATH = '<relative-path>'

Geben Sie optional einen relativen Pfad an, um die Metadaten für eine bestimmte Teilmenge der Datendateien zu aktualisieren.

Beispiele

Aktualisieren Sie manuell die Metadaten der Verzeichnistabelle eines Stagingbereichs namens mystage:

ALTER STAGE mystage REFRESH;
Copy

Wichtig

Wenn dieser Schritt nicht mindestens einmal nach der Erstellung der Verzeichnistabelle erfolgreich abgeschlossen wird, liefert die Abfrage der Verzeichnistabelle keine Ergebnisse, bis ein Benachrichtigungsereignis die automatische Aktualisierung der Verzeichnistabellen-Metadaten zum ersten Mal auslöst.

Schritt 5: Konfigurieren der Sicherheit

Erteilen Sie mit GRANT <Berechtigungen> für jede zusätzliche Rolle, die zum Abfragen der externen Tabelle verwendet wird, ausreichende Zugriffssteuerungsrechte für die verschiedenen Objekte (d. h. Datenbanken, Schemas, Stagingbereich und Tabelle):

Objekt

Berechtigung

Anmerkungen

Datenbank

USAGE

Schema

USAGE

Benannter Stagingbereich

USAGE , READ

Benanntes Dateiformat

USAGE

Optional; nur erforderlich, wenn der von Ihnen erstellte Stagingbereich auf ein benanntes Dateiformat verweist.