Snowflake Icebergカタログ SDK

このトピックでは、Snowflake Icebergカタログ 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カタログ SDK をインストールするには、 最新バージョンのIcebergライブラリ をダウンロードします。

Snowflake Icebergカタログ SDK を使用する前に、1つ以上の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

注釈

次の構文を使用することで、Snowflakeがサポートする任意の JDBCドライバ接続パラメーター を設定で使用できます: --conf spark.sql.catalog.snowflake_catalog.jdbc.property-name=property-value

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カタログ SDK に適用され、変更される場合があります。

  • Icebergテーブルの読み取りはApache Sparkでのみサポートされています。

  • Time Travelクエリはサポートされていません。

  • SDK を使用してIceberg Snowflake以外のテーブルにアクセスすることはできません。