Snowflake 클래스¶
SNOWFLAKE 데이터베이스는 Snowflake에서 제공하는 클래스도 포함합니다.
개념¶
클래스 는 오브젝트 지향 프로그래밍의 클래스와 유사하며 인스턴스 생성을 위한 청사진 역할을 합니다. 인스턴스 는 클래스에서 생성된 오브젝트입니다. 클래스와 인스턴스는 Snowflake의 스키마 수준 오브젝트입니다. 클래스는 확장 가능한 Snowflake 오브젝트 유형, 인스턴스는 Snowflake 오브젝트라고 생각할 수 있습니다.
클래스는 저장 프로시저와 함수를 통해 공개 API를 제공합니다. 통칭하여 클래스 메서드 라고 합니다. 클래스는 또한 클래스 메서드에 대해 세분화된 권한을 활성화하는 클래스 역할 도 제공합니다. 공개 API 외에도, 클래스는 오브젝트 지향 프로그래밍의 비공개 속성 및 메서드와 유사한 비공개 상태 및 비공개 프로시저와 함수를 포함합니다. 클래스 구현은 시간이 지남에 따라 새로운 클래스 버전 을 통해 진화할 수 있습니다. Snowflake에서 자동으로 인스턴스를 최신 클래스 버전으로 업그레이드합니다.
예를 들어 Snowflake는 SNOWFLAKE.ML 스키마에 ANOMALY_DETECTION 클래스 를 제공합니다. 특정 오브젝트 유형의 오브젝트를 생성하는 것처럼 CREATE 명령을 사용하여 클래스의 인스턴스를 생성할 수 있습니다.
아래 예제에서는 클래스의 인스턴스를 만들고 인스턴스 메서드를 호출합니다.
SNOWFLAKE.ML
을 포함하도록 검색 경로를 업데이트합니다.ALTER SESSION SET SEARCH_PATH = '$current, $public, snowflake.ml';
ANOMALY_DETECTION 클래스의 인스턴스를 만듭니다.
CREATE ANOMALY_DETECTION mydatabase.myschema.my_anomaly_detector(...);
ANOMALY_DETECTION 클래스의 인스턴스를 만든 후 인스턴스 메서드를 호출할 수 있습니다.
mydatabase.myschema.my_anomaly_detector!DETECT_ANOMALIES(...);
참고
현재, Snowflake에서만 클래스를 제공하며 사용자는 클래스를 생성할 수 없습니다.
사용 가능한 클래스 나열하기¶
SHOW 명령을 사용하여 사용 가능한 클래스를 찾고 각 클래스에 대해 자세히 알아볼 수 있습니다. 이러한 명령을 사용하면 다음을 수행할 수 있습니다.
모든 클래스 찾기¶
SHOW CLASSES 명령을 실행하여 사용 가능한 모든 Snowflake 클래스를 나열합니다.
SHOW CLASSES IN DATABASE SNOWFLAKE;
이 문의 결과에는 각 클래스의 데이터베이스 및 스키마 이름이 포함됩니다.
검색 경로 업데이트하기¶
클래스는 SNOWFLAKE 데이터베이스의 스키마에 있는 오브젝트입니다. 이 항목 다음에 나오는 SQL 명령을 실행하려면 정규화된 클래스 이름(예: SNOWFLAKE.ML.ANOMALY_DETECTION)을 사용해야 합니다. 또는 클래스의 데이터베이스와 스키마를 포함하도록 검색 경로 를 업데이트한 다음 정규화되지 않은 이름(예: ANOMALY_DETECTION)으로 클래스를 참조할 수 있습니다.
ALTER SESSION, ALTER USER 또는 ALTER ACCOUNT를 사용하여 검색 경로를 수정할 수 있습니다.
명령 |
참고 |
---|---|
현재 세션에 대해서만 검색 경로를 수정합니다. 세션 수준에서 자신의 검색 경로를 수정할 수 있습니다. 세션 수준 변경 사항은 계정 수준 또는 사용자 수준 설정보다 우선 적용됩니다. |
|
현재 사용자 또는 지정된 사용자에 대한 검색 경로를 지속적으로 수정합니다. 사용자 수준에서 자신의 검색 경로를 수정할 수 있습니다. 관리자는 다른 사용자의 검색 경로를 수정할 수 있습니다. 사용자 수준 변경 사항은 계정 수준 또는 세션 수준 설정보다 우선 적용됩니다. |
|
계정의 모든 사용자에 대해 검색 경로를 지속적으로 수정합니다. 관리자는 계정 수준에서 검색 경로를 수정해야 합니다. |
다음 문을 실행하고
value
열에서 현재 검색 경로를 복사합니다.SHOW PARAMETERS LIKE 'search_path';
검색 경로를 업데이트합니다.
참고
아래 예에서는 기본 검색 경로인
$current, $public
을 사용합니다. 이전 단계의value
열에 있는 검색 경로가 기본값과 일치하지 않는 경우 실제 검색 경로를 포함하도록 아래의 예시 문을 편집하십시오.예를 들어 현재 세션의 검색 경로에 SNOWFLAKE.ML을 추가하려면 다음 문을 실행하십시오.
ALTER SESSION SET SEARCH_PATH = '$current, $public, SNOWFLAKE.ML';
사용자 수준에서 자신의 검색 경로에 SNOWFLAKE.ML을 추가하려면 다음 문을 실행하십시오.
ALTER USER SET SEARCH_PATH = '$current, $public, SNOWFLAKE.ML';
ACCOUNTADMIN 역할을 가진 사용자는 다음 문을 실행하여 계정의 검색 경로를 업데이트할 수 있습니다.
ALTER ACCOUNT SET SEARCH_PATH = '$current, $public, SNOWFLAKE.ML';
Snowflake가 이름을 확인하는 방법에 대한 자세한 내용은 오브젝트 이름 확인 섹션을 참조하십시오.
클래스 메서드¶
클래스는 저장 프로시저와 함수를 통해 공개 API를 제공합니다. 이를 통칭하여 클래스 메서드 라고 합니다. 각 메서드에 필요한 인자를 포함하여 클래스의 모든 메서드를 나열하려면 SHOW FUNCTIONS IN CLASS 및 SHOW PROCEDURES IN CLASS 명령을 실행하십시오. 클래스에는 이름은 같지만 서명이 다른 여러 메서드가 포함될 수 있습니다(즉, 인자 수 또는 인자 데이터 타입이 다름).
참고
이 항목의 예시 문에서는 정규화되지 않은 클래스 이름 ANOMALY_DETECTION을 사용합니다. SNOWFLAKE.ML을 포함하도록 검색 경로를 업데이트 하지 않은 경우 SNOWFLAKE.ML.ANOMALY_DETECTION 클래스의 정규화된 이름을 사용하십시오.
예를 들어 SNOWFLAKE.ML.ANOMALY_DETECTION 클래스에서 사용할 수 있는 모든 함수를 나열하려면 다음 문을 실행하십시오.
SHOW FUNCTIONS IN CLASS ANOMALY_DETECTION;
+-----------------------+-------------------+-------------------+--------------------------------------------------------------------------+--------------+----------+
| 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 |
+-----------------------+-------------------+-------------------+--------------------------------------------------------------------------+--------------+----------+
SNOWFLAKE.ML.ANOMALY_DETECTION 클래스의 모든 저장 프로시저를 나열하려면 다음 문을 실행하십시오.
SHOW PROCEDURES IN CLASS ANOMALY_DETECTION;
아래 결과에는 세션의 현재 역할에 액세스 권한이 부여된 클래스의 저장 프로시저가 포함됩니다.
+---------------------------------+-------------------+-------------------+------------------------------------------------------------------------------------------------------------------------------------------+--------------+------------+
| 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 |
+---------------------------------+-------------------+-------------------+------------------------------------------------------------------------------------------------------------------------------------------+--------------+------------+
클래스 역할¶
클래스에는 일부 또는 모든 클래스 메서드에 대한 USAGE 권한이 부여된 하나 이상의 역할이 있을 수 있습니다. SHOW ROLES IN CLASS 명령을 사용하여 클래스에서 사용 가능한 역할을 나열할 수 있습니다.
SNOWFLAKE.ML.ANOMALY_DETECTION 클래스의 모든 역할을 나열합니다.
SHOW ROLES IN CLASS ANOMALY_DETECTION;
+-------------------------------+------+---------+
| created_on | name | comment |
|-------------------------------+------+---------|
| 2023-06-06 01:06:42.808 +0000 | USER | NULL |
+-------------------------------+------+---------+
인스턴스 역할¶
역할은 클래스에 정의되고 인스턴스에서 인스턴스 역할 로 인스턴스화됩니다. 인스턴스 메서드에 대한 액세스를 활성화하기 위해 계정의 역할에 인스턴스 역할을 부여할 수 있습니다.
예를 들어, 스키마 my_db.my_schema
에 ANOMALY_DETECTION 인스턴스 my_anomaly_detector
가 있는 경우 다음 문을 사용하여 인스턴스 역할 USER에 부여된 권한을 볼 수 있습니다.
SHOW GRANTS TO SNOWFLAKE.ML.ANOMALY_DETECTION ROLE my_db.my_schema.my_anomaly_detector!USER;
계정의 역할 my_role
에 인스턴스 역할을 부여하려면 다음 문을 실행하십시오.
GRANT SNOWFLAKE.ML.ANOMALY_DETECTION ROLE my_db.my_schema.my_anomaly_detector!USER
TO ROLE my_role;
위 문을 사용하면 역할 my_role
이 ANOMALY_DETECTOR 인스턴스 my_anomaly_detector
의 메서드를 실행할 수 있습니다.
참고
또한 역할 my_role
은 데이터베이스 my_db
와 스키마 my_schema
에 대한 USAGE 권한도 있어야 합니다. 역할 my_role
은 인스턴스 메서드에 전달된 오브젝트에 대한 적절한 권한도 있어야 합니다.
클래스 인스턴스를 생성할 수 있는 권한 부여하기¶
클래스의 인스턴스를 생성하려면 역할에 CREATE <클래스_이름> 권한을 부여해야 합니다.
예를 들어, mydb.myschema
스키마에서 ml_admin
역할을 활성화하여 SNOWFLAKE.ML.ANOMALY_DETECTION 인스턴스를 만들려면 다음 문을 실행하십시오.
GRANT CREATE ANOMALY_DETECTION ON SCHEMA mydb.myschema TO ROLE ml_admin;
인스턴스 만들기¶
CREATE <오브젝트> 명령과 클래스 생성자 메서드를 사용하여 클래스의 인스턴스를 만들 수 있습니다.
참고
스키마의 인스턴스 이름은 생성된 클래스에 관계없이 고유해야 합니다. 예를 들어 foo
라는 BUDGET 클래스의 인스턴스가 있는 경우 동일한 스키마에서 foo
라는 ANOMALY_DETECTION 클래스의 인스턴스를 생성할 수 없습니다.
예를 들어 변칙 검색 my_anomaly_detector
인스턴스를 만들려면 다음 문을 실행하십시오.
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 => ''
);
인스턴스 사용하기¶
클래스의 인스턴스를 만든 후 클래스가 제공하는 인스턴스 메서드를 호출할 수 있습니다. 메서드를 호출하려면 느낌표(!
) 문자가 필요합니다. !
문자는 인스턴스를 역참조하는 데 사용됩니다.
예를 들어 변칙 검색 my_anomaly_detector
의 DETECT_ANOMALIES 메서드를 호출하려면 다음 문을 실행하십시오.
CALL my_anomaly_detector!DETECT_ANOMALIES(
INPUT_DATA => SYSTEM$REFERENCE('VIEW', '<view_name>'),
TIMESTAMP_COLNAME =>'<timestamp_column_name>',
TARGET_COLNAME => '<target_column_name>'
);
사용 가능한 클래스¶
사용 가능한 Snowflake 클래스 목록은 SQL 클래스 참조 섹션을 참조하십시오.
제한 사항¶
클래스 인스턴스의 복제 는 현재 지원되지 않습니다.