ClickHouse

必须先选择 MySQL 的表后,再选择 ClickHouse 插件,再选择 ClickHouse 库表的时候,如果ClickHouse表字段和MySQL表字段一致的情况下会自动填充

在没有选择 ClickHouse 数据表的时候,在同步过程中,将会根据数据类型自动创建ClickHouse表结构

假如没有选择ClickHouse 数据库名,则会根据 MySQL 里的数据库名,自动创建

假如选择了ClickHouse 数据库名,没有选择表名,则会自动创建根据字段类型自动创建表

自动创建表 规则

不允许源端数据 在Int,Bool,Timestamp ,DateTime,YEAR,BIT 等类型下存在 NULL 数据

如果源端数据为 NULL,自动创建 ClickHouse 表的时候,会被强制转换成 ClickHouse String 类型

会被强制转成 日志模式-UPDATE(LogUpdate) 同步模式

会自动新新增 bifrost_data_version,binlog_event_type 两个字段,对应 {$BifrostDataVersion},{$EventType} 标签

源端 DDL之前,需要 先在 ClickHouse 里手工执行 相对应 DDL 语句,再重启 Bifrost,不支持 DDL 自动更新

源端少了或者多了字段 ,并与 ClickHouse 表字段对应不上,ClickHouse 里的字段数据按自动填充默认值

源端没有自键的表,会自动放弃该表的同步

 

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( 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 )

 

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 ,异步删除的时候会用到,保证数据安全

自动过滤规则(普通同步方式)

假如同一个主键的数据,在同一批次刷数据,会自动过滤多余操作

 

1. 假如 id = 1 这条数据,连接有 insert ,delete ,update 操作

则只会执行最后的 update 操作,不会执行前面insert 及 delete操作

 

2. 假如 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 数据类型