> ## 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 このページに、rename、データ型の変更、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 は、整数、10 進数、浮動小数点数のリテラル、ブール値、単純な文字列および日付の値に加え、MySQL server から完全な binlog 行メタデータが提供される場合は enum または set の値も伝播します。文字列リテラルは、ClickHouse と互換性のある引用形式に書き換えられます。

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 はカラムを順序位置で追跡します。つまり、次のようになります。

* **末尾へのカラム追加** (`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`

このエラーが発生した場合は、パイプを再同期する必要があります。
