Classes Snowflake

O banco de dados SNOWFLAKE também inclui classes fornecidas pelo Snowflake.

Conceitos

Uma classe é semelhante a uma classe de programação orientada a objetos e serve como um modelo para a criação de instâncias. Uma instância é um objeto criado a partir de uma classe. Classes e instâncias são objetos em nível de esquema no Snowflake. Você pode pensar em uma classe como um tipo de objeto Snowflake extensível e uma instância como um objeto Snowflake.

Uma classe fornece uma API pública por meio de procedimentos armazenados e funções. Coletivamente, eles são chamados de métodos de classe. Uma classe também fornece funções de classe que permitem privilégios refinados em métodos de classe. Além de sua API pública, uma classe inclui procedimentos e funções privadas e estado privado, semelhantes às propriedades e métodos privados na programação orientada a objetos. A implementação de uma classe pode evoluir ao longo do tempo por meio de novas versões de classe. As instâncias são atualizadas para a versão de classe mais recente automaticamente pelo Snowflake.

Por exemplo, Snowflake fornece a classe ANOMALY_DETECTION no esquema SNOWFLAKE.ML. Você pode criar uma instância de uma classe usando um comando CREATE da mesma forma que criaria um objeto de um tipo específico.

O exemplo abaixo cria uma instância de uma classe e chama um método de instância.

  1. Atualize seu caminho de pesquisa para incluir SNOWFLAKE.ML:

    ALTER SESSION SET SEARCH_PATH = '$current, $public, snowflake.ml';
    
    Copy
  2. Crie uma instância da classe ANOMALY_DETECTION:

    CREATE ANOMALY_DETECTION mydatabase.myschema.my_anomaly_detector(...);
    
    Copy
  3. Depois de criar uma instância da classe ANOMALY_DETECTION, você poderá chamar métodos de instância:

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

Nota

Atualmente, as classes são fornecidas apenas pelo Snowflake e não podem ser criadas pelos usuários.

Listagem de classes disponíveis

Você pode encontrar classes disponíveis e saber mais sobre cada classe usando os comandos SHOW. Esses comandos permitem que você:

Como encontrar todas as classes

Liste todas as classes Snowflake disponíveis executando o comando SHOW CLASSES:

SHOW CLASSES IN DATABASE SNOWFLAKE;
Copy

Os resultados desta instrução incluem o banco de dados e o nome do esquema para cada classe.

Como atualizar seu caminho de pesquisa

As classes são objetos em um esquema no banco de dados SNOWFLAKE. Você deve usar o nome completo da classe (por exemplo, SNOWFLAKE.ML.ANOMALY_DETECTION) para executar os comandos SQL a seguir neste tópico. Como alternativa, você pode atualizar o caminho de pesquisa para incluir o banco de dados e o esquema de uma classe e, em seguida, referir-se à classe pelo seu nome não qualificado (por exemplo, ANOMALY_DETECTION).

Você pode modificar o caminho de pesquisa usando ALTER SESSION, ALTER USER ou ALTER ACCOUNT.

Comando

Notas

ALTER SESSION

Modifica o caminho de pesquisa somente para a sessão atual. Você pode modificar seu próprio caminho de pesquisa no nível da sessão. Uma alteração no nível da sessão substitui a configuração no nível da conta ou do usuário.

ALTER USER

Modifica o caminho de pesquisa persistentemente para o usuário atual ou especificado. Você pode modificar seu próprio caminho de pesquisa no nível do usuário. Um administrador pode modificar o caminho de pesquisa de outro usuário. Uma alteração no nível do usuário substitui a configuração no nível da conta ou da sessão.

ALTER ACCOUNT

Modifica o caminho de pesquisa persistentemente para todos os usuários da conta. Um administrador deve modificar o caminho de pesquisa no nível da conta.

  1. Execute a instrução a seguir e copie o caminho de pesquisa atual da coluna value:

    SHOW PARAMETERS LIKE 'search_path';
    
    Copy
  2. Atualize seu caminho de pesquisa.

    Nota

    Os exemplos abaixo usam o caminho de pesquisa padrão, $current, $public. Se o caminho de pesquisa na coluna value da etapa anterior não corresponder ao valor padrão, edite as instruções de exemplo abaixo para incluir o caminho de pesquisa real.

    Por exemplo, para adicionar SNOWFLAKE.ML ao caminho de pesquisa da sessão atual, execute a seguinte instrução:

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

    Para adicionar SNOWFLAKE.ML ao seu próprio caminho de pesquisa no nível do usuário, execute a seguinte instrução:

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

    Um usuário com a função ACCOUNTADMIN pode atualizar o caminho de pesquisa da conta executando a seguinte instrução:

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

Para obter mais informações sobre como o Snowflake resolve nomes, consulte Resolução de nomes de objetos.

Métodos de classe

Uma classe fornece uma API pública por meio de procedimentos armazenados e funções. Coletivamente, eles são chamados de métodos de classe. Para listar todos os métodos de uma classe, incluindo os argumentos necessários para cada método, execute os comandos SHOW FUNCTIONS IN CLASS e SHOW PROCEDURES IN CLASS. Uma classe pode incluir vários métodos com o mesmo nome, mas assinaturas diferentes (ou seja, um número diferente de argumentos ou tipos de dados de argumentos).

Nota

As instruções de exemplo neste tópico usam o nome de classe não qualificado ANOMALY_DETECTION. Se você não tiver atualizado seu caminho de pesquisa para incluir SNOWFLAKE.ML, use o nome totalmente qualificado para a classe SNOWFLAKE.ML.ANOMALY_DETECTION.

Por exemplo, para listar todas as funções disponíveis na classe SNOWFLAKE.ML.ANOMALY_DETECTION, execute a seguinte instrução:

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

Para listar todos os procedimentos armazenados na classe SNOWFLAKE.ML.ANOMALY_DETECTION, execute a seguinte instrução:

SHOW PROCEDURES IN CLASS ANOMALY_DETECTION;
Copy

Os resultados abaixo incluem os procedimentos armazenados na classe para a qual a função atual na sessão recebeu privilégios de acesso:

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

Funções de classe

Uma classe pode ter uma ou mais funções às quais é concedido o privilégio USAGE em alguns ou todos os métodos de classe. Você pode listar as funções disponíveis em uma classe usando o comando SHOW ROLES IN CLASS.

Liste todas as funções na 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    |
+-------------------------------+------+---------+

Funções de instância

As funções são definidas na classe e instanciadas na instância como uma função de instância. Uma função de instância pode ser concedida a uma função na sua conta para permitir acesso a métodos de instância.

Por exemplo, se você tiver uma instância ANOMALY_DETECTION my_anomaly_detector no esquema my_db.my_schema, poderá visualizar os privilégios concedidos à função de instância USER usando a seguinte instrução:

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

Para conceder a função de instância à função my_role na sua conta, execute a seguinte instrução:

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

A instrução acima permite que a função my_role execute métodos da instância ANOMALY_DETECTOR my_anomaly_detector.

Nota

A função my_role também deve ter o privilégio USAGE no banco de dados my_db e o esquema my_schema. A função my_role também deve ter os privilégios apropriados em objetos passados para métodos de instância.

Concessão do privilégio para criar instâncias de classe

Para criar uma instância de uma classe, uma função deve receber o privilégio CREATE <nome_da_classe>.

Por exemplo, para permitir que a função ml_admin crie instâncias SNOWFLAKE.ML.ANOMALY_DETECTION no esquema mydb.myschema, execute a seguinte instrução:

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

Criação de uma instância

Você pode criar uma instância de uma classe usando o comando CREATE <objeto> e o método do construtor de classe.

Nota

Os nomes de instâncias em um esquema devem ser exclusivos, independentemente da classe a partir da qual foram criados. Por exemplo, se você tiver uma instância da classe BUDGET chamada foo, não poderá criar uma instância da classe ANOMALY_DETECTION chamada foo no mesmo esquema.

Por exemplo, para criar uma instância de detecção de anomalias my_anomaly_detector, execute a seguinte instrução:

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

Uso de uma instância

Depois de criar uma instância de uma classe, você poderá chamar os métodos de instância fornecidos pela classe. Chamar um método requer o caractere de ponto de exclamação (!). O caractere ! é usado para desreferenciar a instância.

Por exemplo, para chamar o método DETECT_ANOMALIES de detecção de anomalias my_anomaly_detector, execute a seguinte instrução:

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 disponíveis

Para obter uma lista de classes Snowflake disponíveis, consulte Referência de classe SQL.

Limitações

A replicação de instâncias de classe não é suportada atualmente.