【大数据】如何将数据导入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的俩种方式
感谢您的阅读~