Snowflake Iceberg Catalog SDK

Unter diesem Thema wird das Konfigurieren und Verwenden des Snowflake Iceberg Catalog SDK behandelt. Das SDK ist für Apache Iceberg-Versionen 1.2.0 oder höher verfügbar.

Mit dem Snowflake Iceberg Catalog SDK können Sie die Apache Spark-Engine verwenden, um Iceberg-Tabellen abzufragen.

Unterstützte Katalogoperationen

Das SDK unterstützt die folgenden Befehle zum Durchsuchen von Iceberg-Metadaten in Snowflake:

  • SHOW NAMESPACES

  • USE NAMESPACE

  • SHOW TABLES

  • USE DATABASE

  • USE SCHEMA

Das SDK unterstützt derzeit nur Leseoperationen (SELECT-Anweisungen).

Installieren und Verbinden

Um das Snowflake Iceberg Catalog SDK zu installieren, laden Sie die aktuellste Version der Iceberg-Bibliotheken herunter.

Bevor Sie das Snowflake Iceberg Catalog SDK verwenden können, benötigen Sie eine Snowflake-Datenbank mit einer oder mehreren Iceberg-Tabellen. Weitere Informationen zum Erstellen einer Iceberg-Tabelle finden Sie unter Iceberg-Tabelle erstellen.

Nachdem Sie eine Verbindung hergestellt haben und das SDK bestätigt hat, dass Iceberg-Metadaten vorhanden sind, greift Snowflake auf Ihre Parquet-Daten zu, indem das mit Ihren Iceberg-Tabellen verbundene externe Volume verwendet ist.

Beispiele

Um Tabellendaten mit dem SDK zu lesen, konfigurieren Sie zunächst die folgenden Eigenschaften für Ihren Spark-Cluster:

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

Bemerkung

Sie können in Ihrer Konfiguration jeden von Snowflake unterstützten JDBC-Treiber-Verbindungsparameter verwenden, indem Sie die folgende Syntax verwenden: --conf spark.sql.catalog.snowflake_catalog.jdbc.property-name=property-value

Nachdem Sie Ihren Spark-Cluster konfiguriert haben, können Sie prüfen, welche Tabellen zur Abfrage verfügbar sind. Beispiel:

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

Dann können Sie eine Tabelle zur Abfrage auswählen.

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

Sie können die DataFrame-Struktur mit Sprachen wie Python und Scala verwenden, um Daten abzufragen.

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

Bemerkung

Wenn Sie beim Ausführen von Abfragen Fehler beim vektorisierten Lesen erhalten, können Sie das vektorisierte Lesen für Ihre Sitzung deaktivieren, indem Sie Folgendes konfigurieren: spark.sql.iceberg.vectorization.enabled=false. Wenn Sie weiterhin vektorisiertes Lesen verwenden möchten, arbeiten Sie mit Ihrem Kundenbetreuer zusammen, um einen Kontoparameter festzulegen.

Abfrage-Caching

Wenn Sie eine Abfrage ausführen, speichert Snowflake das Ergebnis innerhalb eines bestimmten Zeitrahmens (standardmäßig 90 Sekunden). Bis zu dieser Dauer kann es zu Latenzen kommen. Wenn Sie planen, zu Vergleichszwecken programmgesteuert auf Daten zuzugreifen, können Sie die Eigenschaft spark.sql.catalog..cache-enabled auf false setzen, um das Caching zu deaktivieren.

Wenn Ihre Anwendung ein bestimmtes Maß an Latenz tolerieren soll, können Sie die folgende Eigenschaft verwenden, um die Latenz anzugeben: spark.sql.catalog..cache.expiration-interval-ms.

Einschränkungen

Die folgenden Einschränkungen gelten für das Snowflake Iceberg Catalog SDK; Änderungen vorbehalten:

  • Für das Lesen von Iceberg-Tabellen wird nur Apache Spark unterstützt.

  • Time Travel-Abfragen werden nicht unterstützt.

  • Sie können das SDK nicht für den Zugriff auf Nicht-Iceberg-Snowflake-Tabellen verwenden.