Conexão ao Snowflake Open Catalog com autenticação de pares de chaves

Este tópico descreve como se conectar ao Snowflake Open Catalog com autenticação de pares de chaves usando um aplicativo cliente.

O código de exemplo neste tópico mostra como se conectar usando o Apache Spark™, e o código de exemplo está em PySpark.

Pré-requisitos

Antes de se conectar ao Open Catalog com autenticação de pares de chaves, você precisa configurar esse recurso no Open Catalog. Para obter instruções, consulte Configuração da autenticação de pares de chaves no Snowflake Open Catalog.

Conexão com o Open Catalog

O código de exemplo a seguir é para conexão com o Open Catalog usando o Spark.

Parâmetros

Parâmetro

Descrição

<catalog_name>

Especifica o nome do catálogo ao qual se conectar.

Importante:
<catalog_name> diferencia maiúsculas de minúsculas.

<maven_coordinate>

Especifica a coordenada Maven para seu provedor de armazenamento em nuvem externo:

  • S3: software.amazon.awssdk:bundle:2.20.160
  • Cloud Storage (do Google): org.apache.iceberg:iceberg-gcp-bundle:1.5.2
  • Azure: org.apache.iceberg:iceberg-azure-bundle:1.5.2
Se esse parâmetro não for exibido, o valor correto já foi especificado na amostra de código.

<access_token>

Especifica o token de acesso para o aplicativo do cliente a ser utilizado.

Insira o token de acesso que você gerou quando configurou a autenticação de pares de chaves no Open Catalog.

<open_catalog_account_identifier>

Especifica o identificador de conta da conta do Open Catalog.

Dependendo da região e da plataforma de nuvem da conta, esse identificador pode ser o próprio localizador da conta (por exemplo, xy12345) ou incluir segmentos adicionais. Para obter mais informações, consulte Como usar um localizador de conta como um identificador.

import pyspark
from pyspark.sql import SparkSession

spark = SparkSession.builder.appName('iceberg_lab') \
    .config('spark.jars.packages', 'org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:1.4.1,<maven_coordinate>') \
    .config('spark.sql.extensions', 'org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions') \
    .config('spark.sql.defaultCatalog', 'opencatalog') \
    .config('spark.sql.catalog.opencatalog', 'org.apache.iceberg.spark.SparkCatalog') \
    .config('spark.sql.catalog.opencatalog.type', 'rest') \
    .config('spark.sql.catalog.opencatalog.uri','https://<open_catalog_account_identifier>.snowflakecomputing.com/polaris/api/catalog') \
    .config('spark.sql.catalog.opencatalog.header.X-Iceberg-Access-Delegation','vended-credentials') \
    .config('spark.sql.catalog.opencatalog.token','<access_token>') \
    .config('spark.sql.catalog.opencatalog.warehouse','<catalog_name>') \
    .getOrCreate()
Copy

Conexão entre regiões (somente Amazon S3)

O código de exemplo a seguir é para conexão com o Open Catalog quando o seguinte for verdadeiro:

  • Sua conta do Open Catalog está hospedada no Amazon S3.

  • Seu provedor de armazenamento externo é o Amazon S3.

  • Sua conta do Open Catalog está hospedada em uma região S3 diferente da região S3 onde o bucket de armazenamento que contém suas tabelas do Apache Iceberg™ está localizado.

import pyspark
from pyspark.sql import SparkSession

spark = SparkSession.builder.appName('iceberg_lab') \
    .config('spark.jars.packages', 'org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:1.4.1,software.amazon.awssdk:bundle:2.20.160') \
    .config('spark.sql.extensions', 'org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions') \
    .config('spark.sql.defaultCatalog', 'opencatalog') \
    .config('spark.sql.catalog.opencatalog', 'org.apache.iceberg.spark.SparkCatalog') \
    .config('spark.sql.catalog.opencatalog.type', 'rest') \
    .config('spark.sql.catalog.opencatalog.uri','https://<open_catalog_account_identifier>.snowflakecomputing.com/polaris/api/catalog') \
    .config('spark.sql.catalog.opencatalog.header.X-Iceberg-Access-Delegation','vended-credentials') \
    .config('spark.sql.catalog.opencatalog.token','<access_token>') \
    .config('spark.sql.catalog.opencatalog.warehouse','<catalog_name>') \
    .config('spark.sql.catalog.opencatalog.client.region','<target_s3_region>') \
    .getOrCreate()
Copy

Parâmetros

Parâmetro

Descrição

<catalog_name>

Especifica o nome do catálogo ao qual se conectar.

Importante:
<catalog_name> diferencia maiúsculas de minúsculas.

<access_token>

Especifica o token de acesso para o aplicativo do cliente a ser utilizado.

Insira o token de acesso que você gerou quando configurou a autenticação de pares de chaves no Open Catalog.

<open_catalog_account_identifier>

Especifica o identificador de conta da conta do Open Catalog. Dependendo da região e da plataforma de nuvem da conta, esse identificador pode ser o localizador da conta por si só (por exemplo, xy12345) ou incluir segmentos adicionais. Para obter mais informações, consulte Como usar um localizador de conta como um identificador.

<target_s3_region>

Especifica o código da região onde o bucket S3 que contém suas tabelas do Apache Iceberg está localizado. Para os códigos de região, veja pontos de extremidade do servidor AWS e consulte a coluna Região na tabela.

Exemplos

Esta seção contém exemplos de conexão com o Open Catalog usando o Spark:

Exemplo 1: conectar (S3)

import pyspark
from pyspark.sql import SparkSession

spark = SparkSession.builder.appName('iceberg_lab') \
    .config('spark.jars.packages', 'org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:1.4.1,software.amazon.awssdk:bundle:2.20.160') \
    .config('spark.sql.extensions', 'org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions') \
    .config('spark.sql.defaultCatalog', 'opencatalog') \
    .config('spark.sql.catalog.opencatalog', 'org.apache.iceberg.spark.SparkCatalog') \
    .config('spark.sql.catalog.opencatalog.type', 'rest') \
    .config('spark.sql.catalog.opencatalog.uri','https://ab12345.snowflakecomputing.com/polaris/api/catalog') \
    .config('spark.sql.catalog.opencatalog.header.X-Iceberg-Access-Delegation','vended-credentials') \
    .config('spark.sql.catalog.opencatalog.token','0000000000000000000000000001111111111111111111111111111111111111111111') \
    .config('spark.sql.catalog.opencatalog.warehouse','Catalog1') \
    .getOrCreate()
Copy

Exemplo 2: conectar (Cloud Storage do Google)

import pyspark
from pyspark.sql import SparkSession

spark = SparkSession.builder.appName('iceberg_lab') \
    .config('spark.jars.packages', 'org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:1.4.1,org.apache.iceberg:iceberg-gcp-bundle:1.5.2') \
    .config('spark.sql.extensions', 'org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions') \
    .config('spark.sql.defaultCatalog', 'opencatalog') \
    .config('spark.sql.catalog.opencatalog', 'org.apache.iceberg.spark.SparkCatalog') \
    .config('spark.sql.catalog.opencatalog.type', 'rest') \
    .config('spark.sql.catalog.opencatalog.uri','https://ab12345.snowflakecomputing.com/polaris/api/catalog') \
    .config('spark.sql.catalog.opencatalog.header.X-Iceberg-Access-Delegation','vended-credentials') \
    .config('spark.sql.catalog.opencatalog.token','0000000000000000000000000001111111111111111111111111111111111111111111') \
    .config('spark.sql.catalog.opencatalog.warehouse','Catalog1') \
    .getOrCreate()
Copy

Exemplo 3: conectar (Azure)

import pyspark
from pyspark.sql import SparkSession

spark = SparkSession.builder.appName('iceberg_lab') \
    .config('spark.jars.packages', 'org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:1.4.1,org.apache.iceberg:iceberg-azure-bundle:1.5.2') \
    .config('spark.sql.extensions', 'org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions') \
    .config('spark.sql.defaultCatalog', 'opencatalog') \
    .config('spark.sql.catalog.opencatalog', 'org.apache.iceberg.spark.SparkCatalog') \
    .config('spark.sql.catalog.opencatalog.type', 'rest') \
    .config('spark.sql.catalog.opencatalog.uri','https://ab12345.snowflakecomputing.com/polaris/api/catalog') \
    .config('spark.sql.catalog.opencatalog.header.X-Iceberg-Access-Delegation','vended-credentials') \
    .config('spark.sql.catalog.opencatalog.token','0000000000000000000000000001111111111111111111111111111111111111111111') \
    .config('spark.sql.catalog.opencatalog.warehouse','Catalog1') \
    .getOrCreate()
Copy

Verifique a conexão com o Open Catalog

Para verificar se o Spark está conectado ao Open Catalog, liste os namespaces do catálogo. Para obter mais informações, consulte Listar namespaces.