Automatisches Aktualisieren externer Tabellen für Azure Blob-Speicher

Unter diesem Thema finden Sie Anweisungen zum Erstellen externer Tabellen und zum automatischen Aktualisieren der Metadaten externer Tabellen mithilfe von Microsoft Azure Event Grid-Benachrichtigungen für einen Azure-Container. Bei dieser Operation werden die Metadaten mit dem neuesten Satz zugeordneter Dateien im externen Stagingbereich und Pfad synchronisiert, 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 derzeit nur Blob-Speicher. Snowflake unterstützt die folgenden Typen von Speicherkonten:

  • Blob-Speicher

  • Data Lake Storage Gen2 – Unterstützt als Vorschaufunktion.

  • General Purpose v2

Beachten Sie, dass nur die Ereignisse Microsoft.Storage.BlobCreated und Microsoft.Storage.BlobDeleted die automatische Aktualisierung externer Tabellen auslösen. Das Umbenennen eines Verzeichnisses oder Objekts löst keinen dieser Ereignistypen aus.

Bemerkung

  • Diese Funktion ist auf Snowflake-Konten auf der Microsoft Azure Cloudplattform beschränkt.

  • Um die unter diesem Thema beschriebenen Aufgaben auszuführen, müssen Sie eine Rolle verwenden, die über die Berechtigungen CREATE STAGE und CREATE EXTERNAL TABLE 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:

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>/') ]

Wobei:

  • Integrationsname ist der Name der neuen Integration.

  • Mandanten-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 Directory 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.

  • Pfad 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/');

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>;
    

    Wobei:

Beachten Sie die URL in der Spalte AZURE_CONSENT_URL, die das folgende Format aufweist:

https://login.microsoftonline.com/<tenant_id>/oauth2/authorize?client_id=<snowflake_application_id>

Notieren Sie sich auch den Wert in der Spalte AZURE_MULTI_TENANT_APP_NAME. Dies ist der Name der Snowflake-Clientanwendung, die für Ihr Konto erstellt wurde. Später 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 in der Spalte AZURE_CONSENT_URL URL zu der URL. Es wird eine Microsoft-Berechtigungsanfrageseite angezeigt.

  2. Klicken Sie auf die Schaltfläche Accept. Auf diese Weise 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).

  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.

  7. Search for the Snowflake service principal. This is the identity in the AZURE_MULTI_TENANT_APP_NAME property in the DESC STORAGE INTEGRATION output (in Step 1). Search for the string before the underscore in the AZURE_MULTI_TENANT_APP_NAME property.

    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.

  8. Klicken Sie auf die Schaltfläche Save.

    Bemerkung

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

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>

Wobei:

  • Ressourcengruppenname ist der Name der neuen Ressourcengruppe.

  • Speicherort ist in Snowflake-Terminologie der Ort oder die Region Ihres Azure-Speicherkontos.

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"

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

Wobei:

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

  • Speicherkontoname ist der Name des neuen Speicherkontos.

  • Speicherort ist der Speicherort Ihres Azure-Speicherkontos.

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

Wobei:

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

  • Speicherkontoname ist der Name des neuen Speicherkontos.

  • Speicherort ist der Speicherort Ihres Azure-Speicherkontos.

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>

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>"
    
  • 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>"
    

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

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
    
  • Windows:

    az eventgrid event-subscription create \
    --source-resource-id %storageid% \
    --name <subscription_name> --endpoint-type storagequeue \
    --endpoint %queueid%
    

Wobei:

Schritt 2: Erstellen einer Benachrichtigungsintegration in Snowflake

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

Bemerkung

Eine Azure Queue Storage-Warteschlange unterstützt eine einzelne Benachrichtigungsintegration. Das Verweisen auf eine einzelne Speicherwarteschlange in mehreren Benachrichtigungsintegrationen kann dazu führen, dass Daten in Zieltabellen fehlen, 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>
    
  3. Navigieren Sie zu Azure Active Directory » Properties. Notieren Sie den Wert Directory 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.

Integration erstellen

Erstellen Sie mit dem Befehl CREATE NOTIFICATION INTEGRATION eine 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.

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

Wobei:

Beispiel:

CREATE NOTIFICATION INTEGRATION my_azure_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';

Snowflake Zugriff auf die Speicherwarteschlange gewähren

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

    DESC NOTIFICATION INTEGRATION <integration_name>;
    

    Wobei:

  2. Beachten Sie die URL in der Spalte AZURE_CONSENT_URL, die das folgende Format aufweist:

    https://login.microsoftonline.com/<tenant_id>/oauth2/authorize?client_id=<snowflake_application_id>
    
  3. Navigieren Sie in einem Webbrowser zur URL. Es wird eine Microsoft-Berechtigungsanfrageseite angezeigt.

  4. Klicken Sie auf die Schaltfläche Accept, um Snowflake in Active Directory zu registrieren.

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

  6. Navigieren Sie zu Azure Active Directory » Enterprise applications. Stellen Sie sicher, dass die Snowflake-Anwendung aufgelistet ist.

    Wichtig

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

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

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

  9. Suchen Sie nach der Snowflake-Anwendung.

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

    • Role: Storage Queue Data Contributor (Vorschau)

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

    • Select: Snowflake-Anwendungs-ID

    Die Snowflake-Anwendung sollte jetzt unter Storage Queue Data Contributor (im selben Dialogfeld) aufgeführt werden.

Schritt 3: Erstellen eines Stagingbereichs (falls erforderlich)

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

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

USE SCHEMA mydb.public;

CREATE STAGE mystage
  URL='azure://myaccount.blob.core.windows.net/mycontainer/files/'
  STORAGE_INTEGRATION = myint;

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.

Schritt 4: Erstellen einer externen Tabelle

Erstellen Sie mit dem Befehl CREATE EXTERNAL TABLE TYPE = CSV | JSON | AVRO | ORC | PARQUET [ ... ] eine externe Tabelle.

Erstellen Sie beispielsweise eine externe Tabelle im Schema mydb.public, die JSON-Daten aus Dateien liest, die im Stagingbereich mystage mit dem Pfad path1/ bereitgestellt wurden.

Der Parameter INTEGRATION verweist auf die my_azure_int-Integration, die Sie unter Erstellen der Integration erstellt haben. Der Integrationsname muss komplett in Großbuchstaben angegeben werden.

Beachten Sie, dass der Parameter AUTO_REFRESH standardmäßig TRUE lautet:

CREATE OR REPLACE EXTERNAL TABLE ext_table
 INTEGRATION = 'MY_AZURE_INT'
 WITH LOCATION = @mystage/path1/
 FILE_FORMAT = (TYPE = JSON);

Der externe Stagingbereich mit automatischer Aktualisierung ist jetzt konfiguriert!

Wenn dem Azure-Container neue oder aktualisierte Datendateien hinzugefügt werden, weist die Ereignisbenachrichtigung Snowflake an, diese in die Metadaten der externen Tabelle zu scannen.

Schritt 5: Manuelles Aktualisieren der Metadaten der externen Tabelle

Aktualisieren Sie die Metadaten der externen Tabelle einmal manuell, indem Sie ALTER EXTERNAL TABLE mit dem Parameter REFRESH verwenden, z. B.:

ALTER EXTERNAL TABLE ext_table REFRESH;

+---------------------------------------------+----------------+-------------------------------+
| file                                        | status         | description                   |
|---------------------------------------------+----------------+-------------------------------|
| files/path1/file1.json                      | REGISTERED_NEW | File registered successfully. |
| files/path1/file2.json                      | REGISTERED_NEW | File registered successfully. |
| files/path1/file3.json                      | REGISTERED_NEW | File registered successfully. |
+---------------------------------------------+----------------+-------------------------------+

Mit diesem Schritt werden die Metadaten mit der Liste der Dateien im Stagingbereich und Pfad in der externen Tabellendefinition synchronisiert. Außerdem wird durch diesen Schritt sichergestellt, dass die externe Tabelle die Datendateien im angegebenen Stagingbereich und Pfad lesen kann und dass in der Definition der externen Tabelle keine Dateien übersehen wurden.

Wenn die Liste der Dateien in der Spalte file nicht Ihren Erwartungen entspricht, überprüfen Sie die Pfade in der Definition der externen Tabelle und der Definition des externen Stagingbereichs. Jeder Pfad in der externen Tabellendefinition wird an jeden in der Stagingbereichsdefinition angegebenen Pfad angehängt. Weitere Informationen dazu finden Sie unter CREATE EXTERNAL TABLE TYPE = CSV | JSON | AVRO | ORC | PARQUET [ ... ].

Wichtig

Wenn dieser Schritt nach dem Erstellen der externen Tabelle nicht mindestens einmal erfolgreich abgeschlossen wurde, werden beim Abfragen der externen Tabelle keine Ergebnisse zurückgegeben, bis eine Event Grid-Benachrichtigung die Metadaten der externen Tabelle zum ersten Mal automatisch aktualisiert.

Dieser Schritt stellt sicher, dass die Metadaten mit allen Änderungen an der Dateiliste synchronisiert werden, die seit Schritt 4 vorgenommen wurden. Danach lösen Event Grid-Benachrichtigungen die automatische Aktualisierung der Metadaten aus.

Schritt 6: Konfigurieren der Sicherheit

Erteilen Sie mit GRANT <Berechtigungen> … TO ROLE 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 in Schritt 3: Erstellen eines Stagingbereichs (falls erforderlich) erstellte Stagingbereich auf ein benanntes Dateiformat verweist.

Externe Tabelle

SELECT