사용자 지정 데이터 분류

이 항목에서는 Snowflake의 사용자 지정 데이터 분류에 대한 개념을 제공합니다.

개요

Snowflake는 데이터 엔지니어가 데이터에 대한 자신의 지식을 기반으로 데이터 분류 기능을 확장할 수 있도록 SNOWFLAKE DATA_PRIVACY 스키마에 CUSTOM_CLASSIFIER 클래스 를 제공합니다. 클래스의 인스턴스를 생성한 후 인스턴스에서 메서드를 호출하여 고유한 의미 체계 카테고리를 정의하고, 개인정보 보호 카테고리를 지정하고, 선택적으로 열 이름과 일치하면서 열 값 패턴과 일치하도록 정규식을 지정할 수 있습니다.

사용자 지정 분류 인스턴스를 생성하고 사용하면 다음을 수행할 수 있습니다.

  • 데이터 분류 작업 가속화.

  • 민감한 데이터가 포함된 열에 대한 산업 및 도메인별 태그 정의.

  • Snowflake를 활용하여 PII 데이터 추적 작업을 더 효과적으로 제어.

사용자 지정 분류 알고리즘 정보

Snowflake는 데이터 분류 알고리즘과 비교하여 사용자 지정 분류에 고유한 알고리즘을 사용합니다. 서로 다른 분류 알고리즘을 사용하는 이유는 선택하는 데이터 분류 방법에 따라 안정적인 결과를 보장하려는 것입니다.

사용자 지정 분류 알고리즘은 채점 규칙 을 사용하여 추천할 의미 체계 카테고리 시스템 태그와 대안으로 제안할 의미 체계 카테고리 태그(있는 경우)를 결정합니다. 채점 논리는 인스턴스에 추가하는 정규식을 평가하는데, 인스턴스에서 custom_classifier !ADD_REGEX 메서드를 호출하여 이를 지정합니다.

채점 규칙에서는 선택해야 할 권장 태그라는 측면에서 높은 신뢰도와 동일한 기본 임계값을 사용합니다. 이 알고리즘은 열의 점수를 임계값과 비교하고 다음 중 하나에 해당하는 태그를 추천합니다.

다음 표에는 채점 알고리즘과 권장 태그가 요약되어 있습니다.

제공되는 이름 일치 항목

값이 >= 임계값과 일치

이름 일치

권장 사항

True

True

True

사용자 지정 카테고리

False

True

Snowflake 카테고리

True

False

Snowflake 카테고리

False

False

Snowflake 카테고리

False

True

해당 없음

사용자 지정 카테고리

False

해당 없음

Snowflake 카테고리

제한 사항

현재는 SQL만 사용하여 사용자 지정 분류자를 실행할 수 있습니다. Snowsight 를 사용하여 사용자 지정 분류자를 실행할 수 없습니다.

사용자 지정 분류자로 작업하기

사용자 지정 분류는 CUSTOM_CLASSIFIER 클래스를 사용합니다. CUSTOM_CLASSIFIER 클래스의 인스턴스를 생성하고 인스턴스 메서드를 호출하여 인스턴스와 연결된 정규식을 관리할 수 있습니다. 다음 메서드와 SQL 명령이 지원됩니다.

또한 사용자 지정 분류와 함께 다음 역할을 사용할 수 있습니다.

  • SNOWFLAKE.CLASSIFICATION_ADMIN: 사용자 지정 분류 인스턴스를 생성할 수 있는 데이터베이스 역할입니다.

  • custom_classifier !PRIVACY_USER: 다음 작업을 수행할 수 있는 인스턴스 역할:

    • 인스턴스에서 ADD_REGEX 메서드를 호출하여 인스턴스에 카테고리를 추가합니다.

    • 인스턴스에서 DELETE_CATEGORY 메서드를 호출하여 인스턴스에서 카테고리를 삭제합니다.

  • 인스턴스에 대한 OWNERSHIP 권한이 있는 계정 역할은 다음을 수행할 수 있습니다.

    • DROP CUSTOM_CLASSIFIER 명령으로 인스턴스 삭제.

    • SHOW CUSTOM_CLASSIFIER 명령으로 인스턴스 나열.

다른 사용자가 사용자 지정 분류 인스턴스로 작업할 수 있도록 계정 역할 및 데이터베이스 역할에 인스턴스 역할을 부여할 수 있습니다. 예:

GRANT SNOWFLAKE.DATA_PRIVACY.CUSTOM_CLASSIFIER ROLE <name>!USER
  TO ROLE <role_name>

REVOKE SNOWFLAKE.DATA_PRIVACY.CUSTOM_CLASSIFIER ROLE <name>!USER
  FROM ROLE <role_name>

GRANT SNOWFLAKE.DATA_PRIVACY.CUSTOM_CLASSIFIER ROLE <name>!USER
  TO DATABASE ROLE <database_role_name>

REVOKE SNOWFLAKE.DATA_PRIVACY.CUSTOM_CLASSIFIER ROLE <name>!USER
  FROM DATABASE ROLE <database_role_name>
Copy

여기서

name

생성하는 사용자 지정 분류 인스턴스의 이름을 지정합니다.

role_name

계정 역할의 이름을 지정합니다.

database_role_name

데이터베이스 역할의 이름을 지정합니다.

다른 Snowflake 오브젝트와 마찬가지로, 사용자 지정 분류 인스턴스를 생성하는 역할에는 인스턴스에 대한 OWNERSHIP 권한이 자동으로 부여됩니다.

사용자 지정 분류자를 사용하여 데이터를 분류하는 대략적인 접근 방식은 다음과 같습니다.

  1. 분류할 테이블을 식별합니다.

  2. SQL을 사용하여 다음을 수행합니다.

    1. 사용자 지정 분류 인스턴스를 만듭니다.

    2. 인스턴스에 시스템 태그 카테고리와 정규식을 추가합니다.

    3. 테이블을 분류합니다.

테이블을 분류하는 사용자 지정 분류자를 생성하려면 다음 단계를 완료하십시오.

  1. 열 중 하나에 ICD-10코드 등의 진단 코드가 포함된 테이블 data.tables.patient_diagnosis 를 생각해 보십시오.

    +-------------+----------------------------------------------------------+
    | ICD_10_CODE | DESCRIPTION                                              |
    +-------------+----------------------------------------------------------+
    | G30.9       | Alzheimer's disease, unspecified                         |
    | G80.8       | Other cerebral palsy                                     |
    | S13.4XXA    | Sprain of ligaments of cervical spine, initial encounter |
    +-------------+----------------------------------------------------------+
    
    Copy

    이 테이블에는 이름과 성, 고유한 건강 보험 식별자, 생년월일 등 의료 시설에서 치료를 받은 환자를 식별하는 열이 포함될 수도 있습니다. 데이터 소유자는 테이블을 모니터링할 수 있도록 열에 태그가 올바르게 지정되도록 보장하기 위해 테이블을 분류할 수 있습니다.

    이 예에서 데이터 소유자는 이미 자신의 역할에 다음과 같은 권한을 부여했습니다.

    • 분류할 테이블에 대한 OWNERSHIP.

    • 테이블이 포함된 스키마에 대한 OWNERSHIP.

    • 스키마와 테이블이 포함된 데이터베이스에 대한 USAGE.

  2. 데이터 소유자 역할에 SNOWFLAKE.CLASSIFICATION_ADMIN 데이터베이스 역할을 부여하여 데이터 소유자가 테이블을 분류할 수 있도록 합니다.

    USE ROLE ACCOUNTADMIN;
    GRANT DATABASE ROLE SNOWFLAKE.CLASSIFICATION_ADMIN
      TO ROLE data_owner;
    
    Copy
  3. 데이터 소유자로서 사용자 지정 분류 인스턴스를 저장할 스키마를 생성합니다.

    USE ROLE data_owner;
    CREATE SCHEMA data.classifiers;
    
    Copy
  4. CREATE CUSTOM_CLASSIFIER 명령을 사용하여 data.classifiers 스키마에 사용자 지정 분류 인스턴스를 생성합니다.

    USE SCHEMA data.classifiers;
    CREATE OR REPLACE SNOWFLAKE.DATA_PRIVACY.CUSTOM_CLASSIFIER medical_codes();
    
    Copy

    인스턴스를 더 쉽게 사용할 수 있도록 검색 경로 를 업데이트합니다.

  5. SHOW CUSTOM_CLASSIFIER 명령을 사용하여 생성하는 각 인스턴스를 나열합니다. 예:

    SHOW SNOWFLAKE.DATA_PRIVACY.CUSTOM_CLASSIFIER;
    
    Copy

    반환 결과:

    +----------------------------------+---------------+---------------+-------------+-----------------+---------+-------------+
    | created_on                       | name          | database_name | schema_name | current_version | comment | owner       |
    +----------------------------------+---------------+---------------+-------------+-----------------+---------+-------------+
    | 2023-09-08 07:00:00.123000+00:00 | MEDICAL_CODES | DATA          | CLASSIFIERS | 1.0             | None    | DATA_OWNER  |
    +----------------------------------+---------------+---------------+-------------+-----------------+---------+-------------+
    
  6. 인스턴스에서 custom_classifier !ADD_REGEX 메서드를 호출하여 열에서 ICD-10 코드를 식별하는 시스템 태그와 정규식을 지정합니다. 이 예의 정규식은 가능한 모든 ICD-10 코드와 일치합니다. 열 이름 ICD* 와 일치하는 정규식과 주석은 선택 사항입니다.

    CALL medical_codes!ADD_REGEX(
      'ICD_10_CODES',
      'IDENTIFIER',
      '[A-TV-Z][0-9][0-9AB]\.?[0-9A-TV-Z]{0,4}',
      'ICD*',
      'Add a regex to identify ICD-10 medical codes in a column'
    );
    
    Copy

    반환 결과:

    +---------------+
    |   ADD_REGEX   |
    +---------------+
    | ICD_10_CODES  |
    +---------------+
    

    사용자 지정 분류 인스턴스에 정규식을 추가하기 전에 정규식을 테스트하십시오. 예:

    SELECT icd_10_code
    FROM medical_codes
    WHERE icd_10_code REGEXP('[A-TV-Z][0-9][0-9AB]\.?[0-9A-TV-Z]{0,4}');
    
    Copy
    +-------------+
    | ICD-10-CODE |
    +-------------+
    | G30.9       |
    | G80.8       |
    | S13.4XXA    |
    +-------------+
    

    이 쿼리에서는 정규식과 일치하는 유효한 값만 반환됩니다. 쿼리는 xyz 등의 유효하지 않은 값을 반환하지 않습니다.

    자세한 내용은 문자열 함수(정규식) 섹션을 참조하십시오.

  7. 인스턴스에서 custom_classifier !LIST 메서드를 호출하여 인스턴스에 추가한 정규식을 확인합니다.

    SELECT medical_codes!LIST();
    
    Copy

    반환 결과:

    +--------------------------------------------------------------------------------+
    | MEDICAL_CODES!LIST()                                                           |
    +--------------------------------------------------------------------------------+
    | {                                                                              |
    |   "ICD-10-CODES": {                                                            |
    |     "col_name_regex": "ICD*",                                                  |
    |     "description": "Add a regex to identify ICD-10 medical codes in a column", |
    |     "privacy_category": "IDENTIFIER",                                          |
    |     "value_regex": "[A-TV-Z][0-9][0-9AB]\.?[0-9A-TV-Z]{0,4}"                   |
    | }                                                                              |
    +--------------------------------------------------------------------------------+
    

    카테고리를 제거하려면 인스턴스에서 custom_classifier !DELETE_CATEGORY 메서드를 호출하십시오.

  8. SQL을 사용하여 테이블을 분류합니다. 자세한 내용은 SQL을 사용하여 스키마의 테이블 분류하기 섹션을 참조하십시오.

  9. 인스턴스가 더 이상 필요하지 않으면 DROP CUSTOM_CLASSIFIER 명령을 사용하여 시스템에서 사용자 지정 분류 인스턴스를 제거합니다.

    DROP SNOWFLAKE.DATA_PRIVACY.CUSTOM_CLASSIFIER data.classifiers.medical_codes;
    
    Copy