SDK du catalogue Iceberg Snowflake

Cette rubrique explique comment configurer et utiliser le SDK du catalogue Iceberg Snowflake. Le SDK est disponible pour Apache Iceberg versions 1.2.0 ou ultérieures.

Avec le SDK du catalogue Iceberg Snowflake, vous pouvez utiliser le moteur Apache Spark pour interroger des tables Iceberg.

Opérations de catalogue prises en charge

Le SDK prend en charge les commandes suivantes pour parcourir les métadonnées Iceberg dans Snowflake :

  • SHOW NAMESPACES

  • USE NAMESPACE

  • SHOW TABLES

  • USE DATABASE

  • USE SCHEMA

Le SDK ne prend actuellement en charge que les opérations de lecture (instructions SELECT).

Installer et se connecter

Pour installer le SDK du catalogue Iceberg Snowflake, téléchargez la dernière version des bibliothèques Iceberg.

Avant de pouvoir utiliser le SDK du catalogue Iceberg Snowflake, vous devez disposer d’une base de données Snowflake avec une ou plusieurs tables Iceberg. Pour créer une table Iceberg, voir Créer une table Iceberg.

Une fois que vous avez établi une connexion et que le SDK confirme la présence de métadonnées Iceberg, Snowflake accède à vos données Parquet en utilisant le volume externe associé à votre ou vos tables Iceberg.

Exemples

Pour lire les données d’une table avec le SDK, commencez par configurer les propriétés suivantes pour votre cluster 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>
Copy

Note

Vous pouvez utiliser n’importe quel paramètre de connexion de pilote JDBC pris en charge par Snowflake dans votre configuration via la syntaxe suivante : --conf spark.sql.catalog.snowflake_catalog.jdbc.property-name=property-value

Après avoir configuré votre cluster Spark, vous pouvez vérifier sur quelles tables vous pouvez lancer des requêtes. Par exemple :

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

Vous pouvez ensuite sélectionner une table à laquelle appliquer une requête.

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

Vous pouvez utiliser la structure DataFrame avec des langages tels que Python et Scala pour interroger les données.

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

Note

Si vous recevez des erreurs de lecture vectorisée lors de l’exécution de requêtes, vous pouvez désactiver les lectures vectorisées pour votre session en configurant : spark.sql.iceberg.vectorization.enabled=false. Pour continuer à utiliser les lectures vectorisées, en collaboration avec le représentant de l’équipe chargée de votre compte, définissez un paramètre de compte.

Mise en cache des requêtes

Lorsque vous lancez une requête, Snowflake met un certain temps à mettre le résultat en cache (90 secondes par défaut). Pendant ce délai, il se peut que vous subissiez une latence. Si vous prévoyez d’accéder aux données par programme à des fins de comparaison, vous pouvez définir la propriété spark.sql.catalog..cache-enabled sur false pour désactiver la mise en cache.

Si votre application est conçue pour tolérer un temps de latence spécifique, vous pouvez utiliser la propriété suivante pour spécifier la période de latence : spark.sql.catalog..cache.expiration-interval-ms.

Limites

Les limites suivantes s’appliquent au SDK du catalogue Iceberg Snowflake et sont susceptibles d’être modifiées :

  • Seul Apache Spark est pris en charge pour la lecture des tables Iceberg.

  • Les requêtes Time Travel ne sont pas prises en charge.

  • Vous ne pouvez pas utiliser le SDK pour accéder à des tables autres que des tables Iceberg Snowflake.