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>
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,但有可能随时发生变化:

  • 该 SDK 目前仅支持读操作(SELECT 语句)。

  • 仅支持 Apache Spark 读取 Iceberg 表。

  • 不支持 Time Travel 查询。

  • 不能使用 SDK 访问非 Iceberg Snowflake 表。

语言: 中文