> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-trino-dialect.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# 스키마 변경 전파 지원

> 원본 테이블에서 ClickPipes가 감지할 수 있는 스키마 변경 유형을 설명하는 페이지

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

[//]: # "TODO 이 페이지에 이름 변경, 데이터 타입 변경, TRUNCATE 동작, 그리고 호환되지 않는 스키마 변경을 처리하는 방법에 대한 안내를 추가합니다."

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

<Note>
  현재 스냅샷 수행 중에는 컬럼 추가가 지원되지 않습니다. 권장되는 우회 방법은 계획된 스키마 변경 전이나 후에 스냅샷을 수행하는 것입니다. 또는 ClickPipe가 이미 실패한 상태라면 대상 테이블에 적절한 타입의 컬럼을 수동으로 추가하십시오.
</Note>

<div id="default-values-for-added-columns">
  ## 추가된 컬럼의 기본값
</div>

추가된 컬럼의 경우 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에 전파되지 않습니다.

<div id="mysql-5-limitations">
  ### MySQL 5.x 제한 사항
</div>

[8.0.1](https://dev.mysql.com/blog-archive/more-metadata-is-written-into-binary-log/)보다 이전 버전의 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해야 합니다.
