Pular para o conteúdo principal

Ler dados compartilhados usando federação do Open ID Connect (OIDC) de um cliente Iceberg

Esta página descreve como os destinatários de dados de federação do Open ID Connect (OIDC) podem usar um cliente do Catálogo REST do Iceberg (IRC), como o OSS Spark ou o Snowflake, para acessar compartilhamentos OpenSharing criados no Databricks.

Se você estiver usando tokens de acesso para gerenciar a autenticação, em vez disso, consulte Criar um objeto de destinatário para usuários que não são do Databricks usando tokens de acesso (compartilhamento Databricks para Aberto).

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 no Databricks, consulte Habilitar federação do Open ID Connect (OIDC) para destinatários do OpenSharing.

Obtenha seu perfil Iceberg no portal OIDC

  1. Acesse o URL do portal de perfil OIDC que o provedor Databricks compartilhou com você.

    Solicite a URL caso ainda não a tenha recebido.

  2. Na página do portal, clique em **Baixar arquivo**.

  3. No arquivo baixado, substitua clientId, clientSecret e scope pelos seus valores.

  4. Importe o arquivo de perfil de compartilhamento usando seu código de cliente.

Acesse os dados compartilhados

Você pode acessar os dados usando qualquer Catálogo REST de Iceberg.

Snowflake

Em sua planilha do Snowflake, execute o seguinte comando para criar uma integração de catálogo. É possível também copiar o comando SQL do portal de perfil OIDC que seu provedor compartilhou.

Substitua os valores de espaço reservado antes de executar:

  • <catalog-integration-name>: Nome para a integração com o catálogo.
  • <catalog-uri>: o endpoint do Catálogo REST de Iceberg do seu arquivo de perfil baixado.
  • <share-name>: O nome do compartilhamento que lhe foi concedido.
  • <oauth-token-uri>: o endpoint de token OAuth do seu IdP.
  • <oauth-client-id> e <oauth-client-secret>: suas credenciais OAuth.
  • <oauth-scope>: Seu Escopo OAuth
SQL
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
ENABLED = TRUE;

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

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

OSS Spark

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

Substitua os valores de espaço reservado antes de executar:

  • <spark-home>: O caminho para sua instalação do Spark.
  • <iceberg-jars-path>O caminho para os arquivos JAR do Iceberg.
  • <catalog-uri>: o endpoint do Catálogo REST de Iceberg do seu arquivo de perfil baixado.
  • <share-name>: O nome do compartilhamento que lhe foi concedido.
  • <oauth-token-uri>: o endpoint de token OAuth do seu IdP.
  • <oauth-client-id> e <oauth-client-secret>: suas credenciais OAuth.
  • <oauth-scope>: Seu Escopo OAuth
  • <spark-script>: O caminho para o script Scala para executar.
Bash
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>