Use Snowflake com tabelas Iceberg em OneLake

O OneLake pode ser utilizado com o Snowflake para o armazenamento e o acesso a tabelas Apache Iceberg.

Siga este guia para usar o Snowflake no Azure para:

  • escreva tabelas Iceberg diretamente para OneLake
  • ler tabelas virtuais do Iceberg convertidas a partir do formato Delta Lake

Antes de começar, siga os passos prévios deste artigo.

Pré-requisito

Para usar o Snowflake no Azure para escrever ou ler tabelas do Iceberg com o OneLake, a identidade da sua conta do Snowflake no Entra ID precisa ser capaz de se comunicar com o Fabric. Habilite as configurações de locatário do Fabric que permitem às entidades de serviço chamar as APIs do Fabric e chamar as APIs do OneLake.

Importante

Snowflake chega a OneLake através da rede pública. O Snowflake ainda não suporta conectividade a espaços de trabalho protegidos por ligação privada ou outras restrições de rede.

Criar uma tabela Iceberg em OneLake utilizando o Snowflake no Azure

Se você usar o Snowflake no Azure, poderá escrever tabelas Iceberg no OneLake seguindo estas etapas:

  1. Certifique-se de que a capacidade do Fabric está na mesma localização do Azure que a sua instância do Snowflake.

    Identifique a localização da capacidade do Fabric associada ao seu lakehouse do Fabric. Abra as definições do espaço de trabalho do Fabric que contém o seu lakehouse.

    Captura de ecrã que mostra a região da capacidade do Fabric.

    No canto inferior esquerdo da interface da conta do Snowflake no Azure, verifique a região do Azure da conta do Snowflake.

    Captura de tela mostrando a região da conta Snowflake.

    Se estas regiões forem diferentes, terá de utilizar uma capacidade do Fabric diferente na mesma região da sua conta Snowflake.

  2. Abra o menu da área Arquivos da sua casa do lago, selecione Propriedades e copie o URL (o caminho HTTPS) dessa pasta.

    Captura de tela mostrando o item de menu Propriedades.

  3. Identifique o ID do seu inquilino do Fabric. Selecione o seu perfil de utilizador no canto superior direito da interface do Fabric e passe o rato por cima do ícone de informação junto a Nome do locatário. Copie o ID do locatário.

    Captura de ecrã a mostrar o ID do inquilino.

  4. Em Snowflake, configure o seu EXTERNAL VOLUME usando o caminho para a pasta Files no seu lakehouse. Mais informações sobre a configuração de volumes externos Snowflake podem ser encontradas aqui.

    Observação

    Snowflake requer que o esquema de URL seja azure://, por isso certifique-se de alterar o caminho de https:// para 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>'
        )
    );
    

    Neste exemplo, todas as tabelas criadas usando esse volume externo são armazenadas no Fabric lakehouse, dentro da Files/icebergtables pasta.

  5. Agora que o volume externo foi criado, execute o seguinte comando para obter o URL de consentimento e o nome da aplicação que o Snowflake utiliza para escrever no OneLake. Esta aplicação é utilizada por qualquer outro volume externo na sua conta Snowflake.

    DESC EXTERNAL VOLUME onelake_write_exvol;
    

    A saída deste comando retorna as AZURE_CONSENT_URL propriedades e AZURE_MULTI_TENANT_APP_NAME . Tome nota de ambos os valores. O nome do aplicativo multilocatário do Azure se parece com <name>_<number>, mas você só precisa capturar a <name> parte.

  6. Abra o URL de consentimento do passo anterior num novo separador do navegador, caso não tenha completado este passo anteriormente. Se você quiser continuar, consinta com as permissões de aplicativo necessárias, se solicitado. Você pode ser redirecionado para o site principal de Snowflake.

  7. De volta ao Fabric, abra seu espaço de trabalho e selecione Gerenciar acesso e, em seguida , Adicionar pessoas ou grupos. Atribua à aplicação utilizada pelo volume externo do Snowflake as permissões necessárias para escrever dados em lakehouses no seu espaço de trabalho. Recomendamos conceder a função de Colaborador .

  8. De volta ao Snowflake, use o seu novo volume externo para criar uma tabela Iceberg.

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

    Esta instrução cria uma nova pasta de tabela Iceberg chamada Inventory dentro do caminho da pasta definido no volume externo.

  9. Adicione alguns dados à sua tabela Iceberg.

    INSERT INTO MYDATABASE.PUBLIC.Inventory
    VALUES
    (123456,'Amatriciana');
    
  10. Finalmente, na área de Tabelas do mesmo lakehouse, pode criar um atalho do OneLake para a sua tabela Iceberg. Por meio desse atalho, a sua tabela Iceberg aparece como uma tabela Delta Lake para ser consumida em todas as cargas de trabalho do Fabric.

Leia uma tabela virtual do Iceberg do OneLake usando o Snowflake no Azure

Para usar o Snowflake no Azure para ler uma tabela virtual Iceberg baseada numa tabela Delta Lake no Fabric, siga estas etapas.

  1. Siga o guia para confirmar que a sua tabela Delta Lake foi convertida com sucesso em Iceberg e tome nota do caminho até ao elemento de dados que contém a sua tabela, bem como do ficheiro mais recente *.metadata.json da sua tabela.

  2. Identifique o ID do seu inquilino do Fabric. Selecione o seu perfil de utilizador no canto superior direito da interface do Fabric e passe o rato por cima do ícone de informação junto a Nome do locatário. Copie o ID do locatário.

    Captura de ecrã a mostrar o ID do inquilino.

  3. No Snowflake, configure o seu EXTERNAL VOLUME usando o caminho para a pasta Tables do item de dados que contém a sua tabela. Mais informações sobre a configuração de volumes externos Snowflake podem ser encontradas aqui.

    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;
    

    Observação

    Snowflake requer que o esquema de URL seja azure://, por isso certifique-se de mudar https:// para azure://.

    Substitua <path_to_data_item> pelo caminho para o item de dados, como https://onelake.dfs.fabric.microsoft.com/83896315-c5ba-4777-8d1c-e4ab3a7016bc/a95f62fa-2826-49f8-b561-a163ba537828.

  4. Agora que o volume externo foi criado, execute o seguinte comando para obter o URL de consentimento e o nome da aplicação que o Snowflake utiliza para escrever no OneLake. Esta aplicação é utilizada por qualquer outro volume externo na sua conta Snowflake.

    DESC EXTERNAL VOLUME onelake_read_exvol;
    

    A saída deste comando retorna as AZURE_CONSENT_URL propriedades e AZURE_MULTI_TENANT_APP_NAME . Tome nota de ambos os valores. O nome do aplicativo multilocatário do Azure se parece com <name>_<number>, mas você só precisa capturar a <name> parte.

  5. Abra o URL de consentimento do passo anterior num novo separador do navegador, caso não tenha completado este passo anteriormente. Se você quiser continuar, consinta com as permissões de aplicativo necessárias, se solicitado. Você pode ser redirecionado para o site principal de Snowflake.

  6. De volta ao Fabric, abra seu espaço de trabalho e selecione Gerenciar acesso e, em seguida , Adicionar pessoas ou grupos. Conceda ao aplicativo usado pelo volume externo do Snowflake as permissões necessárias para ler dados de itens de dados em seu espaço de trabalho.

    Sugestão

    Em vez disso, você pode optar por conceder permissões no nível do item de dados, se desejar. Saiba mais sobre o acesso aos dados do OneLake.

  7. Cria o CATALOG INTEGRATION objeto no Snowflake, caso não tenhas completado este passo anteriormente. Este passo é exigido pelo Snowflake para referenciar tabelas Iceberg existentes em armazenamento.

    CREATE CATALOG INTEGRATION onelake_catalog_integration
    CATALOG_SOURCE = OBJECT_STORE
    TABLE_FORMAT = ICEBERG
    ENABLED = TRUE;
    
  8. De volta ao Snowflake, crie uma tabela Iceberg fazendo referência ao arquivo de metadados mais recente para a tabela Iceberg virtualizada no 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>';
    

    Observação

    Substitua <TABLE_NAME> pelo nome da tabela e <metadata_file_path> pelo caminho do arquivo de metadados da tabela Iceberg, como dbo/MyTable/metadata/321.metadata.json.

    Depois de executar esta instrução, tem agora uma referência para a sua tabela Iceberg virtualizada que pode consultar usando o Snowflake.

  9. Consulte sua tabela Iceberg virtualizada executando a instrução a seguir.

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

Solução de problemas

Consulte as seções de solução de problemas e limitações e considerações de nossa documentação de virtualização e conversão de formato de tabela OneLake entre os formatos de tabela Delta Lake e Apache Iceberg.