Classificação personalizada de dados

Este tópico fornece conceitos sobre classificação de dados personalizada no Snowflake.

Visão geral

Snowflake fornece a CUSTOM_CLASSIFIER classe no esquema SNOWFLAKE.DATA_PRIVACY para permitir que os engenheiros de dados ampliem seus recursos de classificação de dados com base em seu próprio conhecimento dos dados. Depois de criar uma instância da classe, você pode chamar um método na instância para definir sua própria categoria semântica, especificar a categoria de privacidade e especificar expressões regulares para corresponder aos padrões de valor da coluna e, ao mesmo tempo, corresponder opcionalmente ao nome da coluna.

Ao criar e usar instâncias de classificação personalizadas, você pode:

  • Acelerar seus esforços de classificação de dados.

  • Definir tags específicas do setor e do domínio para colunas que contêm dados confidenciais.

  • Aproveitar o Snowflake para ter mais controle sobre seus esforços para rastrear dados de PII.

Sobre o algoritmo de classificação personalizado

O Snowflake usa um algoritmo exclusivo para classificação personalizada em comparação com o algoritmo para classificação de dados. A razão para ter diferentes algoritmos de classificação é garantir resultados estáveis, dependendo de como você escolhe classificar seus dados.

O algoritmo de classificação personalizado usa uma regra de pontuação para determinar qual tag de sistema de categoria semântica recomendar e quais tags de categoria semântica, se houver, sugerir como alternativas. A lógica de pontuação avalia as expressões regulares que você adiciona à sua instância, que você especifica chamando o método custom_classifier !ADD_REGEX na sua instância.

A regra de pontuação usa um valor limite padrão que equivale a alta confiança em termos de qual deveria ser a tag recomendada. O algoritmo compara a pontuação de uma coluna com o valor limite e recomenda uma tag que corresponda a um dos seguintes:

A tabela a seguir resume o algoritmo de pontuação e a tag recomendada:

Correspondência de nome fornecida

O valor corresponde a >= limite

Correspondências de nome

Recomendação

True

True

True

Categoria personalizada

False

True

Categoria Snowflake

True

False

Categoria Snowflake

False

False

Categoria Snowflake

False

True

Não aplicável

Categoria personalizada

False

Não aplicável

Categoria Snowflake

Limitações

Atualmente, você só pode usar SQL para executar classificadores personalizados; você não pode usar Snowsight para executar classificadores personalizados.

Como trabalhar com classificadores personalizados

A classificação personalizada usa a classe CUSTOM_CLASSIFIER. Você pode criar uma instância da classe CUSTOM_CLASSIFIER e chamar métodos de instância para gerenciar expressões regulares associadas à instância. Os seguintes métodos e comandos SQL são suportados:

Além disso, você pode usar as seguintes funções com classificação personalizada:

  • SNOWFLAKE.CLASSIFICATION_ADMIN: função de banco de dados que permite criar uma instância de classificação personalizada.

  • custom_classifier !PRIVACY_USER: função de instância que permite executar as seguintes ações:

    • Adicione uma categoria à instância chamando o método ADD_REGEX na instância.

    • Exclua uma categoria de uma instância chamando o método DELETE_CATEGORY na instância.

  • A função da conta com privilégio OWNERSHIP na instância pode:

    • Descartar a instância com um comando DROP CUSTOM_CLASSIFIER.

    • Listar instâncias com um comando SHOW CUSTOM_CLASSIFIER.

Você pode conceder funções de instância a funções de conta e funções de banco de dados para permitir que outros usuários trabalhem com instâncias de classificação personalizadas. Por exemplo:

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

Onde:

name

Especifica o nome da instância de classificação personalizada que você cria.

role_name

Especifica o nome de uma função da conta.

database_role_name

Especifica o nome de uma função do banco de dados.

Semelhante a outros objetos Snowflake, a função que cria a instância de classificação personalizada recebe automaticamente o privilégio OWNERSHIP na instância.

A abordagem de alto nível para classificar dados com classificadores personalizados é a seguinte:

  1. Identificar uma tabela para classificar.

  2. Use SQL para fazer o seguinte:

    1. Criar uma instância de classificação personalizada.

    2. Adicionar as categorias de tags do sistema e as expressões regulares à instância.

    3. Classificar a tabela.

Exemplo

Conclua estas etapas para criar um classificador personalizado para classificar uma tabela:

  1. Considere uma tabela, data.tables.patient_diagnosis, na qual uma de suas colunas contém códigos de diagnóstico, como códigos 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

    Esta tabela também pode incluir colunas para identificar pacientes, como nome e sobrenome, identificadores exclusivos de seguro saúde e data de nascimento, que foram tratados em uma instituição médica. O proprietário dos dados pode classificar a tabela para garantir que as colunas sejam marcadas corretamente para que a tabela possa ser monitorada.

    Neste exemplo, o proprietário dos dados já tem estes privilégios concedidos à sua função:

    • OWNERSHIP na tabela a ser classificada.

    • OWNERSHIP no esquema que contém a tabela.

    • USAGE no banco de dados que contém o esquema e a tabela.

  2. Permita que o proprietário dos dados classifique a tabela concedendo a função de banco de dados SNOWFLAKE.CLASSIFICATION_ADMIN à função de proprietário dos dados:

    USE ROLE ACCOUNTADMIN;
    GRANT DATABASE ROLE SNOWFLAKE.CLASSIFICATION_ADMIN
      TO ROLE data_owner;
    
    Copy
  3. Como proprietário dos dados, crie um esquema para armazenar suas instâncias de classificação personalizadas:

    USE ROLE data_owner;
    CREATE SCHEMA data.classifiers;
    
    Copy
  4. Use o comando CREATE CUSTOM_CLASSIFIER para criar uma instância de classificação personalizada no esquema data.classifiers:

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

    Atualize seu caminho de pesquisa para facilitar o uso da instância.

  5. Use um comando SHOW CUSTOM_CLASSIFIER para listar cada instância criada. Por exemplo:

    SHOW SNOWFLAKE.DATA_PRIVACY.CUSTOM_CLASSIFIER;
    
    Copy

    Retorna:

    +----------------------------------+---------------+---------------+-------------+-----------------+---------+-------------+
    | 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. Chame o método custom_classifier !ADD_REGEX na instância para especificar as tags do sistema e a expressão regular para identificar códigos ICD-10 em uma coluna. A expressão regular neste exemplo corresponde a todos os códigos ICD-10 possíveis. A expressão regular que corresponde ao nome da coluna, ICD*, e o comentário são opcionais:

    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

    Retorna:

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

    Dica

    Teste a expressão regular antes de adicioná-la à instância de classificação customizada. Por exemplo:

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

    Nesta consulta, apenas valores válidos que correspondam à expressão regular são retornados. A consulta não retorna valores inválidos como xyz.

    Para obter mais detalhes, consulte Funções de cadeia de caracteres (expressões regulares).

  7. Chame o método custom_classifier !LIST na instância para verificar a expressão regular que você adicionou à instância:

    SELECT medical_codes!LIST();
    
    Copy

    Retorna:

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

    Para remover uma categoria, chame o método custom_classifier !DELETE_CATEGORY na instância.

  8. Use SQL para classificar a tabela. Para obter mais detalhes, consulte Uso do SQL para classificar tabelas em um esquema.

  9. Se a instância não for mais necessária, use o comando DROP CUSTOM_CLASSIFIER para remover uma instância de classificação personalizada do sistema:

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