Uso de Snowflake con tablas de Iceberg en OneLake

OneLake se puede usar con Snowflake para el almacenamiento y el acceso a las tablas de Apache Iceberg.

Siga esta guía para usar Snowflake en Azure para:

  • escribir tablas de Iceberg directamente en OneLake
  • leer tablas virtuales de Iceberg convertidas desde el formato Delta Lake

Antes de empezar, siga los pasos previos de este artículo.

Prerequisite

Para usar Snowflake en Azure para escribir o leer tablas Iceberg con OneLake, la identidad de tu cuenta Snowflake en Entra ID debe comunicarse con Fabric. Habilite la configuración de nivel de inquilino de Fabric que permita a las entidades de servicio llamar a las API de Fabric y llamar a las API de OneLake.

Importante

Snowflake llega a OneLake a través de la red pública. Snowflake aún no admite la conectividad con áreas de trabajo protegidas por private link u otras restricciones de red.

Escribir una tabla Iceberg en OneLake mediante Snowflake en Azure

Al usar Snowflake en Azure, es posible escribir tablas de Iceberg en OneLake siguiendo estos pasos:

  1. Asegúrese de que la capacidad de Fabric esté en la misma ubicación de Azure que la instancia de Snowflake.

    Identifique la ubicación de la capacidad de Fabric asociada al almacén de lago de Fabric. Abra la configuración del área de trabajo de Fabric que contiene su lakehouse.

    Captura de pantalla en la que se muestra la región de capacidad de Fabric.

    En la esquina inferior izquierda de la interfaz de la cuenta de Snowflake en Azure, compruebe la región de Azure de la cuenta de Snowflake.

    Captura de pantalla en la que se muestra la región de la cuenta de Snowflake.

    Si estas regiones son diferentes, debe usar una capacidad de Fabric distinta en la misma región que su cuenta de Snowflake.

  2. Abra el menú del área de Archivos de su lakehouse, seleccione Propiedades y copie la URL (la ruta HTTPS) de esa carpeta.

    Captura de pantalla en la que se muestra el elemento de menú Propiedades.

  3. Identifique el ID de su inquilino de Fabric. Seleccione el perfil de usuario en la esquina superior derecha de la interfaz de usuario de Fabric y mantenga el puntero sobre la burbuja de información situada junto a su Nombre de inquilino. Copie el identificador de inquilino.

    Captura de pantalla en la que se muestra el identificador de inquilino.

  4. En Snowflake, establece tu EXTERNAL VOLUME utilizando la ruta de acceso a la carpeta de tu lakehouse Files. Encontrará más información sobre cómo configurar volúmenes externos de Snowflake aquí.

    Note

    Snowflake requiere que el esquema de dirección URL sea azure://, por lo que asegúrese de cambiar la ruta de acceso de 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>'
        )
    );
    

    En este ejemplo, las tablas que se creen con este volumen externo se almacenarán en el lakehouse de Fabric, dentro de la carpeta Files/icebergtables.

  5. Una vez creado el volumen externo, ejecute el siguiente comando para recuperar la dirección URL de consentimiento y el nombre de la aplicación que Snowflake usa para escribir en OneLake. Cualquier otro volumen externo de la cuenta de Snowflake usa esta aplicación.

    DESC EXTERNAL VOLUME onelake_write_exvol;
    

    La salida de este comando devuelve las propiedades AZURE_CONSENT_URL y AZURE_MULTI_TENANT_APP_NAME. Tome nota de ambos valores. El nombre de aplicación multiinquilino de Azure es similar a <name>_<number>, pero solo es necesario capturar la parte <name>.

  6. Abra la dirección URL de consentimiento del paso anterior en una nueva pestaña del explorador, si no completó anteriormente este paso. Si desea continuar, dé su consentimiento a los permisos de aplicación necesarios, si se le solicita. Es posible que se le redirija al sitio web principal de Snowflake.

  7. De nuevo en Fabric, abra el área de trabajo y seleccione Administrar acceso y, a continuación, Agregar contactos o grupos. Otorgue a la aplicación que utiliza su volumen externo de Snowflake los permisos necesarios para escribir datos en los lakehouses de su área de trabajo. Se recomienda conceder el rol de Colaborador.

  8. De nuevo en Snowflake, usa tu nuevo volumen externo para crear una tabla Iceberg.

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

    Esta instrucción crea una nueva carpeta de tabla de Iceberg denominada Inventory dentro de la ruta de acceso de carpeta definida en el volumen externo.

  9. Agregue algunos datos en la tabla de Iceberg.

    INSERT INTO MYDATABASE.PUBLIC.Inventory
    VALUES
    (123456,'Amatriciana');
    
  10. Por último, en el área Tablas del mismo lakehouse, puede crear un acceso directo de OneLake a su tabla Iceberg. Mediante ese acceso directo, la tabla de Iceberg aparece como una tabla de Delta Lake para su uso en las cargas de trabajo de Fabric.

Lectura de una tabla virtual de Iceberg de OneLake mediante Snowflake en Azure

Para usar Snowflake en Azure para leer una tabla virtual de Iceberg basada en una tabla de Delta Lake en Fabric, siga estos pasos.

  1. Siga la guía para confirmar que su tabla de Delta Lake se convirtió correctamente en Iceberg y tome nota de la ruta de acceso al elemento de datos que contiene su tabla, así como el archivo más reciente de dicha tabla *.metadata.json.

  2. Identifique el ID de su inquilino de Fabric. Seleccione el perfil de usuario en la esquina superior derecha de la interfaz de usuario de Fabric y mantenga el puntero sobre la burbuja de información situada junto a su Nombre de inquilino. Copie el identificador de inquilino.

    Captura de pantalla en la que se muestra el identificador de inquilino.

  3. En Snowflake, configure EXTERNAL VOLUME mediante la ruta de acceso a la Tables carpeta del elemento de datos que contiene la tabla. Encontrará más información sobre cómo configurar volúmenes externos de Snowflake aquí.

    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 requiere que el esquema de dirección URL sea azure://, así que asegúrese de cambiar https:// por azure://.

    Reemplace por <path_to_data_item> la ruta de acceso al elemento de datos, como https://onelake.dfs.fabric.microsoft.com/83896315-c5ba-4777-8d1c-e4ab3a7016bc/a95f62fa-2826-49f8-b561-a163ba537828.

  4. Una vez creado el volumen externo, ejecute el siguiente comando para recuperar la dirección URL de consentimiento y el nombre de la aplicación que Snowflake usa para escribir en OneLake. Cualquier otro volumen externo de la cuenta de Snowflake usa esta aplicación.

    DESC EXTERNAL VOLUME onelake_read_exvol;
    

    La salida de este comando devuelve las propiedades AZURE_CONSENT_URL y AZURE_MULTI_TENANT_APP_NAME. Tome nota de ambos valores. El nombre de aplicación multiinquilino de Azure es similar a <name>_<number>, pero solo es necesario capturar la parte <name>.

  5. Abra la dirección URL de consentimiento del paso anterior en una nueva pestaña del explorador, si no completó anteriormente este paso. Si desea continuar, dé su consentimiento a los permisos de aplicación necesarios, si se le solicita. Es posible que se le redirija al sitio web principal de Snowflake.

  6. De nuevo en Fabric, abra el área de trabajo y seleccione Administrar acceso y, a continuación, Agregar contactos o grupos. Otorgue a la aplicación que utiliza el volumen externo de Snowflake los permisos necesarios para leer los datos de los elementos de datos en su área de trabajo.

    Tip

    En su lugar, puedes elegir conceder permisos a nivel de elemento de datos, si lo deseas. Obtenga más información sobre el acceso a datos de OneLake.

  7. Cree el CATALOG INTEGRATION objeto en Snowflake, si no completó este paso anteriormente. Snowflake requiere este paso para hacer referencia a las tablas existentes de Iceberg en almacenamiento.

    CREATE CATALOG INTEGRATION onelake_catalog_integration
    CATALOG_SOURCE = OBJECT_STORE
    TABLE_FORMAT = ICEBERG
    ENABLED = TRUE;
    
  8. De nuevo en Snowflake, cree una tabla Iceberg que haga referencia al archivo de metadatos más reciente para la tabla Iceberg virtualizada en 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

    Reemplace <TABLE_NAME> con el nombre de su tabla y <metadata_file_path> con la ruta de acceso del archivo de metadatos de su tabla Iceberg, como dbo/MyTable/metadata/321.metadata.json.

    Después de ejecutar esta instrucción, ahora tiene una referencia a la tabla virtualizada de Iceberg que ahora puede consultar mediante Snowflake.

  9. Para consultar la tabla virtualizada de Iceberg, ejecute la instrucción siguiente.

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

Troubleshooting

Consulte las secciones de solución de problemas y limitaciones y consideraciones de nuestra documentación sobre la virtualización y conversión de formato de tabla oneLake entre Delta Lake y los formatos de tabla de Apache Iceberg.