Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

스키마 변경 전파 지원

MySQL용 ClickPipes는 원본 테이블의 스키마 변경을 감지할 수 있으며, 경우에 따라 이러한 변경 사항을 대상 테이블에 자동으로 전파할 수 있습니다. 각 DDL 작업이 어떻게 처리되는지는 아래에 설명되어 있습니다.

스키마 변경 유형 동작
새 컬럼 추가 (ALTER TABLE ADD COLUMN ...) 자동으로 전파됩니다. 새 컬럼은 스키마 변경 이후 복제되는 모든 행에 채워집니다
기본값이 있는 새 컬럼 추가 (ALTER TABLE ADD COLUMN ... DEFAULT ...) 자동으로 전파됩니다. 지원되는 기본값도 ClickHouse 컬럼에 추가되므로, 스키마 변경 이후 복제되는 행뿐 아니라 ClickHouse에 이미 있는 행에도 적용됩니다.
기존 컬럼 삭제 (ALTER TABLE DROP COLUMN ...) 감지되지만 전파되지는 않습니다. 삭제된 컬럼은 스키마 변경 이후 복제되는 모든 행에서 NULL로 채워집니다

추가된 컬럼의 기본값

추가된 컬럼의 경우 ClickPipes는 값을 ClickHouse에서 안전하게 변환할 수 있을 때만 기본값을 전파합니다. 기본값이 전파되면 ClickHouse는 새 컬럼이 추가되기 전에 생성된 데이터 파트를 읽을 때 해당 기본값을 사용합니다. 따라서 전체 테이블을 갱신하지 않아도 ClickHouse에 이미 있는 행에 소스 기본값이 적용됩니다.

ClickPipes는 리터럴 정수, Decimal 및 부동 소수점 값, Boolean, 단순 문자열 및 날짜 값과 MySQL server가 전체 binlog 행 메타데이터를 제공하는 경우의 enum 또는 Set 값을 전파합니다. 문자열 리터럴은 ClickHouse와 호환되는 quoting을 사용하도록 재작성합니다.

ClickPipes는 NULL, 비트 리터럴, CURRENT_TIMESTAMP, NOW(), UUID() 같은 함수 호출, 백슬래시 또는 제어 문자가 포함된 문자열 값 등 이식 가능한 리터럴이 아닌 기본값은 의도적으로 생략합니다. 컬럼은 계속 추가되지만, ClickHouse는 컬럼이 추가되기 전에 생성된 파트에 일반적인 유형 기본값을 사용합니다. 기존 행에 소스 기본값이 포함되어야 한다면 전체 테이블 갱신이 필요합니다.

ClickPipes는 ALTER TABLE ADD COLUMN의 일부로만 기본값을 전파합니다. 이후 컬럼 기본값을 변경하거나 제거하는 작업은 ClickHouse에 전파되지 않습니다.

MySQL 5.x 제한 사항

8.0.1보다 이전 버전의 MySQL은 binlog에 전체 컬럼 메타데이터(binlog_row_metadata=FULL)를 포함하지 않으므로, ClickPipes는 컬럼을 순서 위치(ordinal position) 기준으로 추적합니다. 이는 다음을 의미합니다.

  • 끝에 컬럼 추가 (ALTER TABLE ADD COLUMN ...)는 지원됩니다.
  • 컬럼 위치를 변경하는 모든 DDL은 파이프에서 오류를 발생시킵니다. 순서 위치를 더 이상 안정적으로 매핑할 수 없기 때문입니다. 여기에는 다음이 포함됩니다.
    • ALTER TABLE DROP COLUMN ...
    • ALTER TABLE ADD COLUMN ... AFTER ... / FIRST
    • ALTER TABLE MODIFY COLUMN ... AFTER ... / FIRST
    • ALTER TABLE CHANGE COLUMN ... AFTER ... / FIRST

이 오류가 발생하면 파이프를 resync해야 합니다.

Navigation