カスタムデータ分類

このトピックでは、Snowflakeにおけるカスタムデータ分類の概念について説明します。

概要

Snowflakeは CUSTOM_CLASSIFIER クラス を SNOWFLAKE.DATA_PRIVACY スキーマで提供し、データエンジニアがデータに関する独自の知識に基づいてデータ分類機能を拡張できるようにします。クラスのインスタンスを作成した後、インスタンスのメソッドを呼び出して、独自のセマンティックカテゴリを定義し、プライバシーカテゴリを指定し、オプションで列名を一致させながら列の値パターンに一致する正規表現を指定できます。

カスタム分類インスタンスを作成して使用することで、次のことが可能になります。

  • データ分類作業を加速します。

  • 機密データを含む列に、業界およびドメイン固有のタグを定義します。

  • 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. テーブル data.tables.patient_diagnosis の列の1つに、 ICD-10コード のような診断コードが含まれているとします。

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

    Tip

    カスタム分類インスタンスに正規表現を追加する前に、正規表現をテストします。例:

    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