写点什么

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

  • 2023-06-26
    北京
  • 本文字数:1742 字

    阅读完需:约 6 分钟

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 集群:请到云管平台申请,请先预估好业务未来数据量,再去填写申请的容量配置;

  2. 创建数据库:


CREATE DATABASE IF NOT EXISTS new_database on cluster default;
复制代码


注意后面的 on cluster default;必须带上。


  1. 创建表:


根据实际表字段、表引擎编写 sql。参考:https://clickhouse.com/docs/zh/sql-reference/statements/create/table


  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 TABLEIF NOT EXISTS new_database.test_ck_01 ON CLUSTER default AS new_database.test_ck_01_localENGINE=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_01SELECT * 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 集群,从而实现数据的无缝迁移。


作者:京东物流 刘邓忠

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

发布于: 刚刚阅读数: 2
用户头像

拥抱技术,与开发者携手创造未来! 2018-11-20 加入

我们将持续为人工智能、大数据、云计算、物联网等相关领域的开发者,提供技术干货、行业技术内容、技术落地实践等文章内容。京东云开发者社区官方网站【https://developer.jdcloud.com/】,欢迎大家来玩

评论

发布
暂无评论
ClickHouse数据表迁移实战之-remote方式 | 京东云技术团队_Clickhouse_京东科技开发者_InfoQ写作社区