GENERATE_SYNTHETIC_DATA¶
이 프로시저는 입력 테이블의 데이터를 기반으로 하나 이상의 테이블에서 합성 데이터를 생성하고 소스 데이터와 생성된 데이터 간의 차이 계수(유사성)와 같은 생성된 데이터에 대한 메트릭이 포함된 테이블을 반환합니다.
이 저장 프로시저는 호출자의 권한 을 사용하여 출력 테이블을 생성합니다.
이 프로시저를 실행하려면 요구 사항 섹션을 참조하십시오. 요구 사항이 충족되지 않으면 데이터 생성을 시작하기 전에 요청이 실패합니다.
구문¶
SNOWFLAKE.DATA_PRIVACY.GENERATE_SYNTHETIC_DATA(<configuration_object>)
인자¶
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> }
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
열에 사용할 수 있는 값은uuid
및email
뿐입니다.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 조인 키에 대해 일관된 값을 생성합니다.
이 필드가 제공되지 않으면 조인 키는 동일한 실행의 테이블 간에는 일치하지만 여러 실행 간에 일치하지는 않습니다. 일관성에 대해 자세히 알아보세요.
기본값: 일관성 없음
출력¶
열 이름 |
데이터 타입 |
설명 |
---|---|---|
|
TIMESTAMP |
합성 데이터가 생성된 시간입니다. |
|
VARCHAR |
합성 테이블의 이름입니다. |
|
VARCHAR |
합성 테이블의 스키마 이름입니다. |
|
VARCHAR |
합성 테이블의 데이터베이스 이름입니다. |
|
VARCHAR |
합성 테이블의 한 쌍의 열입니다. |
|
NUMBER |
입력 테이블의 내부/시스템 생성 식별자입니다. |
|
VARCHAR |
입력 테이블의 이름입니다. |
|
VARCHAR |
입력 테이블의 스키마 이름입니다. |
|
VARCHAR |
입력한 데이터베이스 테이블의 데이터베이스 이름입니다. |
|
VARCHAR |
소스 열의 이름입니다. |
|
ENUM |
현재 지원되는 유일한 메트릭은 |
|
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}}
}
]
});
조인 키로 지정된 열 없음
CALL SNOWFLAKE.DATA_PRIVACY.GENERATE_SYNTHETIC_DATA({
'datasets':[
{
'input_table': 'syndata_db.sch.faker_source_t',
'output_table': 'syndata_db.sch.faker_synthetic_t'
}
]
});
일관성 키를 사용하여 여러 실행에서 일관된 값 생성하기
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
});
함수 호출로부터의 출력
+---------------------------+-------------------+--------------+----------------+------------------------+-------------------+---------------------+-----------------------+------------------------+------------------------------------+----------------+
| 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 |
+---------------------------+-------------------+--------------+----------------+------------------------+-------------------+---------------------+-----------------------+------------------------+------------------------------------+----------------+