키 페어 인증으로 Snowflake Open Catalog에 연결
키 페어 인증으로 Snowflake Open Catalog에 연결
일반적으로 사용 가능(GA) — 정부 리전에서는 사용할 수 없어요.
이 주제는 클라이언트 애플리케이션을 사용해 키 페어 인증으로 Snowflake Open Catalog에 연결하는 방법을 설명해요.
이 주제의 예제 코드는 Apache Spark™로 연결하는 방법을 보여주며 PySpark예요.
출처: Connect to Snowflake Open Catalog with key pair authentication
본문
사전 요구 사항
키 페어 인증으로 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, Cloud Storage(from 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()
크로스 리전 연결로 연결 (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()
매개변수
| 매개변수 | 설명 |
|---|---|
<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: 연결 (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()
예제 2: 연결 (Cloud Storage from 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()
예제 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()
Open Catalog 연결 확인
Spark가 Open Catalog에 연결됐는지 확인하려면 카탈로그의 네임스페이스를 나열하세요. 자세한 내용은 네임스페이스 나열을 참조하세요.