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>
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()
Dann können Sie eine Tabelle zur Abfrage auswählen.
spark.sql("SELECT * FROM my_database.my_schema.my_table WHERE ").show()
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()
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.