Leia compartilhamentos OpenSharing de um cliente Iceberg usando a federação Open ID Connect (OIDC)

Os destinatários de dados da federação Open ID Connect (OIDC) podem usar um cliente do Iceberg REST Catalog (IRC), como OSS Spark ou Snowflake, para acessar compartilhamentos OpenSharing criados no Azure Databricks.

Se você estiver usando tokens de portador para gerenciar a autenticação, consulte Criar um objeto de destinatário para usuários que não são do Databricks usando tokens de portador (compartilhamento Databricks-to-Open).

Esta página destina-se aos destinatários. Para obter informações sobre como os provedores podem habilitar a federação OIDC para destinatários em Azure Databricks, consulte Enable Open ID Connect (OIDC) federation for OpenSharing recipients.

Baixe o perfil Iceberg para conectores OAuth

  1. Vá para a URL do portal de perfil OIDC que o provedor de Azure Databricks compartilhou com você.

    Solicite a URL se você ainda não a recebeu.

  2. Na página do portal, selecione a pasta compartilhada à qual deseja ter acesso no menu suspenso.

  3. Clique em Baixar arquivo.

  4. No arquivo baixado, substitua clientId, clientSecrete scope com seus valores.

  5. Use o nome do compartilhamento selecionado como o warehouse em sua configuração.

  6. Importe o arquivo do perfil de compartilhamento usando o código do cliente.

Acessar os dados compartilhados

Acesse os dados usando qualquer Catálogo REST do Iceberg.

Snowflake

Em sua planilha do Snowflake, execute o comando a seguir para criar uma integração de catálogo. Você também pode copiar o comando SQL do portal de perfil OIDC que seu provedor compartilhou com você. Certifique-se de selecionar o compartilhamento que você quer acessar.

Substitua os valores dos placeholders antes de executá-lo:

  • <catalog-integration-name>: Um nome para a integração de catálogo.
  • <catalog-uri>: O ponto de extremidade do catálogo REST do Iceberg. Encontre-o no portal do perfil OIDC ou no seu arquivo de perfil baixado.
  • <share-name>: O nome do compartilhamento que você selecionou no portal de perfis do OIDC.
  • <oauth-token-uri>: o ponto de extremidade do token OAuth do IdP.
  • <oauth-client-id> e <oauth-client-secret>: suas credenciais do OAuth.
  • <oauth-scope>: seu escopo 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;

Crie um banco de dados vinculado que use a integração de catálogo. Substitua <database-name> por um nome para o banco de dados.

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

OSS Spark

O exemplo a seguir lê dados compartilhados de um Catálogo REST do Iceberg usando o OSS Spark. Execute-o a partir de uma instalação do Spark que inclui o runtime do Iceberg Spark e os JARs do pacote AWS.

Substitua os valores dos placeholders antes de executá-lo:

  • <spark-home>: O caminho para a instalação do Spark.
  • <iceberg-jars-path>: O caminho para os arquivos JAR do Iceberg.
  • <catalog-uri>: O ponto de extremidade do catálogo REST do Iceberg. Encontre-o no portal do perfil OIDC ou no seu arquivo de perfil baixado.
  • <share-name>: O nome do compartilhamento que você selecionou no portal de perfis OIDC.
  • <oauth-token-uri>: o ponto de extremidade do token OAuth do IdP.
  • <oauth-client-id> e <oauth-client-secret>: suas credenciais do OAuth.
  • <oauth-scope>: seu escopo OAuth.
  • <spark-script>: o caminho para o script Scala a ser executado.
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>