【大数据】如何将数据导入ClickHouse?

最近在研究如何提升InfluxDB+Grafana的查询速度,因为随着数据量的上涨,查询速度逐渐变慢,采用了连续查询,也没有得到明显的效果,其实单从数据量上,采用连续查询,按道理是可以得到很好的效果的,但鉴于我们的索引也是比较多大(经查资料,InfluxDB的series不超过100000,是不会影响InfluxDB的查询性能的,然后我看我们的series已经达到了300000以上),而这些索引又是必须的,所以一直也没有在这个的基础上得到更好的解决方案,所以想着换条路走走,那就是ClickHouse,当然如果您有更好的解决方案,希望可以不吝赐教。

因为想要看看ClickHouse的效果,那就需要数据来测试测试,我们的数据都在InfluxDB中,如何将InfluxDB的数据导入到ClickHouse呢?ClickHouse官方文档是支持Mysql数据直接导入到ClickHouse的,并没有支持InfluxDB,那我们想到的方案就是先将InfluxDB数据导出到MySQL中,然后再导到ClickHouse中,当然还有一种方案就是不经过MySQL,直接将InfluxDB数据导入到ClickHouse中

一、Mysql数据导入ClickHouse

1、导出InfluxDB的数据

使用InfluxDB客户端,导出数据,导出csv文件

 ./influx -host 'xxx' -port '8086' -database 'xxx' -username 'xxx' -password 'xxx' -precision 'rfc3339' -execute 'select * from "xxx"' -format 'csv' >> /data/test/xxx.csv

2、导入到Mysql

这里展示从MySQL Workbench中导入
(1)找到导入入口,Table Data Import Wizard
在这里插入图片描述
(2)选择要导入的csv文件,一直next就可以的(当然,如果在next过程中你有自己想修改的也可自行修改)
在这里插入图片描述

3、导入到ClickHouse

从Mysql导到ClickHouse有俩种方式

(1)外连表的方式

这种方式,一旦简历连接,Mysql对应库下数据直接同步到ClickHouse中,不管是新增数据还是新增表,ClickHouse中也会相应得到改变,Mysql依然承担的数据分析工作

CREATE DATABASE IF NOT EXISTS xxx ENGINE = MySQL('xxx:3306','database_name', 'username', 'password')

官方文档:https://clickhouse.tech/docs/en/engines/database-engines/mysql/

(2)物化表的方式

MaterializedMySQL引擎,是通过binlog日志实时物化Mysql数据,提升了查询性能和数据同步的时效性,ClickHouse负责数据分析工作 ,这么做可降低Mysql的负载

CREATE DATABASE IF NOT EXISTS xxx ENGINE = MaterializedMySQL('xxx:3306','database_name', 'username', 'password')

注意:这里有一个版本引发的问题,一定要注意ClickHouse中版本21.9是MaterializedMySQL,但之前的版本是MaterializeMySQL

官方文档:https://clickhouse.tech/docs/en/engines/database-engines/materialized-mysql/

写到这里,虽然我的目的是将InfluxDB的数据导入到ClickHouse,如果您只是将Mysql数据导到ClickHouse,那就直接采用第三步就可以了

二、csv文件ClickHouse

从第一种方案得到,导出InfluxDB数据是一个csv文件,那么我们可否直接将csv文件导入到ClickHouse呢?答案是肯定的,而且个人还是更喜欢这种方式的,因为从csv文件直接导入ClickHouse,速度更快,而且也是比较容易的

1、导出InfluxDB的数据

使用InfluxDB客户端,导出数据,导出csv文件

 ./influx -host 'xxx' -port '8086' -database 'xxx' -username 'xxx' -password 'xxx' -precision 'rfc3339' -execute 'select * from "xxx"' -format 'csv' >> /data/test/xxx.csv

2、导入到ClickHouse

将csv文件数据直接导入到ClickHouse,在这里,如果ClickHouse中没有对应的表,是需要提前建好表的,表的字段要和导入数据的字段一一对应,按书序对应的

clickhouse-client -h xxx --database="xxx" --query="insert into database_name.table_name FORMAT CSV" < /data/test/xxx.csv

以上,就是将其他数据源的数据导入到ClickHouse的俩种方式
感谢您的阅读~