一 简介:clickhouse与mysql的交互
二 前置:来聊聊如何将mysql数据导入clickhouse中
三 必要了解:
1通过查询导入数据的方式是不用创建表结构的,表结构会自动生成
2 ClickHouse 本身没有精度单位,遇到不识别的类型会转换为String类型.所以拥有float ,decimal 和double的mysql表要进行程序转换(这里需要验证下,存疑)
3 ClickHouse 对于引号的编写要注意下
4 ClickHouse日期类型是1970 - 2038年之间,也要注意
5 ClickHouse是支持分区表的
四 导入方式
1 通过查询数据导入
CREATE TABLE article_clientuser_sum
ENGINE = MergeTree ORDER BY id AS
SELECT *
FROM mysql('host:port', 'db', 'article_clientuser_sum', 'user', 'password')
2 通过程序导入
3 通过csv导入
1 mysql将数据导出到csv
SELECT DATE(created_on),order_dish_id, dish_id, dish_name,dining_order_id, discount,member_discount, normal_discount INTO OUTFILE '/var/lib/mysql-files/pdish_test.csv' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n' FROM pos_order_dish;
2 csv导入到clickhouse
cat rv_ol_fans.csv | clickhouse-client --query=INSERT INTO table FORMAT CSV
思考 因为都是千万级别的大表,所以不推荐csv导入,太慢了,我们测试的千万级别的表大概几分钟,可以接受
五 总结:
mysql和clickhouse的不同
1 clickhouse的压缩比远远优于mysql,尤其是对于千万级别的表
2 clickhouse是列存储,mysql是行存储
3 clickhouse最多支持插入和查询,不支持事物,适用于olap业务mysql支持事物和增删查改,适用于oltp业务
4 clickhouse是多线程查询,能利用多核心cpu,mysql是单线程查询,只能利用单核心CPU,前者比后者更加适合于大表的后台统计
5 clickhouse极大多数情况下都是顺序IO,mysql则不一定
mysql和clickhouse对应列
MySQL类型 ClickHouse 类型
tinyint UInt8 / Int8
smallint UInt16 / Int16
int UInt32
bigint UInt64 / Int64
float Float32
double Float64
datetime DateTime有可以表达的范围差异
timestamp DateTime
char Strimg
varchar String
除上述以外 String
六 附录
1 http://www.clickhouse.com.cn/ clickhouse中文社区
2 DBeaver 可视化工具
3 https://tech.jikelab.com/labs-docs/zh-cn/docs/intro/quickstart.html JDP集群平台