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입니다. 다음 조건 중 하나가 충족되는 경우 필수입니다(그렇지 않으면 이 필드를 생략할 수 있음).

  • 여러 실행에서 조인 키의 일관성을 유지하려는 경우.

  • columns.replace 또는 columns.join_key = TRUE 가 임의 열에 지정되는 경우, 이 프로시저는 소유자 권한 저장 프로시저 에서 실행됩니다.

이 필드가 제공되면 프로시저는 동일한 일관성 시크릿을 재사용하는 여러 실행에서 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 이용 약관 에 동의해야 합니다.

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

  • 소스 데이터에서 1677-09-21 00:12:43.145224193 보다 이전, 2262-04-11 23:47:16.854775807 보다 이후의 모든 타임스탬프는 합성 데이터를 생성할 때 각각 1677-09-21 00:12:43.145224193 또는 2262-04-11 23:47:16.854775807 로 강제로 변환됩니다.

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

조인 키로 지정된 열 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 |
+---------------------------+-------------------+--------------+----------------+------------------------+-------------------+---------------------+-----------------------+------------------------+------------------------------------+----------------+