Leer recursos compartidos de OpenSharing desde un cliente Iceberg mediante la federación Open ID Connect (OIDC)

Los destinatarios de datos de la federación Open ID Connect (OIDC) pueden usar un cliente de Iceberg REST Catalog (IRC), como OSS Spark o Snowflake, para acceder a los compartidos OpenSharing creados en Azure Databricks.

Si, en su lugar, utilizas tokens de portador para administrar la autenticación, consulta Crear un objeto de destinatario para usuarios que no sean de Databricks mediante tokens de portador (compartición de Databricks a Open).

Esta página está pensada para destinatarios. Para obtener información sobre cómo los proveedores pueden habilitar la federación de OIDC para los destinatarios en Azure Databricks, consulte Habilitación de la federación de Open ID Connect (OIDC) para destinatarios de OpenSharing.

Descargar perfil de Iceberg para conectores OAuth

  1. Vaya a la dirección URL del portal de perfiles de OIDC que el proveedor de Azure Databricks ha compartido con usted.

    Solicite la dirección URL si aún no la ha recibido.

  2. En la página del portal, selecciona en el menú desplegable el recurso compartido al que quieres acceder.

  3. Haz clic en Descargar archivo.

  4. En el archivo descargado, reemplace clientId, clientSecret y scope por sus valores.

  5. Usa el nombre del recurso compartido seleccionado como almacén en tu configuración.

  6. Importa el archivo de perfil de compartición con tu código de cliente.

Acceso a los datos compartidos

Accede a los datos utilizando cualquier catálogo Iceberg REST.

Snowflake

En la hoja de cálculo de Snowflake, ejecute el siguiente comando para crear una integración de catálogo. También puede copiar el comando SQL desde el portal de perfiles de OIDC que el proveedor ha compartido con usted. Asegúrate de seleccionar el recurso compartido al que quieres acceder.

Reemplace los valores del marcador de posición antes de ejecutarlo:

  • <catalog-integration-name>: Un nombre para la integración del catálogo.
  • <catalog-uri>: El punto de conexión del catálogo REST de Iceberg. Encuéntralo en el portal de perfil OIDC o en tu archivo de perfil descargado.
  • <share-name>: El nombre del recurso compartido que has seleccionado en el portal de perfiles OIDC.
  • <oauth-token-uri>: el punto de conexión del token de OAuth de tu IdP.
  • <oauth-client-id> y <oauth-client-secret>: sus credenciales de OAuth.
  • <oauth-scope>: Tu alcance de OAuth.
USE ROLE ACCOUNTADMIN;

CREATE OR REPLACE CATALOG INTEGRATION <catalog-integration-name>
    CATALOG_SOURCE = ICEBERG_REST
    TABLE_FORMAT = ICEBERG
    REST_CONFIG = (
        CATALOG_URI = '<catalog-uri>'
        WAREHOUSE = '<share-name>'
        ACCESS_DELEGATION_MODE = VENDED_CREDENTIALS
    )
    REST_AUTHENTICATION = (
        TYPE = OAUTH
        OAUTH_TOKEN_URI = '<oauth-token-uri>'
        OAUTH_CLIENT_ID = '<oauth-client-id>'
        OAUTH_CLIENT_SECRET = '<oauth-client-secret>'
        OAUTH_ALLOWED_SCOPES = ('<oauth-scope>')
    )
    REFRESH_INTERVAL_SECONDS = 30 -- Optional
    ENABLED = TRUE;

Cree una base de datos vinculada que use la integración del catálogo. Reemplace por <database-name> un nombre para la base de datos.

CREATE DATABASE <database-name>
    LINKED_CATALOG = (
        CATALOG = <catalog-integration-name>
    );

OSS Spark

En el ejemplo siguiente se leen los datos compartidos de un catálogo REST de Iceberg mediante OSS Spark. Ejecútelo desde una instalación de Spark que incluya el entorno de ejecución de Iceberg para Spark y los archivos JAR del paquete de AWS.

Reemplace los valores del marcador de posición antes de ejecutarlo:

  • <spark-home>: ruta de acceso a la instalación de Spark.
  • <iceberg-jars-path>: la ruta de acceso a los archivos JAR de Iceberg.
  • <catalog-uri>: El punto de conexión del catálogo REST de Iceberg. Encuéntralo en el portal de perfil OIDC o en tu archivo de perfil descargado.
  • <share-name>: El nombre del recurso compartido que has seleccionado en el portal de perfiles OIDC.
  • <oauth-token-uri>: el punto de conexión del token de OAuth de tu IdP.
  • <oauth-client-id> y <oauth-client-secret>: sus credenciales de OAuth.
  • <oauth-scope>: Tu alcance de OAuth.
  • <spark-script>: ruta de acceso al script de Scala que se va a ejecutar.
JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64 PATH=/usr/lib/jvm/java-17-openjdk-amd64/bin:$PATH <spark-home>/bin/spark-shell \
  --jars <iceberg-jars-path>/iceberg-spark-runtime-4.0_2.13-1.10.2.jar,<iceberg-jars-path>/iceberg-aws-bundle-1.10.2.jar \
  --conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions \
  --conf spark.sql.catalog.databricks=org.apache.iceberg.spark.SparkCatalog \
  --conf spark.sql.catalog.databricks.type=rest \
  --conf spark.sql.catalog.databricks.uri=<catalog-uri> \
  --conf spark.sql.catalog.databricks.warehouse=<share-name> \
  --conf spark.sql.catalog.databricks.rest.auth.type=oauth2 \
  --conf spark.sql.catalog.databricks.oauth2-server-uri=<oauth-token-uri> \
  --conf spark.sql.catalog.databricks.credential=<oauth-client-id>:<oauth-client-secret> \
  --conf spark.sql.catalog.databricks.scope=<oauth-scope> \
  --conf spark.sql.catalog.databricks.io-impl=org.apache.iceberg.aws.s3.S3FileIO \
  < <spark-script>