키 페어 인증을 사용하여 Snowflake Open Catalog에 연결

이 항목에서는 클라이언트 애플리케이션을 사용하여 키 페어 인증으로 Snowflake Open Catalog에 연결하는 방법을 설명합니다.

이 항목의 예제 코드는 Apache Spark™를 사용하여 연결하는 방법을 보여주며, 예제 코드는 PySpark로 되어 있습니다.

전제 조건

키 페어 인증으로 Open Catalog에 연결하려면 먼저 Open Catalog에서 키 페어 인증을 구성해야 합니다. 지침은 Snowflake Open Catalog에서 키 페어 인증 구성을 참조하세요.

Open Catalog로 연결

다음 예제 코드는 Spark를 사용하여 Open Catalog에 연결하기 위한 코드입니다.

매개 변수

매개 변수

설명

<catalog_name>

연결할 카탈로그의 이름을 지정합니다.

중요:
<catalog_name>은 대/소문자를 구분합니다.

<maven_coordinate>

외부 클라우드 저장소 공급자에 대한 Maven 좌표를 지정합니다.

  • S3: software.amazon.awssdk:bundle:2.20.160
  • 클라우드 저장소(Google에서 제공): org.apache.iceberg:iceberg-gcp-bundle:1.5.2
  • Azure: org.apache.iceberg:iceberg-azure-bundle:1.5.2
이 매개 변수가 보이지 않는 경우, 코드 샘플에 올바른 값이 이미 지정되어 있는 것입니다.

<access_token>

클라이언트 애플리케이션이 사용할 액세스 토큰을 지정합니다.

Open Catalog에서 키 페어 인증을 구성할 때 생성한 액세스 토큰을 입력합니다.

<open_catalog_account_identifier>

Open Catalog 계정에 대한 계정 식별자를 지정합니다.

계정의 리전과 클라우드 플랫폼에 따라, 이 식별자는 그 자체로 계정 로케이터가 되거나(예: xy12345) 추가 세그먼트를 포함할 수 있습니다. 자세한 내용은 계정 로케이터를 식별자로 사용하기 섹션을 참조하십시오.

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

리전 간 연결로 연결(Amazon S3만 해당)

다음 예제 코드는 다음에 해당하는 경우 Open Catalog에 연결하기 위한 코드입니다.

  • Open Catalog 계정이 Amazon S3에 호스팅되어 있습니다.

  • 외부 저장소 공급자는 Amazon S3입니다.

  • Open Catalog 계정이 Apache Iceberg™ 테이블이 포함된 저장소 버킷이 있는 S3 리전과 다른 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://<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

매개 변수

매개 변수

설명

<catalog_name>

연결할 카탈로그의 이름을 지정합니다.

중요:
<catalog_name>은 대/소문자를 구분합니다.

<access_token>

클라이언트 애플리케이션이 사용할 액세스 토큰을 지정합니다.

Open Catalog에서 키 페어 인증을 구성할 때 생성한 액세스 토큰을 입력합니다.

<open_catalog_account_identifier>

Open Catalog 계정에 대한 계정 식별자를 지정합니다. 계정의 리전과 클라우드 플랫폼에 따라, 이 식별자는 그 자체로 계정 로케이터가 되거나(예: xy12345) 추가 세그먼트를 포함할 수 있습니다. 자세한 내용은 계정 로케이터를 식별자로 사용하기 섹션을 참조하십시오.

<target_s3_region>

Apache Iceberg 테이블이 포함된 S3 버킷이 있는 리전 코드를 지정합니다. 리전 코드는 AWS 서비스 엔드포인트를 확인하고 테이블의 Region 열을 참조하십시오.

이 섹션에는 Spark를 사용하여 Open Catalog에 연결하는 예가 포함되어 있습니다.

예 1: Connect (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

예 2: 연결(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

예 3: 연결(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

Open Catalog에 대한 연결 확인하기

Spark가 Open Catalog에 연결되었는지 확인하려면 카탈로그의 네임스페이스를 나열합니다. 자세한 내용은 네임스페이스 목록 섹션을 참조하십시오.