Compartir a través de


Lectura de tablas de Databricks desde clientes de Iceberg.

Utiliza el catálogo REST de Iceberg para leer las tablas registradas en el catálogo de Unity en Azure Databricks desde clientes de Iceberg compatibles, incluidos Apache Spark, Apache Flink, Trino y Snowflake.

Leer con el punto de conexión del catálogo Iceberg de Unity Catalog

El catálogo de Unity proporciona una implementación de solo lectura de la API de catálogo REST de Iceberg para tablas con lecturas de Iceberg habilitadas.

Configure el acceso mediante el punto de conexión /api/2.1/unity-catalog/iceberg. Consulte la especificación de la API REST de Iceberg para obtener más detalles sobre el uso de esta API REST.

Nota

Azure Databricks ha introducido la distribución de credenciales para algunos clientes lectores de Iceberg. Databricks recomienda usar la provisión de credenciales para controlar el acceso a las ubicaciones de almacenamiento en la nube en los sistemas compatibles. Consulte el Suministro de credenciales de Unity Catalog para obtener acceso al sistema externo.

Si no se admite la distribución de credenciales para el cliente, debe configurar el acceso desde el cliente a la ubicación de almacenamiento en la nube que contiene los archivos y metadatos de la tabla Delta con lecturas de Iceberg (UniForm) habilitadas. Consulte la documentación de su cliente lector de Iceberg para obtener detalles de configuración.

Requisitos

Azure Databricks admite el acceso al catálogo REST de Iceberg para las tablas como parte de Unity Catalog. Debe tener habilitado el catálogo de Unity en el área de trabajo para usar estos puntos de conexión. Los siguientes tipos de tabla son aptos para las lecturas del catálogo de REST de Iceberg:

  • Tablas administradas por Unity Catalog con la función de lectura de Iceberg (UniForm) activada.
  • Tablas externas de Unity Catalog almacenadas con Delta Lake con lecturas de Iceberg (UniForm) habilitadas.

Consulte Leer tablas Delta con clientes de Iceberg.

Debe completar los siguientes pasos de configuración para configurar el acceso para leer tablas de Databricks desde clientes de Iceberg mediante el catálogo de REST de Iceberg:

Leer tablas de Iceberg con Apache Spark

A continuación se muestra un ejemplo de la configuración de Apache Spark para leer las tablas de Azure Databricks como Iceberg.

"spark.sql.extensions": "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions",

# Configuration for accessing Uniform tables in Unity Catalog
"spark.sql.catalog.<spark-catalog-name>": "org.apache.iceberg.spark.SparkCatalog",
"spark.sql.catalog.<spark-catalog-name>.type": "rest",
"spark.sql.catalog.<spark-catalog-name>.uri": "<workspace-url>/api/2.1/unity-catalog/iceberg",
"spark.sql.catalog.<spark-catalog-name>.token":"<token>",
"spark.sql.catalog.<spark-catalog-name>.warehouse":"<uc-catalog-name>"

Sustituya las siguientes variables:

  • <uc-catalog-name>: El nombre del catálogo en Unity Catalog que contiene tus tablas.
  • <spark-catalog-name>: el nombre que desea asignar al catálogo en la sesión de Spark.
  • <workspace-url>: dirección URL del área de trabajo de Azure Databricks.
  • <token>: Token PAT para el principal responsable de configurar la integración.

Con estos parámetros, puede consultar tablas de Azure Databricks como Iceberg en Apache Spark mediante el identificador <catalog-name>.<schema-name>.<table-name>. Para acceder a tablas en varios catálogos, debe configurar cada catálogo por separado.

Al consultar tablas en el catálogo de Unity mediante configuraciones de Spark, tenga en cuenta lo siguiente:

  • Solo necesita "spark.sql.extensions": "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions" si ejecuta procedimientos almacenados específicos de Iceberg .

  • Azure Databricks usa el almacenamiento de objetos en la nube para todas las tablas. Debe agregar el archivo JAR del paquete Iceberg específico de la nube como un paquete Spark.

    • AWS: org.apache.iceberg:iceberg-aws-bundle:<iceberg-version>
    • Azure: org.apache.iceberg:iceberg-azure-bundle:<iceberg-version>
    • GCP: org.apache.iceberg:iceberg-gcp-bundle:<iceberg-version>

    Para más detalles, consulte la documentación de la integración de Iceberg con AWS para Spark.

Lectura de tablas de Databricks con Snowflake

A continuación se muestra un ejemplo de las opciones de configuración recomendadas para permitir que Snowflake lea las tablas de Azure Databricks como Iceberg.

CREATE OR REPLACE CATALOG INTEGRATION <catalog-integration-name>
  CATALOG_SOURCE = ICEBERG_REST
  TABLE_FORMAT = ICEBERG
  CATALOG_NAMESPACE = '<uc-schema-name>'
  REST_CONFIG = (
    CATALOG_URI = '<workspace-url>/api/2.1/unity-catalog/iceberg',
    WAREHOUSE = '<uc-catalog-name>'
  )
  REST_AUTHENTICATION = (
    TYPE = BEARER
    BEARER_TOKEN = '<token>'
  )
  ENABLED = TRUE;

Reemplace las siguientes variables:

  • <catalog-integration-name>: el nombre que desea asignar al catálogo registrado en Snowflake.
  • <uc-schema-name>: el nombre del esquema en el catálogo de Unity al que debe acceder.
  • <uc-catalog-name>: el nombre del catálogo en el catálogo de Unity al que debe tener acceso.
  • <workspace-url>: dirección URL del área de trabajo de Azure Databricks.
  • <token>: Token PAT para el principal responsable de configurar la integración.

Ejemplo de CURL de la API de REST

También puede usar una llamada a la API de REST como la de este ejemplo de curl para cargar una tabla:

curl -X GET -H "Authentication: Bearer $OAUTH_TOKEN" -H "Accept: application/json" \
https://<workspace-instance>/api/2.1/unity-catalog/iceberg/v1/catalogs/<uc_catalog_name>/namespaces/<uc_schema_name>/tables/<uc_table_name>

A continuación, debería recibir una respuesta similar a la siguiente:

{
  "metadata-location": "abfss://my-container@my-storage-account.dfs.core.windows.net/path/to/iceberg/table/metadata/file",
  "metadata": <iceberg-table-metadata-json>,
  "config": {
    "expires-at-ms": "<epoch-ts-in-millis>",
    "adls.sas-token.<storage-account-name>.dfs.core.windows.net": "<temporary-sas-token>"
  }
}

Nota

El campo expires-at-ms de la respuesta indica la hora de expiración de las credenciales y tiene una hora de expiración predeterminada de una hora. Para mejorar el rendimiento, haga que el cliente almacene en caché las credenciales hasta la fecha de expiración antes de solicitar una nueva.