Freigeben über


Die Verwendung von Snowflake mit Iceberg-Tabellen in OneLake

Microsoft OneLake kann mit Snowflake für die Speicherung und den Zugriff auf Apache Iceberg-Tabellen verwendet werden.

Befolgen Sie diesen Leitfaden, um Snowflake auf Azure zu verwenden, um:

  • Iceberg-Tabellen direkt in OneLake schreiben
  • virtuelle Iceberg-Tabellen lesen, die aus dem Delta Lake-Format konvertiert wurden

Important

Dieses Feature befindet sich in der Vorschauphase.

Bevor Sie beginnen, führen Sie die nachstehend aufgeführten erforderlichen Schritte aus.

Prerequisite

Um Snowflake auf Azure zum Schreiben oder Lesen von Iceberg-Tabellen mit OneLake zu verwenden, muss die Identität Ihres Snowflake-Kontos in entra ID in der Lage sein, mit Fabric zu kommunizieren. Aktivieren Sie die Einstellungen auf Fabric-Mandantenebene, mit denen Dienstprinzipale Fabric-APIs aufrufen und OneLake-APIs aufrufen können.

Eine Iceberg-Tabelle in OneLake schreiben mithilfe von Snowflake auf Azure

Wenn Sie Snowflake in Azure verwenden, können Sie Iceberg-Tabellen in OneLake schreiben, indem Sie die folgenden Schritte ausführen:

  1. Stellen Sie sicher, dass sich die Fabric-Kapazität am selben Azure-Speicherort wie die Snowflake-Instanz befindet.

    Ermitteln Sie den Standort der Fabric-Kapazität, die dem Fabric-Lakehouse zugeordnet ist. Öffnen Sie die Einstellungen des Fabric-Arbeitsbereichs, in dem das Lakehouse enthalten ist.

    Screenshot der Fabric-Kapazitätsregion

    Überprüfen Sie in der unteren linken Ecke der Schnittstelle für das Snowflake-Konto in Azure die Azure-Region des Snowflake-Kontos.

    Screenshot der Region des Snowflake-Kontos

    Wenn diese Regionen nicht identisch sind, müssen Sie eine andere Fabric-Kapazität verwenden, die sich in derselben Region wie das Snowflake-Konto befindet.

  2. Öffnen Sie das Menü für den Bereich „Dateien“ des Lakehouse, wählen Sie „Eigenschaften“ aus, und kopieren Sie die URL (den HTTPS-Pfad) dieses Ordners.

    Screenshot des Menüelements „Eigenschaften“

  3. Ermitteln Sie Ihre Fabric-Mandanten-ID. Wählen Sie Ihr Benutzerprofil in der oberen rechten Ecke der Fabric-Benutzeroberfläche aus, und zeigen Sie auf die Infoblase neben Ihrem Mandantennamen. Kopieren Sie die Tenant ID (Mandanten-ID).

    Screenshot der Mandanten-ID

  4. Richten Sie in Snowflake den EXTERNAL VOLUME mithilfe des Pfads zum Files-Ordner in Ihrem Data Lakehouse ein. Hier finden Sie weitere Informationen zum Einrichten externer Snowflake-Volumes.

    Note

    Snowflake erfordert, dass das URL-Schema azure:// ist, daher achten Sie darauf, den Pfad von https:// zu azure:// zu ändern.

    CREATE OR REPLACE EXTERNAL VOLUME onelake_write_exvol
    STORAGE_LOCATIONS =
    (
        (
            NAME = 'onelake_write_exvol'
            STORAGE_PROVIDER = 'AZURE'
            STORAGE_BASE_URL = 'azure://<path_to_lakehouse>/Files/icebergtables'
            AZURE_TENANT_ID = '<Tenant_ID>'
        )
    );
    

    In diesem Beispiel werden alle Tabellen, die mit diesem externen Volume erstellt wurden, im Fabric-Lakehouse im Ordner Files/icebergtables gespeichert.

  5. Nachdem das externe Volume erstellt wurde, führen Sie den folgenden Befehl aus, um die Zustimmungs-URL und den Namen der Anwendung abzurufen, die Snowflake zum Schreiben in OneLake verwendet. Diese Anwendung wird allen anderen externen Volumes im Snowflake-Konto verwendet.

    DESC EXTERNAL VOLUME onelake_write_exvol;
    

    Die Ausgabe dieses Befehls gibt die Eigenschaften AZURE_CONSENT_URL und AZURE_MULTI_TENANT_APP_NAME zurück. Notieren Sie sich beide Werte. Der Name der mehrinstanzenfähigen Azure-App sieht wie folgt aus: <name>_<number>. Sie müssen jedoch nur den <name>-Teil notieren.

  6. Öffnen Sie die Zustimmungs-URL aus dem vorherigen Schritt in einem neuen Tab, wenn Sie dies zuvor noch nicht getan haben. Wenn Sie fortfahren möchten, stimmen Sie den erforderlichen Anwendungsberechtigungen zu, wenn Sie dazu aufgefordert werden. Möglicherweise werden Sie auf die Haupt-Snowflake-Website umgeleitet.

  7. Kehren Sie zu Fabric zurück, öffnen Sie den Arbeitsbereich, und wählen Sie Zugriff verwalten und dann Fügen Sie Personen oder Gruppen hinzu aus. Erteilen Sie der Anwendung, die vom externen Snowflake-Volume verwendet wird, die Berechtigungen, die zum Schreiben von Daten in Lakehouses in Ihrem Arbeitsbereich erforderlich sind. Es wird empfohlen, die Rolle Mitwirkender zu gewähren.

  8. Kehren Sie zu Snowflake zurück, und verwenden Sie das neue externe Volume, um eine Iceberg-Tabelle zu erstellen.

    CREATE OR REPLACE ICEBERG TABLE MYDATABASE.PUBLIC.Inventory (
        InventoryId int,
        ItemName STRING
    )
    EXTERNAL_VOLUME = 'onelake_write_exvol'
    CATALOG = 'SNOWFLAKE'
    BASE_LOCATION = 'Inventory/';
    

    Nach ausführung dieser Anweisung wurde ein neuer Iceberg-Tabellenordner mit dem Namen "Inventory" innerhalb des ordnerpfads erstellt, der im externen Volume definiert ist.

  9. Fügen Sie einige Daten zur Iceberg-Tabelle hinzu.

    INSERT INTO MYDATABASE.PUBLIC.Inventory
    VALUES
    (123456,'Amatriciana');
    
  10. Schließlich können Sie im Bereich „Tabellen“ desselben Lakehouse eine OneLake-Verknüpfung zur Iceberg-Tabelle erstellen. Über diese Verknüpfung wird die Iceberg-Tabelle als Delta Lake-Tabelle angezeigt, die in Fabric-Workloads verwendet werden kann.

Lesen einer virtuellen Iceberg-Tabelle aus OneLake mithilfe von Snowflake auf Azure

Wenn Sie Snowflake auf Azure verwenden möchten, um eine virtuelle Iceberg-Tabelle zu lesen, die auf einer Delta Lake-Tabelle in Fabric basiert, führen Sie die folgenden Schritte aus.

  1. Befolgen Sie den Leitfaden, um zu bestätigen, dass Ihre Delta Lake-Tabelle erfolgreich in Iceberg konvertiert wurde, und notieren Sie sich den Pfad zum Datenelement, das Ihre Tabelle enthält, sowie die neueste *.metadata.json Datei Ihrer Tabelle.

  2. Ermitteln Sie Ihre Fabric-Mandanten-ID. Wählen Sie Ihr Benutzerprofil in der oberen rechten Ecke der Fabric-Benutzeroberfläche aus, und zeigen Sie auf die Infoblase neben Ihrem Mandantennamen. Kopieren Sie die Tenant ID (Mandanten-ID).

    Screenshot der Mandanten-ID

  3. Richten Sie in Snowflake den EXTERNAL VOLUME Pfad zum Tables Ordner des Datenelements ein, das die Tabelle enthält. Hier finden Sie weitere Informationen zum Einrichten externer Snowflake-Volumes.

    CREATE OR REPLACE EXTERNAL VOLUME onelake_read_exvol
    STORAGE_LOCATIONS =
    (
        (
            NAME = 'onelake_read_exvol'
            STORAGE_PROVIDER = 'AZURE'
            STORAGE_BASE_URL = 'azure://<path_to_data_item>/Tables/'
            AZURE_TENANT_ID = '<Tenant_ID>'
        )
    )
    ALLOW_WRITES = false;
    

    Note

    Das URL-Schema für Snowflake muss azure:// lauten. Achten Sie daher darauf, https:// in azure:// zu ändern.

    Ersetzen Sie <path_to_data_item> durch den Pfad zu Ihrem Datenelement, wie https://onelake.dfs.fabric.microsoft.com/83896315-c5ba-4777-8d1c-e4ab3a7016bc/a95f62fa-2826-49f8-b561-a163ba537828.

  4. Nachdem das externe Volume erstellt wurde, führen Sie den folgenden Befehl aus, um die Zustimmungs-URL und den Namen der Anwendung abzurufen, die Snowflake zum Schreiben in OneLake verwendet. Diese Anwendung wird allen anderen externen Volumes im Snowflake-Konto verwendet.

    DESC EXTERNAL VOLUME onelake_read_exvol;
    

    Die Ausgabe dieses Befehls gibt die Eigenschaften AZURE_CONSENT_URL und AZURE_MULTI_TENANT_APP_NAME zurück. Notieren Sie sich beide Werte. Der Name der mehrinstanzenfähigen Azure-App sieht wie folgt aus: <name>_<number>. Sie müssen jedoch nur den <name>-Teil notieren.

  5. Öffnen Sie die Zustimmungs-URL aus dem vorherigen Schritt in einem neuen Tab, wenn Sie dies zuvor noch nicht getan haben. Wenn Sie fortfahren möchten, stimmen Sie den erforderlichen Anwendungsberechtigungen zu, wenn Sie dazu aufgefordert werden. Möglicherweise werden Sie auf die Haupt-Snowflake-Website umgeleitet.

  6. Kehren Sie zu Fabric zurück, öffnen Sie den Arbeitsbereich, und wählen Sie Zugriff verwalten und dann Fügen Sie Personen oder Gruppen hinzu aus. Gewähren Sie der Anwendung, die von Ihrem Snowflake-Externvolumen verwendet wird, die Berechtigungen, die erforderlich sind, um Daten aus Datenobjekten in Ihrem Arbeitsbereich zu lesen.

    Tip

    Wenn Sie möchten, können Sie stattdessen Berechtigungen auf Datenelementebene erteilen. Erfahren Sie mehr über den OneLake-Datenzugriff.

  7. Erstellen Sie das CATALOG INTEGRATION Objekt in Snowflake, wenn Sie dies zuvor noch nicht getan haben. Dies ist von Snowflake erforderlich, um auf vorhandene Iceberg-Tabellen im Speicher zu verweisen.

    CREATE CATALOG INTEGRATION onelake_catalog_integration
    CATALOG_SOURCE = OBJECT_STORE
    TABLE_FORMAT = ICEBERG
    ENABLED = TRUE;
    
  8. Erstellen Sie in Snowflake eine Iceberg-Tabelle, die auf die neueste Metadatendatei für die virtualisierte Iceberg-Tabelle in OneLake verweist.

    CREATE OR REPLACE ICEBERG TABLE MYDATABASE.PUBLIC.<TABLE_NAME>
    EXTERNAL_VOLUME = 'onelake_read_exvol'
    CATALOG = onelake_catalog_integration
    METADATA_FILE_PATH = '<metadata_file_path>';
    

    Note

    Ersetzen Sie <TABLE_NAME> durch Ihren Tabellennamen und <metadata_file_path> mit dem Metadatendateipfad Ihrer Iceberg-Tabelle, wie dbo/MyTable/metadata/321.metadata.json.

    Nachdem Sie diese Anweisung ausgeführt haben, haben Sie jetzt einen Verweis auf Ihre virtualisierte Iceberg-Tabelle, die Sie jetzt mit Snowflake abfragen können.

  9. Führen Sie die folgende Anweisung aus, um Ihre virtualisierte Iceberg-Tabelle abzufragen.

    SELECT TOP 10 * FROM MYDATABASE.PUBLIC.<TABLE_NAME>;
    

Troubleshooting

Siehe die Abschnitte zur Problembehandlung und zu Einschränkungen und Überlegungen in unserer Dokumentation zur Virtualisierung des OneLake-Tabellenformats und zur Konvertierung zwischen Delta Lake- und Apache Iceberg-Tabellenformaten.