Création d’une session pour Snowpark Scala

Pour utiliser Snowpark dans votre application, vous devez créer une session. Pour faciliter l’écriture du code, vous pouvez également importer les noms des paquets et des objets.

Dans ce chapitre :

Importation de noms à partir de paquets et d’objets pour Snowpark

L’API de Snowpark fournit un certain nombre de classes, d’objets et de fonctions qui sont disponibles dans différents paquets. Pour des raisons de commodité, vous pouvez importer les noms de classes, d’objets et de fonctions à partir de paquets et d’objets pour éviter d’avoir à utiliser des noms qualifiés.

Par exemple :

Note

Si vous avez utilisé le script run.sh pour démarrer le REPL Scala, le script importe déjà des noms com.snowflake.snowpark et com.snowflake.snowpark.functions.

Création d’une session pour Snowpark

La première étape de l’utilisation de la bibliothèque consiste à établir une session avec la base de données Snowflake. Pour créer une session, utilisez l’objet SessionBuilder. Vous pouvez accéder à l’objet SessionBuilder par le biais du champ builder de l’objet compagnon Session :

import com.snowflake.snowpark._

...
// Get a SessionBuilder object.
val builder = Session.builder
Copy

Pour fournir les détails permettant d’établir une session avec une base de données Snowflake (par exemple, l’identificateur du compte, le nom de l’utilisateur, etc.), il faut soit créer un fichier de propriétés (un fichier texte), soit construire de manière programmatique un Map contenant les propriétés.

Dans le fichier de propriétés ou Map, définissez les propriétés suivantes :

  • URL : définissez ce paramètre sur l’URL de votre compte sous la forme https://account_identifier.snowflakecomputing.com.

    Voir Identificateurs de compte.

    Si l’identificateur du compte contient des traits de soulignement (_), remplacez-les par des traits d’union (-).

  • Tout paramètre JDBC supplémentaire (voir Référence Paramètre de connexion pilote JDBC dans la documentation du pilote JDBC) nécessaire à la connexion à Snowflake (par exemple USER, ROLE, WAREHOUSE, DB, SCHEMA, etc.).

    Note

    Pour modifier le niveau de journalisation (par exemple de INFO à DEBUG), voir Modification des paramètres de journalisation.

  • (Facultatif) snowpark_request_timeout_in_seconds : définissez ici le nombre maximum de secondes pendant lesquelles la bibliothèque Snowpark doit patienter dans les cas suivants :

    La valeur par défaut de cette propriété est 86400 secondes (1 jour).

    Note

    Cette propriété a été introduite dans Snowpark 0.10.0.

Pour vous authentifier, vous pouvez utiliser les mêmes mécanismes que ce que le pilote JDBC prend en charge. Par exemple, vous pouvez utiliser :

Pour l’authentification par paire de clés, vous pouvez soit :

  • Définir la propriété PRIVATE_KEY_FILE comme le chemin d’accès au fichier de la clé privée.

    Si la clé privée est chiffrée, définir la propriété PRIVATE_KEY_FILE_PWD sur la phrase secrète permettant de déchiffrer la clé.

  • Définir la propriété PRIVATEKEY sur la valeur de chaîne de la clé privée non chiffrée du fichier de clé privée. (Si la clé privée est chiffrée, vous devez déchiffrer la clé avant de la définir comme valeur de la propriété PRIVATEKEY).

Pour créer la session :

  1. Définissez les propriétés de l’objet Session.builder.

    • Si vous avez créé un fichier de propriétés, transmettez le chemin d’accès au fichier de propriétés à la méthode Session.builder.configFile.

    • Si vous avez construit de façon programmée un Map des propriétés, transmettez Map à la méthode Session.builder.configs.

    Les deux méthodes renvoient un objet builder qui possède ces propriétés.

  2. Appelez la méthode create de l’objet builder pour établir la session.

Voici un exemple de fichier de propriétés qui définit les paramètres de base pour la connexion à une base de données Snowflake. L’exemple est configuré pour utiliser l’authentification par paire de clés. Définissez PRIVATE_KEY_FILE comme le chemin d’accès au fichier de la clé privée. De plus, si la clé privée est chiffrée, vous devez définir PRIVATE_KEY_FILE_PWD comme la phrase secrète pour le déchiffrage de la clé privée :

# profile.properties file (a text file)
URL = https://<account_identifier>.snowflakecomputing.com
USER = <username>
PRIVATE_KEY_FILE = </path/to/private_key_file.p8>
PRIVATE_KEY_FILE_PWD = <if the private key is encrypted, set this to the passphrase for decrypting the key>
ROLE = <role_name>
WAREHOUSE = <warehouse_name>
DB = <database_name>
SCHEMA = <schema_name>
Copy

À la place, vous pouvez définir la propriété PRIVATEKEY sur la clé privée non chiffrée du fichier de clé privée.

# profile.properties file (a text file)
URL = https://<account_identifier>.snowflakecomputing.com
USER = <username>
PRIVATEKEY = <unencrypted_private_key_from_the_private_key_file>
ROLE = <role_name>
WAREHOUSE = <warehouse_name>
DB = <database_name>
SCHEMA = <schema_name>
Copy

L’exemple suivant utilise ce fichier de propriétés pour créer une nouvelle session :

// Create a new session, using the connection properties
// specified in a file.
val session = Session.builder.configFile("/path/to/properties/file").create
Copy

L’exemple suivant utilise une carte pour définir les propriétés :

// Create a new session, using the connection properties
// specified in a Map.
val session = Session.builder.configs(Map(
    "URL" -> "https://<account_identifier>.snowflakecomputing.com",
    "USER" -> "<username>",
    "PRIVATE_KEY_FILE" -> "</path/to/private_key_file.p8>",
    "PRIVATE_KEY_FILE_PWD" -> "<if the private key is encrypted, set this to the passphrase for decrypting the key>",
    "ROLE" -> "<role_name>",
    "WAREHOUSE" -> "<warehouse_name>",
    "DB" -> "<database_name>",
    "SCHEMA" -> "<schema_name>"
)).create
Copy

Clôture d’une session

Si vous n’avez plus besoin d’utiliser une session pour exécuter des requêtes et que vous souhaitez annuler les requêtes en cours d’exécution, appelez la méthode close de l’objet Session. Par exemple :

// Close the session, cancelling any queries that are currently running, and
// preventing the use of this Session object for performing any subsequent queries.
session.close();
Copy