GENERATE_SYNTHETIC_DATA

이 프로시저는 입력 테이블의 데이터를 기반으로 하나 이상의 테이블에서 합성 데이터를 생성하고 소스 데이터와 생성된 데이터 간의 차이 계수(유사성)와 같은 생성된 데이터에 대한 메트릭이 포함된 테이블을 반환합니다.

이 저장 프로시저는 호출자의 권한 을 사용하여 출력 테이블을 생성합니다.

이 프로시저를 실행하려면 요구 사항 섹션을 참조하십시오. 요구 사항이 충족되지 않으면 데이터 생성을 시작하기 전에 요청이 실패합니다.

합성 데이터 사용에 대해 자세히 알아보십시오.

구문

SNOWFLAKE.DATA_PRIVACY.GENERATE_SYNTHETIC_DATA(<configuration_object>)
Copy

인자

configuration_object

요청의 세부 사항을 지정하는 OBJECT 입니다. OBJECT 상수 를 사용하여 이 오브젝트를 지정할 수 있습니다.

OBJECT 값은 다음과 같은 구조를 갖습니다.

{
  'datasets': [
    {
      'input_table': '<input_table_name>',
      'output_table' : '<output_table_name>',
      'columns': {
        '<column_name>': {
          <property_name>: <property_value>
        }
        , ...
      }
    }
    , ...
  ],
  'similarity_filter': <boolean>,
  'replace_output_tables': <boolean>,
  'consistency_secret': <session-scoped reference string>
}
Copy

OBJECT 값에는 다음 키-값 페어가 포함됩니다.

datasets

생성할 데이터를 지정하는 배열 입니다. 배열의 각 요소는 단일 입력-출력 테이블 페어를 정의하는 OBJECT 값입니다. 최대 5개의 테이블 페어를 지정할 수 있습니다.

단일 입력-출력 테이블 페어를 나타내는 하위 OBJECT 값은 다음과 같은 속성을 가집니다.

input_table

합성 데이터를 생성할 입력 테이블의 정규화된 이름. 테이블이 존재하지 않거나 액세스할 수 없는 경우 Snowflake는 오류 메시지를 반환합니다. 자세한 입력 테이블 요구 사항은 Snowflake에서 합성 데이터 사용하기 섹션을 참조하십시오.

식별자에 공백이나 특수 문자가 포함된 경우 전체 문자열을 큰따옴표로 묶어야 합니다. 큰따옴표로 묶인 식별자도 대/소문자를 구분합니다.

자세한 내용은 식별자 요구 사항 섹션을 참조하십시오.

output_table

input_table 에서 생성된 합성 데이터를 저장할 출력 테이블의 정규화된 이름입니다. 생성된 테이블은 사용자가 기본값으로 CREATE TABLE 을 호출한 것과 동일한 권한 및 정책을 갖습니다. 테이블이 이미 존재하고 replace_output_tables=TRUE 인 경우, 기존 테이블을 덮어씁니다.

또한, 식별자는 알파벳 문자로 시작해야 하며 전체 식별자 문자열을 큰따옴표(예: "My object")로 묶지 않는 한 공백이나 특수 문자를 포함할 수 없습니다. 큰따옴표로 묶인 식별자도 대/소문자를 구분합니다.

자세한 내용은 식별자 요구 사항 섹션을 참조하십시오.

columns

(선택 사항) 특정 열에 대한 추가 속성을 지정하는 OBJECT 값입니다. OBJECT 의 각 필드는 단일 열에 대한 속성을 정의합니다. 모든 열에 대한 속성을 정의할 필요는 없으며, 어떤 열도 정의할 필요가 없습니다. 각 필드에 대해:

  • 키는 열 이름입니다. 값의 속성을 이 열에 적용해야 합니다.

  • 값은 다음 키-값 페어 중 하나를 포함하는 OBJECT 값입니다.

    • join_key: BOOLEAN 으로, TRUE 는 조인 키 열임을 나타냅니다. categorical 이라는 레이블이 지정된 열에는 사용할 수 없습니다. 열은 문자열, 숫자 또는 부울 값이어야 합니다. 조인 키에 대해 자세히 알아보십시오.

      기본값: FALSE.

    • categorical: BOOLEAN 으로, 열이 카테고리형 문자열인지 여부를 지정하는 데 사용됩니다. 출력에서 데이터를 민감하지 않은 것으로 표시하고 출력에 사용할 수 있도록 하려면 TRUE 로 설정하십시오. 출력에서 값을 삭제하려면 FALSE 로 설정하십시오. 지정되지 않은 경우 데이터를 검토하여 결정됩니다. STRING 열에만 지정할 수 있습니다. TRUE 로 설정된 경우 이 열에 replace 또는 join_key 필드를 지정할 수 없습니다.

      기본값: 열 데이터를 기반으로 추론됩니다.

    • replace: STRING 값의 출력 형식을 지정합니다. 카테고리형 문자열 열에만 사용할 수 있습니다. join_key 열에 사용할 수 있는 값은 uuidemail 뿐입니다. categorical 이 TRUE 일 때는 사용할 수 없습니다. 지정한 경우 consistency_secret 에 대한 값을 제공해야 합니다. 다음 값이 지원됩니다.

      replace

      설명

      uuid

      UUID입니다. 예: 88d99a35-c4be-4022-b06a-41fb4629b46d

      name

      US 로캘 스타일의 이름과 성입니다. 예: George Washington

      first_name

      US 로캘 스타일의 이름입니다. 예: George

      last_name

      US 로캘 스타일의 성입니다. 예: Washington

      address

      US 로캘 스타일의 축약된 주소입니다. 예: 1600 Pennsylvania Ave

      full_address

      US 로캘 스타일의 상세 주소입니다. 예: 1600 Pennsylvania Ave NW, Washington DC 20500

      email

      이메일 주소입니다. 예: bdbQ6OPBS5ScOdJx8bVpFw@example.com

      phone

      US 로캘 스타일의 US 스타일 10자리 전화번호입니다. 예: 212-555-1234

      ssn

      US 스타일의 사회보장번호입니다. 예: 123-45-6789

      기본값:

      • join_key 열의 경우 uuid 입니다.

      • 조인 키가 아닌 열의 경우 값이 삭제됩니다.

similarity_filter

(선택 사항) 합성 데이터를 만들 때 유사도 필터를 사용할지 여부를 지정합니다. 기본 제공 개인정보 보호 필터를 사용하여 입력 테이블의 행과 너무 유사한 행을 대상 테이블에서 제거하려면 TRUE 로 설정합니다. FALSE 인 경우 각 출력 테이블은 입력 테이블과 동일한 수의 행을 가지며, TRUE 인 경우 출력 테이블은 입력 테이블보다 적은 수의 행을 가질 수 있습니다. TRUE 인 경우 문자열이 아닌 열에 NULL 값이 있으면 합성 데이터 생성에 실패합니다.

기본값: FALSE

자세한 내용은 개인 정보 보호 개선 섹션을 참조하십시오.

replace_output_tables

(선택 사항) 합성 데이터를 생성할 때 출력 합성 데이터 테이블을 덮어쓸지 여부를 지정합니다. 출력 테이블을 덮어쓰려면 TRUE 로 설정합니다.

기본값: FALSE

consistency_secret

대칭 키 SECRET 의 세션 범위 지정 참조STRING 입니다. replace 를 지정한 경우 필수, 그렇지 않은 경우 선택 사항입니다. 있는 경우 프로시저는 동일한 일관성 시크릿을 재사용하는 여러 실행에서 STRING 조인 키에 대해 일관된 값을 생성합니다. 없는 경우 조인 키는 동일한 실행의 테이블 간에는 일관되지만 실행 간에는 일관되지 않습니다. 자세히 알아보십시오.

기본값: 일관성 없음

출력

열 이름

데이터 타입

설명

created_on

TIMESTAMP

합성 데이터가 생성된 시간입니다.

table_name

VARCHAR

합성 테이블의 이름입니다.

table_schema

VARCHAR

합성 테이블의 스키마 이름입니다.

table_database

VARCHAR

합성 테이블의 데이터베이스 이름입니다.

columns

VARCHAR

합성 테이블의 한 쌍의 열입니다.

source_table_id

NUMBER

입력 테이블의 내부/시스템 생성 식별자입니다.

source_table_name

VARCHAR

입력 테이블의 이름입니다.

source_table_schema

VARCHAR

입력 테이블의 스키마 이름입니다.

source_table_database

VARCHAR

입력한 데이터베이스 테이블의 데이터베이스 이름입니다.

source_columns

VARCHAR

소스 열의 이름입니다.

metric_type

ENUM

correlation_coefficient_difference - 소스 테이블의 조인이 아닌 두 열과 생성된 데이터의 동일한 두 열 간의 상관 계수의 절대값으로 계산됩니다.

현재 지원되는 유일한 메트릭은 correlation_coefficient_difference 입니다. 이는 입력 테이블에 있는 모든 열 조합의 상관 계수와 생성된 데이터의 동일한 계수 간의 차이입니다. 각 행은 열의 한 조합 간의 상관 계수 차이를 나타냅니다. 열 이름 쌍은 columnssource_columns 에서 찾을 수 있습니다.

metric_value

NUMBER

메트릭의 값입니다.

액세스 제어 요구 사항

합성 데이터를 생성하려면 다음 각 권한을 가진 역할을 사용해야 합니다.

  • USAGE 를 쿼리에 사용할 웨어하우스에 클릭합니다.

  • SELECT 를 합성 데이터를 생성할 입력 테이블에 클릭합니다.

  • USAGE 를 입력 테이블이 포함된 데이터베이스와 스키마, 출력 테이블이 포함된 데이터베이스에 추가합니다.

  • CREATE TABLE 을 출력 테이블이 포함된 스키마에 추가합니다.

  • OWNERSHIP 을 출력 테이블에 추가합니다. 가장 간단한 방법은 출력 테이블이 생성되는 스키마에 OWNERSHIP 을 부여하는 것입니다. (그러나 누군가 이 스키마에 FUTURE GRANT 를 적용한 경우 테이블 소유권은 자동으로 재정의됩니다. 즉, GRANT OWNERSHIP ON FUTURE TABLES IN SCHEMA db.my_schema TO ROLE some_role 은 스키마 my_schema 에서 생성된 모든 새 테이블에 대해 OWNERSHIP 을 some_role 에 자동으로 부여합니다.)

모든 사용자는 SNOWFLAKE.DATA_PRIVACY.GENERATE_SYNTHETIC_DATA 저장 프로시저에 액세스할 수 있습니다. SNOWFLAKE.CORE_VIEWER 데이터베이스 역할에 부여된 PUBLIC 역할을 사용하여 액세스를 사용할 수 있습니다.

사용법 노트

  • JSON 키 값은 소문자여야 합니다.

  • 이 기능을 사용하려면 Snowflake 계정에서 Anaconda 이용 약관 에 동의해야 합니다.

  • 추가 요구 사항은 요구 사항 섹션을 참조하십시오.

이 예제는 의료 정보(혈액형, 성별, 나이, 인종)가 포함된 입력 테이블에서 합성 데이터를 생성합니다. 응답은 원본과 생성된 테이블 간의 데이터 밀접도를 보여줍니다. 생성된 합성 데이터 테이블은 표시되지 않습니다.

조인 키로 지정된 열 2개

CALL SNOWFLAKE.DATA_PRIVACY.GENERATE_SYNTHETIC_DATA({
    'datasets':[
        {
          'input_table': 'syndata_db.sch.faker_source_t',
          'output_table': 'syndata_db.sch.faker_synthetic_t',
          'columns': { 'blood_type': {'join_key': TRUE} , 'ethnicity': {'join_key': TRUE}}
        }
      ]
  });
Copy

조인 키로 지정된 열 없음

CALL SNOWFLAKE.DATA_PRIVACY.GENERATE_SYNTHETIC_DATA({
  'datasets':[
      {
        'input_table': 'syndata_db.sch.faker_source_t',
        'output_table': 'syndata_db.sch.faker_synthetic_t'
      }
    ]
});
Copy

일관성 키를 사용하여 여러 실행에서 일관된 값 생성하기

CREATE OR REPLACE SECRET my_db.public.my_consistency_secret
  TYPE = SYMMETRIC_KEY
  ALGORITHM = GENERIC;

CALL SNOWFLAKE.DATA_PRIVACY.GENERATE_SYNTHETIC_DATA({
  'datasets':[
      {
        'input_table': 'CLINICAL_DB.PUBLIC.BASE_TABLE',
        'output_table': 'my_db.public.test_syndata',
        'columns': { 'patient_id': {'join_key': TRUE, 'replace': 'uuid'}}
      }
    ],
    'consistency_secret': SYSTEM$REFERENCE('SECRET', 'MY_CONSISTENCY_SECRET', 'SESSION', 'READ')::STRING,
    'replace_output_tables': TRUE
});
Copy

함수 호출로부터의 출력

+---------------------------+-------------------+--------------+----------------+------------------------+-------------------+---------------------+-----------------------+------------------------+------------------------------------+----------------+
| CREATED_ON                | TABLE_NAME        | TABLE_SCHEMA | TABLE_DATABASE | COLUMNS                | SOURCE_TABLE_NAME | SOURCE_TABLE_SCHEMA | SOURCE_TABLE_DATABASE | SOURCE_COLUMNS         | METRIC_TYPE                        | METRIC_VALUE   |
+---------------------------+-------------------+--------------+----------------+------------------------+-------------------+---------------------+-----------------------+------------------------+------------------------------------+----------------+
| 2024-07-30 09:53:28.439 Z | faker_synthetic_t | sch          | syndata_db     | "BLOOD_TYPE,GENDER"    | faker_source_t    | sch                 | syndata_db            | "BLOOD_TYPE,GENDER"    | CORRELATION_COEFFICIENT_DIFFERENCE | 0.02430214616  |
| 2024-07-30 09:53:28.439 Z | faker_synthetic_t | sch          | syndata_db     | "BLOOD_TYPE,AGE"       | faker_source_t    | sch                 | syndata_db            | "BLOOD_TYPE,AGE"       | CORRELATION_COEFFICIENT_DIFFERENCE | 0.001919343586 |
| 2024-07-30 09:53:28.439 Z | faker_synthetic_t | sch          | syndata_db     | "BLOOD_TYPE,ETHNICITY" | faker_source_t    | sch                 | syndata_db            | "BLOOD_TYPE,ETHNICITY" | CORRELATION_COEFFICIENT_DIFFERENCE | 0.003720197046 |
| 2024-07-30 09:53:28.439 Z | faker_synthetic_t | sch          | syndata_db     | "GENDER,AGE"           | faker_source_t    | sch                 | syndata_db            | "GENDER,AGE"           | CORRELATION_COEFFICIENT_DIFFERENCE | 0.004348586645 |
| 2024-07-30 09:53:28.439 Z | faker_synthetic_t | sch          | syndata_db     | "GENDER,ETHNICITY"     | faker_source_t    | sch                 | syndata_db            | "GENDER,ETHNICITY"     | CORRELATION_COEFFICIENT_DIFFERENCE | 0.001171535243 |
| 2024-07-30 09:53:28.439 Z | faker_synthetic_t | sch          | syndata_db     | "AGE,ETHNICITY"        | faker_source_t    | sch                 | syndata_db            | "AGE,ETHNICITY"        | CORRELATION_COEFFICIENT_DIFFERENCE | 0.004265938158 |
+---------------------------+-------------------+--------------+----------------+------------------------+-------------------+---------------------+-----------------------+------------------------+------------------------------------+----------------+