Snowflake에서 MySQL 데이터 보기¶
참고
Snowflake Connector for MySQL 에는 커넥터 약관 이 적용됩니다.
커넥터는 커넥터를 설정하고 PUBLIC.ADD_DATA_SOURCE('<data_source_name>', '<dest_db>')
를 호출하는 동안 정의된 대상 데이터베이스에 데이터를 복제합니다.
데이터 테이블은 복제된 데이터를 포함하며 식별자 dest_db.schema_name.table_name
으로 제공됩니다. 여기서
dest_db
는 대상 데이터베이스의 이름입니다.schema_name
은 원래 MySQL 테이블이 있는 스키마 이름입니다.table_name
은 원본 MySQL 테이블의 이름입니다.
참고
dest_db
, schema_name
, table_name
은 이름에 대/소문자가 혼합된 경우 큰따옴표로 묶어야 합니다.
복제된 테이블에는 추가 메타데이터 열이 포함됩니다.
열 이름 |
데이터 타입 |
설명 |
---|---|---|
|
TIMESTAMP_NTZ |
행이 대상 테이블에 삽입된 시간의 타임스탬프(UTC)입니다. |
|
TIMESTAMP_NTZ |
대상 테이블에서 행이 마지막으로 업데이트된 시간의 타임스탬프(UTC)입니다. |
|
BOOLEAN |
행이 원본 테이블에서 삭제된 경우 값은 |
복제된 데이터 타입은 Snowflake 타입과 일치하도록 매핑됩니다. 자세한 내용은 MySQL을 Snowflake 데이터 타입으로 매핑 섹션을 참조하십시오.
복제된 데이터 액세스 제어¶
복제된 데이터에 대한 액세스를 제어하려면 DATA_READER
애플리케이션 역할을 사용합니다. 커넥터 애플리케이션 역할에 대한 자세한 내용은 Snowflake Connector for MySQL 에서의 애플리케이션 역할 섹션을 참조하십시오. 특정 대상 오브젝트를 보다 세부적으로 제어하려면 ACCOUNTADMIN
역할을 사용하여 적절한 권한을 부여하거나 데이터베이스 역할을 만드십시오.
MySQL을 Snowflake 데이터 타입으로 매핑¶
Snowflake에서는 복제된 테이블의 열 이름이 대문자로 시작되고 타입은 Snowflake 타입과 일치하도록 매핑됩니다.
다음 표에서는 커넥터 데이터 타입이 Snowflake 타입에 매핑되는 방식을 보여줍니다.
MySQL 형식 |
Snowflake 유형 |
참고 |
---|---|---|
DECIMAL / NUMERIC |
NUMBER |
MySQL에 대해 DECIMAL 형식의 최대 숫자 개수는 65개입니다. Snowflake의 경우 최대 개수는 38개입니다.
|
INT / INTEGER |
INT |
|
TINYINT / BOOL |
INT |
|
SMALLINT |
INT |
|
MEDIUMINT |
INT |
|
BIGINT |
INT |
|
YEAR |
INT |
|
FLOAT |
FLOAT |
|
DOUBLE |
FLOAT |
|
VARCHAR |
VARCHAR |
|
TINYTEXT |
VARCHAR |
|
TEXT |
VARCHAR |
|
ENUM |
VARCHAR |
문자열로 저장됩니다. 예를 들어, ENUM(‘one’, ‘two’)의 경우 가능한 값은 ‘one’, ‘two’입니다. |
SET |
VARCHAR |
열 선언 순서대로 쉼표로 연결된 문자열로 저장됩니다. 예를 들어, SET(‘one’, ‘two’)의 경우 가능한 값은 ‘ ‘, ‘one’, ‘two’, ‘one,two’입니다. |
MEDIUMTEXT |
VARCHAR |
Snowflake의 최대 입력 크기(16MB)까지 지원됩니다. |
LONGTEXT |
VARCHAR |
Snowflake의 최대 입력 크기(16MB)까지 지원됩니다. |
CHAR |
VARCHAR |
후행 공백 없이 Snowflake로 전송됩니다. |
BIT |
VARCHAR |
16진수로 표현됩니다(예: ‘83060c183060c183’). |
DATE |
DATE |
대상 테이블에 문자열로 저장됩니다(예: ‘1971-01-31’). 평면화된 뷰에서는 날짜가 DATE로 변환됩니다. |
DATETIME |
DATETIME / TIMESTAMP_NTZ |
|
TIMESTAMP |
TIMESTAMP_TZ |
대상 테이블에 UTC 타임존으로 문자열로 저장됩니다(예: ‘2000-12-30 23:59:59.001009+00:00’). 평면화된 뷰에서는 타임스탬프가 TIMESTAMP_TZ로 변환됩니다. |
TIME |
TIME |
대상 테이블에 문자열로 저장됩니다(예: ‘23:59:59’). 평면화된 뷰에서는 시간 값이 TIME으로 변환됩니다. |
BINARY |
BINARY |
|
MEDIUMBLOB |
BINARY |
Snowflake의 최대 입력 크기(16MB)까지 지원됩니다. |
LONGBLOB |
BINARY |
Snowflake의 최대 입력 크기(16MB)까지 지원됩니다. |
BLOB |
BINARY |
|
VARBINARY |
BINARY |
|
TINYBLOB |
BINARY |
|
JSON |
VARIANT |
JSON을 완전한 문서 또는 부분 업데이트로 MySQL BinLog에 저장할 수 있습니다. 기본적으로 완전한 문서로 저장됩니다. 부분 업데이트는 현재 지원되지 않습니다. JSON은 Snowflake에 문자열로 전송되지만, Snowpipe Streaming에서는 JSON을 VARIANT 데이터 타입으로 변환하고 내부적으로 ARRAY, OBJECT 등으로 저장합니다. Snowflake의 최대 입력 크기(16MB)까지 지원됩니다. |
삭제된 열의 데이터 보기¶
원본 테이블에서는 열이 삭제되어도 대상 테이블에서는 삭제되지 않습니다. 대신 소프트 삭제 접근 방식을 따르고 열 이름이 <이전 이름>__SNOWFLAKE_DELETED
으로 바뀌어 이전 값을 계속 쿼리할 수 있습니다.
예를 들어, 열 A
가 삭제되면 대상 테이블에서 해당 열의 이름이 A__SNOWFLAKE_DELETED
로 바뀌고 다음과 같이 쿼리할 수 있습니다.
SELECT A__SNOWFLAKE_DELETED FROM <TABLE_NAME>;
이름이 바뀐 열의 데이터 보기¶
열 이름을 바꾸는 것은 열을 삭제하고 새 이름을 가진 새로운 열을 만드는 것과 같습니다. 삭제는 이전 섹션에서 설명한 소프트 삭제 접근 방식을 따릅니다.
예를 들어, 열 A
의 이름이 B
로 바뀐 경우 대상 테이블에서 A
는 A__SNOWFLAKE_DELETED
로 이름이 바뀌고 열 B
가 새로 추가됩니다. 변경 전에 존재한 행은 전부 A__SNOWFLAKE_DELETED
열에서 해당 열의 값을 유지하는 반면, 변경 후에 새로 추가된 행에는 B
열의 값이 있습니다. 이름이 바뀐 열의 값은 다음의 간단한 쿼리를 사용해 단일 열로 볼 수 있습니다.
SELECT
CASE WHEN B IS NULL THEN A__SNOWFLAKE_DELETED ELSE B END AS A_RENAMED_TO_B
FROM <TABLE_WITH_RENAMED_COLUMN>;
열 이름을 바꾼 후 간편하게 사용할 수 있도록 뷰를 생성할 수 있습니다.
다음 단계¶
이러한 절차를 완료한 후 Snowflake Connector for MySQL 에서 진행 중인 작업 에서 프로세스를 검토해 보십시오.