乐趣区

关于clickhouse:ClickHouse数据表迁移实战之remote方式-京东云技术团队

1 引言

ClickHouse 是一个用于联机剖析 (OLAP) 的列式数据库管理系统(DBMS)。咱们外部很多的报表、数据看板都基于它进行开发。明天为大家带来 remote 形式的 ClickHouse 数据表迁徙的残缺过程介绍,如有谬误,还请各位大佬斧正。

以下 sql 语句为测试应用,如需应用请依据理论状况批改。

2 背景

咱们应用的是京东云提供的分布式数据库 JCHDB,原 ClickHouse 是两个部门共用的,因波及相干业务、治理及费用划分等问题,需进行 ClickHouse 集群的拆散。原 ClickHouse 面蕴含表有:业务 A 订单表与业务 B 大屏数据表;拆分后须要将业务 B 的大屏数据表迁徙到新 ClickHouse 集群中去。

3 迁徙形式

经查阅,迁徙形式有如下几种:

1. 通过 remote 函数进行数据迁徙

2. 通过文件导出导入形式进行数据迁徙

3. 通过 CSV 文件导出导入

4. 通过 Linux pipe 管道进行流式导出导入

通过与云 JCHDB 负责运维共事沟通及调研,因数据量目前不大,比拟适宜采纳 remote 形式进行迁徙,留神 remote 应用的前提要求即可。如果数量过大请参考其余迁徙形式。

remote 形式应用前,请减少 max_partitions_per_insert_block 参数值,防止语句执行失败,示例报如下谬误:

报错:Too many partitions for single INSERT block (more than 100). The limit is controlled by 'max_partitions_per_insert_block' setting

起因:clickhouse 要求每次写入的数据不能逾越特地多的 partitions,具体受参数 max_partitions_per_insert_block 管制,调整该参数即可。

4 步骤

  1. 创立新 clickhouse 集群:请到云管平台申请,请先预估好业务将来数据量,再去填写申请的容量配置;
  1. 创立数据库:
CREATE DATABASE IF NOT EXISTS new_database on cluster default;

留神前面的 on cluster default; 必须带上。

  1. 创立表:

依据理论表字段、表引擎编写 sql。参考:https://clickhouse.com/docs/zh/sql-reference/statements/creat…

  1. 建设测试表
CREATE TABLE 
IF NOT EXISTS new_database.test_ck_01_local ON CLUSTER default
( 
    id String COMMENT '随机主键',
    dt Date COMMENT '分区字段'
) 
ENGINE = ReplicatedReplacingMergeTree
('/clickhouse/new_database/tables/{shard}/test_ck_01_local', '{replica}')
PARTITION BY toYYYYMMDD
(dt) 
ORDER BY id;

CREATE TABLE
IF NOT EXISTS new_database.test_ck_01 ON CLUSTER default AS new_database.test_ck_01_local
ENGINE=Distributed(default, new_database, test_ck_01_local, rand());
  1. 写入测试数据:
在原 clickhouse 里执行写入数据语句:INSERT INTO old_database.test_ck_01 values('1',NOW());
INSERT INTO old_database.test_ck_01 values('2',NOW());
依据理论状况多些一些数据即可。从新 ClickHouse 集群客户端里执行查问语句:(如不胜利阐明网络不通)SELECT * from 
remote('老集群地址',old_database.test_ck_01,'user','password')
  1. 测试迁徙命令:
INSERT INTO new_database.test_ck_01
SELECT * from 
remote('老集群地址',old_database.test_ck_01,'user','password')
  1. 正式迁徙步骤如下:

•提前批改代码里的 clickhouse 地址,替换新地址;

•告诉大数据实时负责人进行 flink 等写入工作;

•进行数据迁徙到新 ClickHouse 集群(参考以上迁徙语句);

•告诉大数据实时负责人开启 flink 等写入工作;

•验证数据是否同步到新 ClickHouse 集群;

•在灰度或预发环境部署或重启,通过代码调用查问新 ClickHouse 集群看是否失常。

  1. 迁徙语句:(在指标 clickhouse 集群客户端内执行)
INSERT INTO new_database. 待迁徙的数据表
SELECT * from 
remote('老集群地址',old_database. 老数据表,'user','password')
  1. 验证表数据量是否统一:
SELECT COUNT(1) from 待迁徙的数据表 final

留神: 迁徙实现后数据量可能不统一,请应用 final 合并查问,会把反复的数据条目进行合并。

5 参考

官网文档:https://clickhouse.com/docs/zh

京东云 clickhouse 学习:https://docs.jdcloud.com/cn/jchdb/product-overview

remote 应用:https://blog.csdn.net/u010180815/article/details/115070235

6 总结

以上就是应用 remote 形式进行 ClickHouse 数据表迁徙的实战操作。通过这种形式,咱们能够将数据表从一个 ClickHouse 集群迁徙到另一个 ClickHouse 集群,从而实现数据的无缝迁徙。

作者:京东物流 刘邓忠

内容起源:京东云开发者社区

退出移动版