Création d’une session pour Snowpark

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 packages et des objets.

Dans ce chapitre :

Importation de noms à partir de packages 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 packages. Pour des raisons de commodité, vous pouvez importer les noms de classes, d’objets et de fonctions à partir de packages 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

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://identificateur_de_compte.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.

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é PRIVATEKEY sur la clé privée (le contenu du fichier .p8 de la clé privée sans retours chariot, nouvelles lignes, en-tête -----BEGIN ... PRIVATE KEY----- et pied de page -----END ... PRIVATE KEY-----).

  • 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 cryptée, définir la propriété PRIVATE_KEY_FILE_PWD sur la phrase secrète permettant de décrypter la clé.

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.

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

Notez que la propriété PRIVATEKEY doit être définie comme la valeur de la clé privée du fichier de clé privée. Si vous préférez pointer vers le fichier de la clé privée, définissez PRIVATE_KEY_FILE à la place. De plus, si la clé privée est cryptée, vous devez définir PRIVATE_KEY_FILE_PWD comme la phrase secrète pour le décryptage 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>

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

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>",
    "PRIVATEKEY" -> "<private_key_copied_from_the_private_key_file>",
    "ROLE" -> "<role_name>",
    "WAREHOUSE" -> "<warehouse_name>",
    "DB" -> "<database_name>",
    "SCHEMA" -> "<schema_name>"
)).create

Comme dans l’exemple du fichier de propriétés, la propriété PRIVATEKEY doit être définie comme la valeur de la clé privée du fichier de clé privée. Si vous préférez pointer vers le fichier de la clé privée, définissez PRIVATE_KEY_FILE à la place. De plus, si la clé privée est cryptée, vous devez définir PRIVATE_KEY_FILE_PWD comme la phrase secrète pour le décryptage de la clé privée :

// 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