ClickHouse
必须先选择 MySQL 的表后,再选择 ClickHouse 插件,再选择 ClickHouse 库表的时候,如果ClickHouse表字段和MySQL表字段一致的情况下会自动填充
在没有选择 ClickHouse 数据表的时候,在同步过程中,将会根据数据类型自动创建ClickHouse表结构
假如没有选择ClickHouse 数据库名,则会根据 MySQL 里的数据库名,自动创建表( 只有有数据同步的时候,才会自动建表,没有数据同步之前,是不会自动建表的 )
假如选择了ClickHouse 数据库名,没有选择表名,则会自动创建根据字段类型自动创建表
自动创建表 规则
会被强制转成 日志模式-追加(InsertAll) 同步模式
自动创建表为 ReplacingMergeTree 引擎
会自动新新增 bifrost_data_version,binlog_event_type 两个字段,对应 {$BifrostDataVersion},{$EventType} 标签
源端少了或者多了字段 ,并与 ClickHouse 表字段对应不上,ClickHouse 里的字段数据按自动填充默认值
源端没有自增字段的表,会自动放弃该表的同步
在设置 FilterQuery : False 的时候,支持 DDL 同步
ClickHouse 对应用MySQL里的存储类型
括号里的代表是ClickHouse里的存储类型
TINYINT ( Int8 | UInt8 ) , SMALLINT ( Int16 | UInt16 ) , MEDIUMINT ( Int32 | UInt32 ), INT ( Int32 | UInt32 ) , BIGINT ( Int64 | UInt64 )
FLOAT ( Float64 ) , DOUBLE ( Float64 ) ,REAL ( Float64 )
NUMERIC( Float64 )
DECIMAL( DECIMAL32 ==> Decimal32 , DECIMAL64 ==> Decimal64 , DECIMAL128 | DECIMAL256 ==> String )
DATE ( Date )
TIME ( String )
YEAR ( Int16 )
DATETIME , TIMESTAMP ( DateTime )
CHAR , VARCHAR ( String )
TEXT , TINYTEXT , MEDIUMINTTEXT , LONGTEXT ( String )
BLOB, TINYBLOB , MEDIUMINTBLOB , LONGBLOB ( String )
ENUM ( String )
SET ( String )
BIT ( Int64 )
BOOL ( Int8 )
JSON ( String )
DDL同步
版本要求:Bifrost 1.7+
不选择表,让Bifrost 自动建表
设置 FilterQuery : False
支持 DDL 类型
ADD COLUMN 加字段
CHANGE COLUMN 修改字段类型(不支持修改字段名,字段名修改会被放弃那个字段的DDL操作)
RENAME 修改表名
LowerCaseTableNames 参数
0(不转) : 按源表大小写直接创建表
1(小写) : 库表名及字段转成小写
2(大写) : 库表名及字段转成大写
连接配置
eg : tcp://127.0.0.1:9000?Database=test&username=&compress=true
同步方式
**普通模式(Normal) : **
源insert,update,delete, 目标库也对应insert,update,delete , 建议 ClickHouse 表中新增一个名为 bifrost_data_version 的字段,使用{$BifrostDataVersion} 标签,用于异步删除数据安全
**日志模式-追加(InsertAll) : **
将DELETE ,UPDATE 转成 INSERT 语句往 ClickHouse 新增一条记录
这个操作,在ClickHouse 表里新增一个叫 EventType(String) 的字段, 在配置同步的时候, EventType 字段 在input 框中 填写 {$EventType} 标签
这个操作是将 数据源里的操作记录,全打到 ClickHouse 里进行存储
**日志模式-UPDATE(LogUpdate) : **
将DELETE ,UPDATE 转成 INSERT 语句往 ClickHouse 新增一条记录
这个操作,在ClickHouse 表里新增一个叫 EventType(String) 的字段, 在配置同步的时候, EventType 字段 在input 框中 填写 {$EventType} 标签
这个操作是将 数据源里的操作记录,全打到 ClickHouse 里进行存储
标签
{$Timestamp} : 同步的时间戳,并不是 Binlog 发生的时间
{$EventType} : 事件类型,insert delete update 三个字符串
{$BinlogTimestamp} : Binlog记录的时间戳
{$BinlogFileNum} : Binlog文件编号,并不是 整个Binlog文件名,比如 binlog 文件是 mysql-bin.000001 那这个 BinlogFileNum 的值 是1
{$BinlogPosition} : Binlog position 位点
{$BifrostDataVersion} : 数据版本号,字段类型必须 为 Int64 或者 UInt64 ,异步删除的时候会用到,保证数据安全
DECIMAL
在 1.6及之前版本 Decimal 类型自动那家表的时候,都强制转成 String 类型
在1.7+版本之后, Deciaml(M,D) ,在 M <= 18 的时候,转成 Deciaml64, 转则转成 String
当前 Bifrost CK 插件 不支持 Deciaml128 和 Decimal256
自动过滤规则(普通同步方式)
假如同一个主键的数据,在同一批次刷数据,会自动过滤多余操作
- 假如 id = 1 这条数据,连接有 insert ,delete ,update 操作
则只会执行最后的 update 操作,不会执行前面insert 及 delete操作
- 假如 id = 1 这条数据,连接有 insert ,delete ,insert ,delete 顺序操作
则只会执行最后的 delete 操作一次,不会执行 insert
update 操作是转换成 delete 再 insert 两次操作
备注
ClickHouse 18+ 版本
假如源端是 decimal或者 varchar 等字符串类型, 目标端ClickHouse 是 Float32,Float64 或者 Decimal 类型,数据类型转换,可能存在精度精失的,如果要确保精度不丢失,ClickHouse 端使用 String 类型
不支持 NULL 值字段,假如数据源为 Null ,将强制转换成 0, 0.00 或者 空字符串
假如目标字段是Date,DateTime类型,数据源为空字符串将强制转成 Date,DateTime 默认值
假如数据源是String类型,Ck表结构是 Int 或者 Float 类型,数据类型转换失败,并不报错,将强制转换成 0 或者 0.00
BatchSize参数代表累积多少条数据刷一次数据到ClickHouse,假如一直没有数据从 MySQL 过来,则默认5秒超时,也会进行刷一次
{$BifrostDataVersion} 标签的字段 必须为 Int64 或者 UInt64 数据类型