本文共 1484 字,大约阅读时间需要 4 分钟。
MySQL引擎
MySQL引擎用于将远程MySQL服务器中的表映射到ClickHouse中,允许在ClickHouse与MySQL之间进行数据交换。通过MySQL引擎,可以执行SELECT和INSERT查询,将远程表的数据同步到ClickHouse。MySQL引擎会将查询转换为MySQL语法发送到服务器,您可以执行SHOW TABLES、SHOW CREATE TABLE等操作。
不过,MySQL引擎不支持以下操作:
- RENAME
- CREATE TABLE
- ALTER
Materialized MySQL引擎(实验性功能)
Materialized MySQL引擎用于创建ClickHouse数据库,包含MySQL中所有表及数据。它作为MySQL的副本工作,读取binlog并执行DDL和DML查询。
MySQL服务器端配置
为了确保Materialized MySQL引擎正常工作,需设置以下MySQL配置:
- default_authentication_plugin = mysql_native_password
- gtid_mode = on
- enforce_gtid_consistency = on
虚拟列
在使用Materialized MySQL引擎时,推荐使用以下虚拟列:
_version
:类型UInt64,用于同步版本控制。 _sign
:类型Int8,可能值为:
兼容性限制
在使用Materialized MySQL引擎前,请注意以下限制:
- MySQL表必须包含PRIMARY KEY。
- ENUM字段值超出签名范围的表无法复制。
- Materialized MySQL引擎不支持直接执行INSERT、DELETE和UPDATE查询,但支持通过binlog复制数据。
DDL查询
MySQL的DDL查询会转换为ClickHouse的DDL语法(如ALTER、CREATE、DROP、RENAME)。如果ClickHouse无法解析某个DDL查询,将忽略该操作。
数据复制
Materialized MySQL引擎支持以下数据复制功能:
- INSERT查询转换为INSERT,携带_sign=1。
- DELETE查询转换为INSERT,携带_sign=-1。
- UPDATE查询转换为INSERT,携带_sign=-1(删除旧值)和_sign=1(插入新值)。
查询Materialized MySQL表
SELECT查询Materialized MySQL表时需注意以下细节:
- 如果未指定_version,默认使用FINAL修饰符,只有带有MAX(_version)的行才会被选中。
- 如果未指定_sign,默认使用WHERE _sign=1,即未删除的行不会包含在结果集中。
- 结果集中会包含列的注释信息。
Index Conversion
MySQL的PRIMARY KEY和INDEX子句会转换为ClickHouse的ORDER BY元组。由于ClickHouse只有一个物理顺序,若需创建新顺序,请使用materialized views。
注意事项
- 带有_sign=-1的行不会从表中物理删除。
- Materialized MySQL引擎不支持级联UPDATE/DELETE查询。
- 禁止对数据库和表进行手工操作。
- 物理删除操作会破坏复制。
- Materialized MySQL引擎受optimize_on_insert设置的影响,MySQL表结构变化会同步到Materialized MySQL表中。
转载地址:http://wqwcz.baihongyu.com/