Classes Snowflake

La base de données SNOWFLAKE comprend également les classes fournies par Snowflake.

Concepts

Une classe est similaire à une classe dans la programmation orientée objet et sert de modèle pour la création d’instances. Une instance est un objet créé à partir d’une classe. Les classes et les instances sont des objets de niveau schéma dans Snowflake. Vous pouvez considérer une classe comme un type d’objet Snowflake extensible et une instance comme un objet Snowflake.

Une classe fournit une API publique par le biais de procédures et de fonctions stockées. Collectivement, elles sont appelées méthodes de classe. Une classe fournit également des rôles de classe qui permettent d’obtenir des privilèges précis sur les méthodes de la classe. En plus de son API publique, une classe comprend un état privé et des procédures et fonctions privées, similaires aux propriétés et méthodes privées dans la programmation orientée objet. L’implémentation d’une classe peut évoluer au fil du temps grâce à de nouvelles versions de classe. Les instances sont mises à niveau automatiquement par Snowflake vers la dernière version de la classe.

Par exemple, Snowflake fournit la classe ANOMALY_DETECTION dans le schéma SNOWFLAKE.ML. Vous pouvez créer une instance d’une classe à l’aide d’une commande CREATE, de la même manière que vous créeriez un objet d’un type spécifique.

L’exemple ci-dessous crée une instance d’une classe et appelle une méthode d’instance.

  1. Mettez à jour votre chemin de recherche pour y inclure SNOWFLAKE.ML :

    ALTER SESSION SET SEARCH_PATH = '$current, $public, snowflake.ml';
    
    Copy
  2. Créez une instance de la classe ANOMALY_DETECTION :

    CREATE ANOMALY_DETECTION mydatabase.myschema.my_anomaly_detector(...);
    
    Copy
  3. Après avoir créé une instance de la classe ANOMALY_DETECTION, vous pouvez appeler les méthodes de l’instance :

    mydatabase.myschema.my_anomaly_detector!DETECT_ANOMALIES(...);
    
    Copy

Note

Actuellement, les classes sont uniquement fournies par Snowflake et ne peuvent pas être créées par les utilisateurs.

Afficher les classes disponibles

Vous pouvez trouver les classes disponibles et en savoir plus sur chaque classe en utilisant les commandes SHOW. Ces commandes vous permettent de :

Trouver toutes les classes

Répertoriez la liste de toutes les classes Snowflake disponibles en exécutant la commande SHOW CLASSES :

SHOW CLASSES IN DATABASE SNOWFLAKE;
Copy

Les résultats de cette instruction comprennent la base de données et le nom du schéma pour chaque classe.

Mettre à jour votre chemin de recherche

Les classes sont des objets d’un schéma dans la base de données SNOWFLAKE. Vous devez utiliser le nom complet de la classe (par exemple, SNOWFLAKE.ML.ANOMALY_DETECTION) pour exécuter les commandes SQL qui suivent dans cette rubrique. Vous pouvez également mettre à jour le chemin de recherche pour y inclure la base de données et le schéma d’une classe, puis faire référence à la classe par son nom non qualifié (par exemple, ANOMALY_DETECTION).

Vous pouvez modifier le chemin de recherche en utilisant ALTER SESSION, ALTER USER, ou ALTER ACCOUNT.

Commande

Remarques

ALTER SESSION

Modifie le chemin de recherche pour la session en cours uniquement. Vous pouvez modifier votre propre chemin de recherche au niveau de la session. Une modification au niveau de la session remplace le paramètre au niveau du compte ou de l’utilisateur.

ALTER USER

Modifie le chemin de recherche de manière persistante pour l’utilisateur actuel ou spécifié. Vous pouvez modifier votre propre chemin de recherche au niveau de l’utilisateur. Un administrateur peut modifier le chemin de recherche d’un autre utilisateur. Une modification au niveau de l’utilisateur remplace le paramètre au niveau du compte ou de la session.

ALTER ACCOUNT

Modifie le chemin de recherche de manière persistante pour tous les utilisateurs du compte. Un administrateur doit modifier le chemin de recherche au niveau du compte.

  1. Exécutez l’instruction suivante et copiez votre chemin de recherche actuel dans la colonne value :

    SHOW PARAMETERS LIKE 'search_path';
    
    Copy
  2. Mettez à jour votre chemin de recherche.

    Note

    Les exemples ci-dessous utilisent le chemin de recherche par défaut, $current, $public. Si le chemin de recherche indiqué dans la colonne value à l’étape précédente ne correspond pas à la valeur par défaut, modifiez les instructions de l’exemple ci-dessous pour inclure votre chemin de recherche réel.

    Par exemple, pour ajouter SNOWFLAKE.ML à votre chemin de recherche pour votre session actuelle, exécutez l’instruction suivante :

    ALTER SESSION SET SEARCH_PATH = '$current, $public, SNOWFLAKE.ML';
    
    Copy

    Pour ajouter SNOWFLAKE.ML à votre propre chemin de recherche au niveau de l’utilisateur, exécutez l’instruction suivante :

    ALTER USER SET SEARCH_PATH = '$current, $public, SNOWFLAKE.ML';
    
    Copy

    Un utilisateur ayant le rôle ACCOUNTADMIN peut mettre à jour le chemin de recherche pour le compte en exécutant l’instruction suivante :

    ALTER ACCOUNT SET SEARCH_PATH = '$current, $public, SNOWFLAKE.ML';
    
    Copy

Pour plus d’informations sur la manière dont Snowflake résout les noms, consultez Résolution de nom d’objet.

Méthodes de classe

Une classe fournit une API publique par le biais de procédures et de fonctions stockées. Collectivement, elles sont appelées méthodes de classe. Pour obtenir la liste de toutes les méthodes d’une classe, y compris les arguments requis pour chaque méthode, exécutez les commandes SHOW FUNCTIONS IN CLASS et SHOW PROCEDURES IN CLASS. Une classe peut comprendre plusieurs méthodes portant le même nom, mais ayant des signatures différentes (c’est-à-dire un nombre d’arguments ou des types de données d’arguments différents).

Note

Les instructions données en exemple dans cette rubrique utilisent le nom de classe non qualifié ANOMALY_DETECTION. Si vous n’avez pas mis à jour votre chemin de recherche pour inclure SNOWFLAKE.ML, utilisez le nom complet de la classe SNOWFLAKE.ML.ANOMALY_DETECTION.

Par exemple, pour établir la liste de toutes les fonctions disponibles dans la classe SNOWFLAKE.ML.ANOMALY_DETECTION, exécutez l’instruction suivante :

SHOW FUNCTIONS IN CLASS ANOMALY_DETECTION;
Copy
+-----------------------+-------------------+-------------------+--------------------------------------------------------------------------+--------------+----------+
| name                  | min_num_arguments | max_num_arguments | arguments                                                                | descriptions | language |
|-----------------------+-------------------+-------------------+--------------------------------------------------------------------------+--------------+----------|
| _DETECT_ANOMALIES_1_1 |                 5 |                 5 | (MODEL BINARY, TS TIMESTAMP_NTZ, Y FLOAT, FEATURES ARRAY, CONFIG OBJECT) | NULL         | Python   |
| _FIT                  |                 3 |                 3 | (TS TIMESTAMP_NTZ, Y FLOAT, FEATURES ARRAY)                              | NULL         | Python   |
| _FIT                  |                 4 |                 4 | (TS TIMESTAMP_NTZ, Y FLOAT, LABEL BOOLEAN, FEATURES ARRAY)               | NULL         | Python   |
+-----------------------+-------------------+-------------------+--------------------------------------------------------------------------+--------------+----------+

Pour dresser la liste de toutes les procédures stockées dans la classe SNOWFLAKE.ML.ANOMALY_DETECTION, exécutez l’instruction suivante :

SHOW PROCEDURES IN CLASS ANOMALY_DETECTION;
Copy

Les résultats ci-dessous incluent les procédures stockées de la classe pour lesquelles le rôle actuel dans la session s’est vu accorder des privilèges d’accès :

+---------------------------------+-------------------+-------------------+------------------------------------------------------------------------------------------------------------------------------------------+--------------+------------+
| name                            | min_num_arguments | max_num_arguments | arguments                                                                                                                                | descriptions | language   |
|---------------------------------+-------------------+-------------------+------------------------------------------------------------------------------------------------------------------------------------------+--------------+------------|
| __CONSTRUCT                     |                 4 |                 4 | (INPUT_DATA VARCHAR, TIMESTAMP_COLNAME VARCHAR, TARGET_COLNAME VARCHAR, LABEL_COLNAME VARCHAR)                                           | NULL         | Javascript |
| __CONSTRUCT                     |                 5 |                 5 | (INPUT_DATA VARCHAR, SERIES_COLNAME VARCHAR, TIMESTAMP_COLNAME VARCHAR, TARGET_COLNAME VARCHAR, LABEL_COLNAME VARCHAR)                   | NULL         | Javascript |
| DETECT_ANOMALIES                |                 4 |                 4 | (INPUT_DATA VARCHAR, SERIES_COLNAME VARCHAR, TIMESTAMP_COLNAME VARCHAR, TARGET_COLNAME VARCHAR)                                          | NULL         | SQL        |
| DETECT_ANOMALIES                |                 5 |                 5 | (INPUT_DATA VARCHAR, SERIES_COLNAME VARCHAR, TIMESTAMP_COLNAME VARCHAR, TARGET_COLNAME VARCHAR, CONFIG_OBJECT OBJECT)                    | NULL         | SQL        |
| DETECT_ANOMALIES                |                 3 |                 3 | (INPUT_DATA VARCHAR, TIMESTAMP_COLNAME VARCHAR, TARGET_COLNAME VARCHAR)                                                                  | NULL         | SQL        |
| DETECT_ANOMALIES                |                 4 |                 4 | (INPUT_DATA VARCHAR, TIMESTAMP_COLNAME VARCHAR, TARGET_COLNAME VARCHAR, CONFIG_OBJECT OBJECT)                                            | NULL         | SQL        |
| EXPLAIN_FEATURE_IMPORTANCE      |                 0 |                 0 | ()                                                                                                                                       | NULL         | SQL        |
| _CONSTRUCTFEATUREINPUT          |                 6 |                 6 | (INPUT_REF VARCHAR, SERIES_COLNAME VARCHAR, TIMESTAMP_COLNAME VARCHAR, TARGET_COLNAME VARCHAR, LABEL_COLNAME VARCHAR, REF_ALIAS VARCHAR) | NULL         | Javascript |
| _CONSTRUCTINFERENCEFUNCTIONNAME |                 0 |                 0 | ()                                                                                                                                       | NULL         | SQL        |
| _CONSTRUCTINFERENCERESULTAPI    |                 0 |                 0 | ()                                                                                                                                       | NULL         | SQL        |
| _SETTRAININGINFO                |                 0 |                 0 | ()                                                                                                                                       | NULL         | SQL        |
+---------------------------------+-------------------+-------------------+------------------------------------------------------------------------------------------------------------------------------------------+--------------+------------+

Rôles des classes

Une classe peut avoir un ou plusieurs rôles qui se voient accorder le privilège USAGE sur certaines ou toutes les méthodes de la classe. Vous pouvez dresser la liste des rôles disponibles dans une classe à l’aide de la commande SHOW ROLES IN CLASS.

Annoncez tous les rôles dans la classe SNOWFLAKE.ML.ANOMALY_DETECTION :

SHOW ROLES IN CLASS ANOMALY_DETECTION;
Copy
+-------------------------------+------+---------+
| created_on                    | name | comment |
|-------------------------------+------+---------|
| 2023-06-06 01:06:42.808 +0000 | USER | NULL    |
+-------------------------------+------+---------+

Rôles des instances

Les rôles sont définis dans la classe et instanciés dans l’instance en tant que rôle d’instance. Un rôle d’instance peut être attribué à un rôle de votre compte pour permettre l’accès aux méthodes d’instance.

Par exemple, si vous avez une instance ANOMALY_DETECTION my_anomaly_detector dans le schéma my_db.my_schema, vous pouvez visualiser les privilèges accordés au rôle d’instance USER à l’aide de l’instruction suivante :

SHOW GRANTS TO SNOWFLAKE.ML.ANOMALY_DETECTION ROLE my_db.my_schema.my_anomaly_detector!USER;
Copy

Pour accorder le rôle d’instance au rôle my_role de votre compte, exécutez l’instruction suivante :

GRANT SNOWFLAKE.ML.ANOMALY_DETECTION ROLE my_db.my_schema.my_anomaly_detector!USER
  TO ROLE my_role;
Copy

L’instruction ci-dessus permet au rôle my_role d’exécuter les méthodes de l’instance ANOMALY_DETECTOR my_anomaly_detector.

Note

Le rôle my_role doit également avoir le privilège USAGE sur la base de données my_db et le schéma my_schema. Le rôle my_role doit également disposer des privilèges appropriés sur les objets transmis aux méthodes d’instance.

Accorder le privilège de créer des instances de classe

Pour créer une instance d’une classe, un rôle doit se voir accorder le privilège CREATE <nom_classe>.

Par exemple, pour permettre au rôle ml_admin de créer des instances SNOWFLAKE.ML.ANOMALY_DETECTION dans le schéma mydb.myschema , exécutez l’instruction suivante :

GRANT CREATE ANOMALY_DETECTION ON SCHEMA mydb.myschema TO ROLE ml_admin;
Copy

Créer une instance

Vous pouvez créer une instance d’une classe en utilisant la commande CREATE <objet> et la méthode de constructeur de classe.

Note

Les noms d’instance d’un schéma doivent être uniques, quelle que soit la classe à partir de laquelle ils ont été créés. Par exemple, si vous avez une instance de la classe BUDGET nommée foo, vous ne pouvez pas créer une instance de la classe ANOMALY_DETECTION nommée foo dans le même schéma.

Par exemple, pour créer une instance my_anomaly_detector de détecteur d’anomalies, exécutez l’instruction suivante :

CREATE ANOMALY_DETECTION <my_anomaly_detector_name>(
  INPUT_DATA => SYSTEM$REFERENCE('VIEW', '<view_with_training_data>'),
  TIMESTAMP_COLUMN => '<timestamp_column_name>'
  TARGET_COLNAME => '<target_column_name>',
  LABEL_COLNAME => ''
);
Copy

Utiliser une instance

Après avoir créé une instance d’une classe, vous pouvez appeler les méthodes d’instance fournies par la classe. L’appel d’une méthode nécessite le caractère point d’exclamation (!). Le caractère ! est utilisé pour déréférencer l’instance.

Par exemple, pour appeler la méthode DETECT_ANOMALIES du détecteur d’anomalies my_anomaly_detector, exécutez l’instruction suivante :

CALL my_anomaly_detector!DETECT_ANOMALIES(
  INPUT_DATA => SYSTEM$REFERENCE('VIEW', '<view_name>'),
  TIMESTAMP_COLNAME =>'<timestamp_column_name>',
  TARGET_COLNAME => '<target_column_name>'
);
Copy

Classes disponibles

Pour obtenir la liste des classes Snowflake disponibles, consultez Référence de classes SQL.

Limites

La réplication des instances de classe n’est actuellement pas prise en charge.