Snowflakeカタログ SDK¶
Snowflakeカタログ SDK は、 Apache Iceberg™ バージョン1.2.0以降でご利用いただけます。
Snowflakeカタログ SDK を使用すると、Apache Spark™エンジンを使用して Icebergテーブル にクエリを実行できます。
サポートされているカタログ操作¶
SDK は、SnowflakeでIcebergメタデータを参照するための次のコマンドをサポートしています。
SHOW NAMESPACES
USE NAMESPACE
SHOW TABLES
USE DATABASE
USE SCHEMA
現在、SDK は読み取り操作(SELECT ステートメント)のみをサポートしています。
インストールと接続¶
Snowflakeカタログ SDK をインストールするには、 最新バージョンのIcebergライブラリ をダウンロードします。
Snowflakeカタログ SDK を使用する前に、1つ以上のIcebergテーブルを持つSnowflakeデータベースが必要です。Icebergテーブルを作成するには、 Snowflakeで Apache 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>
注釈
次の構文を使用することで、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()
そして、クエリするテーブルを選択できます。
spark.sql("SELECT * FROM my_database.my_schema.my_table WHERE ").show()
PythonやScalaなどの言語で DataFrame
構造を使用してデータをクエリできます。
df = spark.table("my_database.my_schema.my_table")
df.show()
注釈
クエリ実行中にベクトル化された読み取りエラーが発生した場合は、次のように設定してセッションのベクトル化された読み取りを無効にすることができます: spark.sql.iceberg.vectorization.enabled=false
。ベクトル化された読み取りを使い続けるには、 STORAGE_SERIALIZATION_POLICY パラメーターを設定します。
クエリのキャッシュ¶
クエリを発行すると、Snowflakeは一定時間内(デフォルトでは90秒)結果をキャッシュします。その期間まで遅延が発生する可能性があります。比較のためにプログラムでデータにアクセスする場合は、 spark.sql.catalog..cache-enabled
プロパティを false
に設定してキャッシュを無効にできます。
アプリケーションが特定の遅延時間を許容するように設計されている場合、次のプロパティを使用して遅延時間を指定できます: spark.sql.catalog..cache.expiration-interval-ms
。
制限事項¶
次の制限はSnowflakeカタログ SDK に適用され、変更される場合があります。
現在、SDK は読み取り操作(SELECT ステートメント)のみをサポートしています。
Icebergテーブルの読み取りはApache Sparkでのみサポートされています。
SDK を使用してIceberg Snowflake以外のテーブルにアクセスすることはできません。