一、数据表转换规则
·数据表统一自动转换到 ReplicatedReplacingMergeTree。
·为用户创建对应的本地表和分布式表。本地表为表名添加 _local 后缀。
示例:
— 使用 CDC 同步 MySQL 库表 sbtest.sbtest1 到 LibraSQL 分析引擎,自定义分区键为 t– MySQL 表定义CREATE TABLE `sbtest1` (`id` int(11) NOT NULL AUTO_INCREMENT,`k` int(11) NOT NULL DEFAULT '0',`c` char(120) NOT NULL DEFAULT '',`pad` char(60) NOT NULL DEFAULT '',`t` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY (`id`),KEY `k_1` (`k`)) ENGINE=InnoDB AUTO_INCREMENT=10001 DEFAULT CHARSET=utf8– 转换到 LibraSQL 分析引擎的本地表CREATE TABLE sbtest.sbtest1_local (`id` Int32, `k` Int32, `c` String, `pad` String, `t` DateTime, `_sign` Int8, `_version` UInt64) ENGINE = ReplicatedReplacingMergeTree('/clickhouse/sbtest/tables/sbtest1_local/{shard}', '{replica}', _version) PARTITION BY toYYYYMM(t) ORDER BY id SETTINGS index_granularity = 8192– 转换到 LibraSQL 分析引擎的分布式表CREATE TABLE sbtest.sbtest1 (`id` Int32, `k` Int32, `c` String, `pad` String, `t` DateTime, `_sign` Int8, `_version` UInt64) ENGINE = Distributed('default_cluster', 'sbtest', 'sbtest1_local', cityHash64(id))
二、Key 的转换规则
·排序键:优先选择 MySQL 表主键,其次是“不可为 NULL 的唯一键”。若“不可为 NULL 的唯一键”有多列,则选择其中第一列。
·主键:不做设定,默认为排序键。
·分区键:默认不设置,用户可自定义,详见 设置分区键。
·分片键:使用表达式 cityHash64(主键)。
三、数据类型的转换规则
默认的数据类型转换规则表。
| MySQL 数据类型 | LibraSQL 分析引擎数据类型 |
| BIGINT | Int64 |
| BINARY | String |
| BIT | Int64 |
| CHAR | String |
| DATE | String |
| DATETIME | String |
| DECIMAL | String:MySQL DECIMAL 映射为 LibraSQL DECIMAL 功能上线前启动的 CDC 任务。DECIMAL:版本为 LibraSQL 10.3.213 新创建的 CDC 任务及后续 LibraSQL 版本。DECIMAL 仅支持不超过38位精度。 |
| DOUBLE | Float64 |
| ENUM | String |
| FLOAT | Float32 |
| GEOMETRY | String |
| GEOMETRYCOLLECTION | String |
| INT | Int32 |
| INTEGER | Int32 |
| JSON | String |
| LINESTRING | String |
| MEDIUMINT | Int32 |
| MULTILINESTRING | String |
| MULTIPOINT | String |
| MULTIPOLYGON | String |
| POINT | String |
| POLYGON | String |
| SET | String |
| SMALLINT | Int16 |
| TIME | String |
| TIMESTAMP | String |
| TINYBLOB/BLOB/MEDIUMBLOB/LONGBLOB | String |
| TINYINT | Int8 |
| TINYTEXT/TEXT/MEDIUMTEXT/LONGTEXT | String |
| VARBINARY | String |
| VARCHAR | String |
| YEAR | Int16 |
四、自定义数据类型转换
MySQL 和 LibraSQL 分析引擎的某些类型转换方式,会影响到用户的使用,因此提供了用户设定能力。在创建 CDC 的高级设置中,有字段类型映射功能。
对于时间类型,CDC 服务默认转换为 String,确保信息不丢失。但这样会丢失 LibraSQL 分析引擎时间函数等能力,因此用户可在此处自行选择转换方式。
注意:LibraSQL 分析引擎的时间类型基于 UNIX 时间戳,因此无法表达1970-01-01 00:00:00前的时间信息。当 MySQL 的数据有此之前的时间时,会自动转换为1970-01-01 08:00:00(自动时区转换到东8区),导致出现信息偏差。