Snowflake Iceberg 카탈로그 SDK

이 항목에서는 Snowflake Iceberg Catalog SDK를 구성하고 사용하는 방법을 다룹니다. 이 SDK는 Apache Iceberg 버전 1.2.0 이상에서 사용할 수 있습니다.

Snowflake Iceberg 카탈로그 SDK에서는 Apache Spark 엔진을 사용하여 Iceberg 테이블 을 쿼리할 수 있습니다.

지원되는 카탈로그 작업

이 SDK는 Snowflake에서 Iceberg 메타데이터를 탐색할 수 있는 다음 명령을 지원합니다.

  • SHOW NAMESPACES

  • USE NAMESPACE

  • SHOW TABLES

  • USE DATABASE

  • USE SCHEMA

SDK에서는 현재 읽기 작업(SELECT 문)만 지원합니다.

설치 및 연결하기

Snowflake Iceberg Catalog SDK를 설치하려면 최신 버전의 Iceberg 라이브러리 를 다운로드하십시오.

Snowflake Iceberg Catalog SDK를 사용하려면 하나 이상의 Iceberg 테이블이 포함된 Snowflake 데이터베이스가 필요합니다. Iceberg 테이블을 생성하려면 Iceberg 테이블 만들기 섹션을 참조하십시오.

연결을 설정하고 SDK에서 Iceberg 메타데이터가 있음을 확인한 후 Snowflake는 Iceberg 테이블과 연결된 외부 볼륨을 사용하여 Parquet 데이터에 액세스합니다.

SDK를 사용하여 테이블 데이터를 읽으려면 Spark 클러스터에 대해 다음 속성부터 구성하십시오.

spark-shell --packages org.apache.iceberg:iceberg-spark-runtime-3.3_2.13:1.2.0,net.snowflake:snowflake-jdbc:3.13.28
# Configure a catalog named "snowflake_catalog" using the standard Iceberg SparkCatalog adapter
--conf spark.sql.catalog.snowflake_catalog=org.apache.iceberg.spark.SparkCatalog
# Specify the implementation of the named catalog to be Snowflake's Catalog implementation
--conf spark.sql.catalog.snowflake_catalog.catalog-impl=org.apache.iceberg.snowflake.SnowflakeCatalog
# Provide a Snowflake JDBC URI with which the Snowflake Catalog will perform low-level communication with Snowflake services
--conf spark.sql.catalog.snowflake_catalog.uri='jdbc:snowflake://<account_identifier>.snowflakecomputing.com'
# Configure the Snowflake user on whose behalf to perform Iceberg metadata lookups
--conf spark.sql.catalog.snowflake_catalog.jdbc.user=<user_name>
# Provide the user password. To configure the credentials, you can provide either password or private_key_file.
--conf spark.sql.catalog.snowflake_catalog.jdbc.password=<password>
# Configure the private_key_file to use when connecting to Snowflake services; additional connection options can be found at https://docs.snowflake.com/en/user-guide/jdbc-configure.html
--conf spark.sql.catalog.snowflake_catalog.jdbc.private_key_file=<location of the private key>
Copy

참고

--conf spark.sql.catalog.snowflake_catalog.jdbc.property-name=property-value 구문을 사용하여 구성에서 모든 Snowflake 지원 JDBC 드라이버 연결 매개 변수 를 사용할 수 있습니다.

Spark 클러스터를 구성한 후 쿼리에 사용할 수 있는 테이블을 확인할 수 있습니다. 예:

spark.sessionState.catalogManager.setCurrentCatalog("snowflake_catalog");
spark.sql("SHOW NAMESPACES").show()
spark.sql("SHOW NAMESPACES IN my_database").show()
spark.sql("USE my_database.my_schema").show()
spark.sql("SHOW TABLES").show()
Copy

그런 다음 쿼리할 테이블을 선택할 수 있습니다.

spark.sql("SELECT * FROM my_database.my_schema.my_table WHERE ").show()
Copy

Python 및 Scala와 같은 언어에서 DataFrame 구조체를 사용하여 데이터를 쿼리할 수 있습니다.

df = spark.table("my_database.my_schema.my_table")
df.show()
Copy

참고

쿼리 실행 중에 벡터화된 읽기 오류가 발생하는 경우 spark.sql.iceberg.vectorization.enabled=false 를 구성하여 세션에 대해 벡터화된 읽기를 비활성화할 수 있습니다. 벡터화된 읽기를 계속 사용하려면 계정 팀 담당자와 협력하여 계정 매개 변수를 설정하십시오.

쿼리 캐싱

쿼리를 실행하면 Snowflake가 특정 시간 프레임(기본적으로 90초) 내에 결과를 캐시합니다. 해당 기간까지 대기 시간이 발생할 수 있습니다. 비교를 위해 프로그래밍 방식으로 데이터에 액세스하려는 경우 spark.sql.catalog..cache-enabled 속성을 false 로 설정하여 캐싱을 비활성화할 수 있습니다.

애플리케이션이 특정 대기 시간을 허용하도록 설계된 경우 spark.sql.catalog..cache.expiration-interval-ms 속성을 사용하여 대기 시간을 지정할 수 있습니다.

제한 사항

다음 제한 사항이 Snowflake Iceberg Catalog SDK에 적용되며 변경될 수 있습니다.

  • Iceberg 테이블 읽기에는 Apache Spark만 지원됩니다.

  • Time Travel 쿼리는 지원되지 않습니다.

  • Iceberg Snowflake 테이블이 아닌 테이블에 액세스하는 데는 SDK를 사용할 수 없습니다.