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 库 (https://iceberg.apache.org/releases/)。
在使用 Snowflake Iceberg 目录 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.cn'
# 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
。要继续使用矢量化读取,请与客户团队代表联系,以设置账户参数。
查询缓存¶
在您发出查询时,Snowflake 会在特定时间范围内(默认为 90 秒)缓存结果。您可能会遇到延迟,不过持续时间不会超过此时间范围。如果出于比较的目的,您打算通过编程方式访问数据,则可以将 spark.sql.catalog..cache-enabled
属性设置为 false
以禁用缓存。
如果应用程序的设计可以接受特定的延迟时长,则可以使用以下属性来指定延迟时间段:spark.sql.catalog..cache.expiration-interval-ms
。
限制¶
以下限制适用于 Snowflake Iceberg 目录 SDK,但有可能随时发生变化:
该 SDK 目前仅支持读操作(SELECT 语句)。
仅支持 Apache Spark 读取 Iceberg 表。
不支持 Time Travel 查询。
不能使用 SDK 访问非 Iceberg Snowflake 表。