Snowflake Connector for MySQL 에 대한 복제 구성하기

참고

Snowflake Connector for MySQL 에는 커넥터 약관 이 적용됩니다.

Snowflake Connector for MySQL 에 대한 복제를 구성하는 과정은 다음 단계로 진행됩니다.

그리고 다음과 같은 선택적 단계가 있습니다.

데이터 원본 추가하기

데이터 원본은 단일 MySQL 서버를 나타냅니다. Snowflake Connector for MySQL 는 여러 데이터 원본에서 데이터를 복제할 수 있습니다. 복제를 시작하기 전에 하나 이상의 데이터 원본을 추가해야 합니다.

Snowflake Connector for MySQL 는 각 데이터 원본의 데이터를 Snowflake의 고유한 대상 데이터베이스로 복제합니다. 동일한 대상 데이터베이스를 여러 데이터 원본에서 사용할 수는 없습니다.

데이터 원본을 추가하려면 다음 명령을 실행하십시오.

CALL PUBLIC.ADD_DATA_SOURCE('<data_source_name>', '<dest_db>');
Copy

여기서:

data_source_name

데이터 원본의 고유한 이름을 지정합니다. 에이전트 구성에 정의된 데이터 원본의 이름과 일치하도록 이름을 지정해야 합니다. 선택한 이름이 다음 요구 사항을 준수하는지 확인하십시오.

  • 이름에는 대문자(A~Z)와 십진수 숫자(0~9)만 포함됩니다.

  • 이름은 50자를 넘을 수 없습니다.

dest_db

Snowflake의 대상 데이터베이스 이름을 지정합니다. 데이터베이스가 존재하지 않으면 프로시저가 데이터베이스를 자동으로 생성합니다. 그렇지 않으면 커넥터는 기존 데이터베이스를 사용합니다. 그럴 경우 데이터 원본을 추가하기 전에 커넥터에 데이터베이스에 대한 권한을 부여해야 합니다.

참고

데이터 원본은 일단 추가된 후에는 그 이름을 바꾸거나 삭제할 수 없습니다.

(선택 사항) 대상 데이터베이스에 대한 권한 부여하기

기존 데이터베이스를 대상 데이터베이스로 사용하려면 Snowflake Connector for MySQL 에 해당 데이터베이스에 대한 CREATE SCHEMA 권한이 필요합니다. 커넥터는 수집된 MySQL 데이터가 포함된 스키마와 테이블의 소유자입니다.

CREATE SCHEMA 권한을 부여하려면 다음 명령을 실행하십시오.

GRANT CREATE SCHEMA ON DATABASE <dest_db> TO APPLICATION <app_db_name>;
Copy

여기서:

dest_db

데이터 원본의 데이터에 대한 대상 데이터베이스의 이름을 지정합니다.

app_db_name

커넥터 데이터베이스의 이름을 지정합니다.

다른 데이터 원본 추가하기

언제든지 새로운 데이터 원본을 추가할 수 있습니다. 에이전트가 이미 실행 중인 동안 새 데이터 원본을 추가하려면 다음을 수행하십시오.

  1. 데이터 원본을 추가합니다.

  2. 에이전트가 중지되었는지 확인합니다.

  3. 새로운 데이터 원본에 대한 에이전트 연결을 구성합니다.

  4. 에이전트의 Docker 컨테이너를 실행합니다.

복제할 원본 테이블 추가하기

복제할 원본 테이블을 추가하려면 다음 명령을 실행하십시오.

CALL PUBLIC.ADD_TABLES('<data_source_name>', '<schema_name>', <table_names_array>);
Copy

여기서:

data_source_name

원본 테이블이 포함된 데이터 원본의 이름을 지정합니다.

schema_name

원본 테이블의 스키마 이름을 지정합니다.

table_names_array
테이블 이름으로 구성된 배열을 지정합니다.

ARRAY_CONSTRUCT('<table_name>', '<other_table_name>', ...)

원본 테이블을 추가하면 다음과 같은 효과가 있습니다.

  • schema_nametable_name 은 각각 원본 데이터베이스에서 원본 데이터를 복제하기 위한 스키마 이름과 테이블 이름으로 사용됩니다.

참고

하나의 프로시저 호출에서 동일한 데이터 원본과 스키마에서 여러 테이블을 추가할 수 있습니다.

참고

스키마와 테이블 이름이 일치해야 함

원본 데이터베이스에 정의된 대로 대/소문자를 포함하여 정확한 테이블 이름과 스키마 이름을 사용해야 합니다. 자신이 입력한 이름이 원본 데이터베이스에서 SELECT 쿼리를 생성하는 데 그대로 사용됩니다. MySQL 서버 이름은 대/소문자를 구분할 수 있으며, 다른 대/소문자를 사용하면 “table does not exist” 예외가 발생할 수 있습니다.

최근에 제거된 테이블

최근에 테이블이 제거된 경우(복제에서 테이블 제거하기) 이 구성 시점에서는 테이블을 다시 추가하지 못할 수 있습니다. Tables are not ready to be re-added 메시지와 함께 오류가 나타나면 몇 분간 기다렸다가 다시 시도하십시오.

열 필터가 있는 원본 테이블 추가하기

필터링된 열이 있는 원본 테이블을 추가하려면 다음 명령을 실행하십시오.

CALL PUBLIC.ADD_TABLE_WITH_COLUMNS('<data_source_name>', '<schema_name>', '<table_name>', <included_columns_array>, <excluded_columns_array>);
Copy

여기서:

data_source_name

원본 테이블이 포함된 데이터 원본의 이름을 지정합니다.

schema_name

원본 테이블의 스키마 이름을 지정합니다.

table_name

원본 테이블의 이름을 지정합니다.

included_columns
복제해야 할 열 이름으로 구성된 배열을 지정합니다.

ARRAY_CONSTRUCT('<column_name>', '<other_column_name>', ...)

excluded_columns
무시해야 할 열 이름으로 구성된 배열을 지정합니다.

ARRAY_CONSTRUCT('<column_name>', '<other_column_name>', ...)

주의

프로시저에 전달되는 열 이름은 원본 데이터베이스에 표현된 것과 정확히 똑같이 대/소문자를 구분해야 합니다.

상기 프로시저에는 다음 규칙이 적용됩니다.

  • 데이터가 Snowflake에 수집되기 전에 필터링이 이루어집니다. 즉, 스냅샷과 증분 로드에서 모두 선택한 열의 데이터만 Snowflake로 스트리밍됩니다.

  • included_columnsexcluded_columns 는 마스크일 뿐입니다. 이런 식으로 하면 지정된 열이 존재하지 않을 경우 커넥터에서 오류가 발생하지 않습니다. 존재하지 않는 열에 대한 마스크는 그냥 무시됩니다.

  • included_columnsexcluded_columns 를 모두 제공하면 안 됩니다. included_columns 를 나열하려면 excluded_columns 를 비워 두어야 하며 그 반대의 경우도 마찬가지입니다.

  • 두 배열이 모두 비어 있지 않고 충돌하는 열이 없으면 included_columnsexcluded_columns 보다 우선합니다.

  • included_columnsexcluded_columns 에 모두 열이 나타나는 경우 프로시저에서 오류가 발생합니다.

  • included_columnsexcluded_columns 가 모두 빈 배열이면 사용 가능한 모든 열이 수집됩니다.

  • 구성에 관계없이 기본 키 열은 항상 복제됩니다.

예를 들어, 주어진 열 A, B, C, D가 있는 원본 테이블이 있다고 가정해 보겠습니다. 여기서는 A가 기본 키 열입니다. 그러면 다음과 같이 됩니다.

포함된 열

제외된 열

예상 결과

[]

[]

[A, B, C, D]

[A, B]

[]

[A, B]

[B]

[]

[A, B]

[]

[C, D]

[A, B]

[]

[A, B]

[A, C, D]

[A, B, Z]

[]

[A, B]

[A]

[A]

오류

복제에서 테이블 제거하기

복제에서 원본 테이블을 제거하려면 다음 명령을 실행하십시오.

CALL PUBLIC.REMOVE_TABLE('<data_source_name>', '<schema_name>', '<table_name>');
Copy

여기서:

data_source_name

원본 테이블이 포함된 데이터 원본의 이름을 지정합니다.

schema_name

원본 테이블의 스키마 이름을 지정합니다.

table_name

원본 테이블의 이름을 지정합니다.

참고

복제에서 테이블을 제거하는 과정은 몇 분 정도 걸립니다. 완료되면 커넥터의 PUBLIC.REPLICATION_STATE 뷰에서 테이블이 사라집니다(Snowflake Connector for MySQL 모니터링하기 참조). 그런 다음에만 다시 복제를 위해 활성화될 수 있습니다.

이 시점에서 대상 테이블은 여전히 커넥터 애플리케이션의 소유입니다. 대상 테이블을 삭제하거나 수정하려면 먼저 해당 테이블의 소유권을 자기 계정의 한 역할로 이전해야 합니다. 다음 쿼리를 ACCOUNTADMIN 으로 실행합니다.

GRANT OWNERSHIP ON TABLE <destination_database_name>.<schema_name>.<table_name>
  TO ROLE <role_name>
  REVOKE CURRENT GRANTS;
Copy

참고

복제에서 테이블을 제거하는 경우 FAILED 상태를 수정하고, 수동으로 대상 테이블의 이름을 바꾸거나 삭제까지 해야 복제를 다시 활성화할 수 있습니다.

예약된 복제 구성하기

커넥터는 연속 모드 또는 예약 모드의 두 가지 모드로 데이터를 복제할 수 있습니다. 기본값은 연속 모드입니다.

연속 모드에서는 데이터를 가능한 한 빨리 복제합니다. 진행 중인 복제 작업이 없더라도 운영 웨어하우스를 연중무휴 24시간 내내 운영해야 하므로 불필요한 비용이 발생할 수 있습니다.

예약 모드에서는 구성된 일정에 따라 데이터를 복제합니다. 데이터를 지속적으로 복제할 필요가 없거나 데이터 볼륨이 작아서 커넥터가 대부분의 시간 동안 유휴 상태에 있는 경우 복제 비용을 줄이는 것이 목표입니다.

예약 모드에서는 복제 완료라는 개념을 도입합니다. 스냅샷 복제는 SELECT <열> FROM <TABLE> 쿼리 실행이 시작될 때 시작되고, 데이터가 대상 테이블에 복제될 때 종료됩니다. 증분 복제는 이전에 저장된 변경 데이터 캡처(CDC) 포인터에서 시작하지만, 데이터가 지속적으로 수집되므로 끝이 없습니다. 따라서 커넥터는 이전에 저장된 CDC 포인터의 데이터를 (복제 시작 시에 결정된) 최신 CDC 포인터까지 복제합니다. 이런 방식으로 커넥터는 예약된 모드로 복제를 완료합니다.

예약 모드는 운영 웨어하우스를 일시 중단하여 복제 비용을 줄입니다. 각 원본 테이블의 복제가 완료되면 웨어하우스가 일시 중단될 수 있습니다. 일정에 따라, 다음 복제가 실행될 때까지 웨어하우스는 일시 중단된 상태로 유지됩니다.

참고

한 번에 하나의 복제만 실행할 수 있습니다. 다음으로 예약된 실행 시간이 발생할 때 복제가 계속 실행 중이면 예약된 시간을 건너뜁니다.

예약 모드를 사용하려면 다음 명령을 실행하십시오.

CALL PUBLIC.ENABLE_SCHEDULED_REPLICATION('<data_source_name>', '<schedule>');
Copy

여기서:

data_source_name

데이터 원본의 이름을 지정합니다.

schedule

커넥터가 데이터 원본 복제를 실행하는 일정이나 빈도를 지정합니다. 허용되는 최소 빈도는 10분입니다. 일정이나 빈도 지정에 대한 자세한 내용은 SCHEDULE 매개 변수 섹션을 참조하십시오.

일정 예시:

  • 60 MINUTE

    60분마다 복제하도록 예약합니다.

  • USING CRON 0 2 * * * UTC

    매일 오전 2시(UTC)에 복제하도록 예약합니다.

예약 모드를 비활성화하려면 다음 명령을 실행하십시오.

CALL PUBLIC.DISABLE_SCHEDULED_REPLICATION('<data_source_name>');
Copy

여기서:

data_source_name

데이터 원본의 이름을 지정합니다.

현재 일정을 확인하려면 데이터 원본 보기 섹션을 참조하십시오.

참고

운영 웨어하우스는 모든 데이터 원본의 복제를 처리합니다. 각 데이터 원본에서 각 원본 테이블 복제가 완료된 경우에만 웨어하우스를 일시 중단할 수 있습니다. 즉, 자동 일시 중단이 제대로 작동하려면 모든 데이터 원본에 대해 예약 모드를 활성화해야 합니다.

경고

예약된 실행을 완료하고 운영 웨어하우스를 일시 중단하려면 커넥터가 원본 데이터베이스에서 꾸준히 활동해야 합니다. 데이터베이스에 데이터를 삽입, 삭제, 업데이트하는 모든 작업에서 활동이 생성됩니다. 이 작업은 복제에 추가된 테이블에만 적용할 수 있는 것이 아니라 모든 테이블에 적용할 수 있습니다. 삽입되거나 업데이트된 행의 수는 중요하지 않습니다.

다음 단계

이러한 절차를 완료한 후 Snowflake에서 MySQL 데이터 보기 의 단계를 따르십시오.