Usare Snowflake con tabelle Iceberg in OneLake

OneLake può essere usato con Snowflake per l'archiviazione e l'accesso alle tabelle Apache Iceberg.

Seguire questa guida per usare Snowflake in Azure per:

  • scrivere tabelle Iceberg direttamente in OneLake
  • leggere le tabelle Iceberg virtuali convertite dal formato Delta Lake

Prima di iniziare, seguire i passaggi preliminari descritti in questo articolo.

Prerequisite

Per usare Snowflake in Azure per scrivere o leggere tabelle Iceberg con OneLake, l'identità dell'account Snowflake in Entra ID deve essere in grado di comunicare con Fabric. Abilitare le impostazioni a livello di tenant di Fabric che consentono ai principal di servizio di chiamare le API Fabric e di chiamare le API di OneLake.

Importante

Snowflake raggiunge OneLake sulla rete pubblica. Snowflake non supporta ancora la connettività alle aree di lavoro protette da collegamenti privati o altre restrizioni di rete.

Scrivere una tabella Iceberg in OneLake usando Snowflake in Azure

Se si usa Snowflake in Azure, è possibile scrivere tabelle Iceberg in OneLake seguendo questa procedura:

  1. Assicurarsi che la capacità di Fabric sia nella stessa area di Azure dell'istanza di Snowflake.

    Identificare la posizione della capacità infrastruttura associata alla lakehouse di Fabric. Apri le impostazioni dell'area di lavoro Fabric che contiene il lakehouse.

    Schermata che mostra l'area geografica della capacità di Fabric.

    Nell'angolo inferiore sinistro dell'interfaccia del tuo account Snowflake in Azure, verifica l'area geografica di Azure dell'account Snowflake.

    Screenshot che mostra l'area dell'account Snowflake.

    Se queste regioni sono diverse, è necessario usare una capacità di Fabric diversa nella stessa area geografica dell'account Snowflake.

  2. Aprire il menu per l'area File del lakehouse, selezionare Proprietà e copiare l'URL (percorso HTTPS) di tale cartella.

    Screenshot che mostra la voce di menu Proprietà.

  3. Individua l'ID del tenant di Fabric. Selezionare il profilo utente nell'angolo superiore destro dell'interfaccia utente di Fabric e passare il puntatore del mouse sulla bolla info accanto al nome del tenant. Copiare l'ID tenant .

    Schermata che mostra l'ID del tenant.

  4. In Snowflake configura il tuo EXTERNAL VOLUME usando il percorso alla cartella Files nel data lakehouse. Altre informazioni sulla configurazione di volumi esterni Snowflake sono disponibili qui.

    Note

    Snowflake richiede che lo schema URL sia azure://, quindi assicurarsi di modificare il percorso da https:// a azure://.

    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 questo esempio, tutte le tabelle create usando questo volume esterno sono archiviate nella lakehouse di Fabric, all'interno della cartella Files/icebergtables.

  5. Dopo aver creato il volume esterno, eseguire il comando seguente per recuperare l'URL di consenso e il nome dell'applicazione usata da Snowflake per scrivere in OneLake. Questa applicazione è utilizzata da un altro volume esterno nel tuo account Snowflake.

    DESC EXTERNAL VOLUME onelake_write_exvol;
    

    L'output di questo comando restituisce le proprietà AZURE_CONSENT_URL e AZURE_MULTI_TENANT_APP_NAME. Prendere nota di entrambi i valori. Il nome dell'app multi-tenant di Azure ha un aspetto simile a <name>_<number>, ma è sufficiente acquisire solo la parte <name>.

  6. Aprire l'URL di consenso del passaggio precedente in una nuova scheda del browser, se questo passaggio non è stato completato in precedenza. Se si vuole procedere, fornire il consenso alle autorizzazioni dell'applicazione necessarie, se richiesto. Potresti essere reindirizzato al sito Web principale di Snowflake.

  7. Tornare in Infrastruttura, aprire l'area di lavoro e selezionare Gestisci accesso, quindi Aggiungi utenti o gruppi. Concedi all'applicazione usata dal volume esterno di Snowflake le autorizzazioni necessarie per scrivere dati nei lakehouse nel tuo spazio di lavoro. Consigliamo di concedere il ruolo Collaboratore.

  8. Tornati in Snowflake, usate il nuovo volume esterno per creare una tabella Iceberg.

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

    Questa istruzione crea una nuova cartella di tabella Iceberg denominata Inventory all'interno del percorso della cartella definito nel volume esterno.

  9. Aggiungere alcuni dati alla tabella Iceberg.

    INSERT INTO MYDATABASE.PUBLIC.Inventory
    VALUES
    (123456,'Amatriciana');
    
  10. Infine, nell'area Tabelle dello stesso lakehouse, è possibile creare un collegamento OneLake alla tabella Iceberg. Tramite questo collegamento, la tabella Iceberg viene visualizzata come tabella Delta Lake per l'utilizzo tra carichi di lavoro di Fabric.

Leggere una tabella Iceberg virtuale da OneLake usando Snowflake su Azure

Per usare Snowflake in Azure per leggere una tabella Iceberg virtuale basata su una tabella Delta Lake in Fabric, seguire questa procedura.

  1. Seguire la guida per verificare che la tabella Delta Lake sia convertita correttamente in Iceberg e prendere nota del percorso dell'elemento di dati contenente la tabella, nonché del file più recente *.metadata.json della tabella.

  2. Individua l'ID del tenant di Fabric. Selezionare il profilo utente nell'angolo superiore destro dell'interfaccia utente di Fabric e passare il puntatore del mouse sulla bolla info accanto al nome del tenant. Copiare l'ID tenant .

    Schermata che mostra l'ID del tenant.

  3. In Snowflake, configura EXTERNAL VOLUME usando il percorso della cartella Tables dell'elemento di dati che contiene la tua tabella. Altre informazioni sulla configurazione di volumi esterni Snowflake sono disponibili qui.

    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

    Snowflake richiede che lo schema URL sia azure://, quindi assicurarsi di passare https:// a azure://.

    Sostituire <path_to_data_item> con il percorso dell'elemento di dati, ad esempio https://onelake.dfs.fabric.microsoft.com/83896315-c5ba-4777-8d1c-e4ab3a7016bc/a95f62fa-2826-49f8-b561-a163ba537828.

  4. Dopo aver creato il volume esterno, eseguire il comando seguente per recuperare l'URL di consenso e il nome dell'applicazione usata da Snowflake per scrivere in OneLake. Questa applicazione è utilizzata da un altro volume esterno nel tuo account Snowflake.

    DESC EXTERNAL VOLUME onelake_read_exvol;
    

    L'output di questo comando restituisce le proprietà AZURE_CONSENT_URL e AZURE_MULTI_TENANT_APP_NAME. Prendere nota di entrambi i valori. Il nome dell'app multi-tenant di Azure ha un aspetto simile a <name>_<number>, ma è sufficiente acquisire solo la parte <name>.

  5. Aprire l'URL di consenso del passaggio precedente in una nuova scheda del browser, se questo passaggio non è stato completato in precedenza. Se si vuole procedere, fornire il consenso alle autorizzazioni dell'applicazione necessarie, se richiesto. Potresti essere reindirizzato al sito Web principale di Snowflake.

  6. Tornare in Infrastruttura, aprire l'area di lavoro e selezionare Gestisci accesso, quindi Aggiungi utenti o gruppi. Concedere all'applicazione usata dal volume esterno Snowflake le autorizzazioni necessarie per leggere i dati dagli elementi dati nell'area di lavoro.

    Tip

    È invece possibile scegliere di concedere autorizzazioni a livello di elemento dati, se lo si desidera. Altre informazioni sull'accesso ai dati di OneLake.

  7. Creare l'oggetto CATALOG INTEGRATION in Snowflake, se questo passaggio non è stato completato in precedenza. Questo passaggio è richiesto da Snowflake per fare riferimento alle tabelle Iceberg esistenti nell'archiviazione.

    CREATE CATALOG INTEGRATION onelake_catalog_integration
    CATALOG_SOURCE = OBJECT_STORE
    TABLE_FORMAT = ICEBERG
    ENABLED = TRUE;
    
  8. Tornare a Snowflake, creare una tabella Iceberg che fa riferimento al file di metadati più recente per la tabella Iceberg virtualizzata in OneLake.

    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

    Sostituire <TABLE_NAME> con il nome della tabella e <metadata_file_path> con il percorso del file di metadati della tabella Iceberg, ad esempio dbo/MyTable/metadata/321.metadata.json.

    Dopo aver eseguito questa istruzione, hai un riferimento alla tabella Iceberg virtualizzata su cui puoi eseguire query usando Snowflake.

  9. Eseguire una query sulla tabella Iceberg virtualizzata eseguendo l'istruzione seguente.

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

Troubleshooting

Vedere le sezioni relative alla risoluzione dei problemi e alle limitazioni e alle considerazioni della documentazione sulla virtualizzazione e la conversione dei formati di tabella di OneLake tra Delta Lake e Apache Iceberg.