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 步骤
-
创建新clickhouse集群:请到云管平台申请,请先预估好业务未来数据量,再去填写申请的容量配置;
-
创建数据库:
CREATE DATABASE IF NOT EXISTS new_database on cluster default;
注意后面的on cluster default;必须带上。
- 创建表:
根据实际表字段、表引擎编写sql。参考:https://clickhouse.com/docs/zh/sql-reference/statements/create/table
- 建立测试表
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());
- 写入测试数据:
在原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')
- 测试迁移命令:
INSERT INTO new_database.test_ck_01 SELECT * from remote('老集群地址',old_database.test_ck_01,'user','password')
- 正式迁移步骤如下:
•提前修改代码里的clickhouse地址,替换新地址;
•通知大数据实时负责人停止flink等写入任务;
•进行数据迁移到新ClickHouse集群(参考以上迁移语句);
•通知大数据实时负责人开启flink等写入任务;
•验证数据是否同步到新ClickHouse集群;
•在灰度或预发环境部署或重启,通过代码调用查询新ClickHouse集群看是否正常。
- 迁移语句:(在目标clickhouse集群客户端内执行)
INSERT INTO new_database.待迁移的数据表 SELECT * from remote('老集群地址',old_database.老数据表,'user','password')
- 验证表数据量是否一致:
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集群,从而实现数据的无缝迁移。
作者:京东物流 刘邓忠
内容来源:京东云开发者社区

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
h2database BTree 设计实现与查询优化思考 | 京东云技术团队
h2database 是使用Java 编写的开源数据库,兼容ANSI-SQL89,既实现了常规基于 BTree 的存储引擎,又支持日志结构存储引擎。功能非常丰富(死锁检测机制、事务特性、MVCC、运维工具等),数据库学习非常好的案例。 本文理论结合实践,通过BTree 索引的设计和实现,更好的理解数据库索引相关的知识点以及优化原理。 BTree 实现类 h2database 默认使用的 MVStore 存储引擎,如果要使用 基于 BTree 的存储引擎,需要特别指定(如下示例代码 jdbcUrl)。 以下是常规存储引擎(BTree 结构) 相关的关键类。 org.h2.table.RegularTable org.h2.index.PageBtreeIndex(SQL Index 本体实现) org.h2.store.PageStore(存储层,对接逻辑层和文件系统) BTree 的数据结构可以从网上查到详细的描述和讲解,不做过多赘述。 需要特别说明的是:PageStore。我们数据查询和优化关键的缓存、磁盘读取、undo log都是由 PageStore 完成。可以看到详细的文档和完...
- 下一篇
从2PC和容错共识算法讨论zookeeper中的Create请求 | 京东云技术团队
最近在读《数据密集型应用系统设计》,其中谈到了zookeeper对容错共识算法的应用。这让我想到之前参考的zookeeper学习资料中,误将容错共识算法写成了2PC(两阶段提交协议),所以准备以此文对共识算法和2PC做梳理和区分,也希望它能帮助像我一样对这两者有误解的同学。 1. 2PC(两阶段提交协议) 两阶段提交 (two-phase commit) 协议是一种用于实现跨多个节点的原子事务(分布式事务)提交的算法。它能确保所有节点提交或所有节点中止,并在某些数据库内部使用,也以XA事务的形式在分布式服务中使用。 在 Java EE 中,XA事务使用 JTA(Java Transaction API) 实现。 2PC的实现 2PC包含准备阶段和提交阶段两个阶段,需要借助协调者(事务管理器,如阿里巴巴的Seata) 来实现,参与分布式事务的数据库节点为参与者。当分布式服务中的节点准备提交时,协调者开始准备阶段:发送一个准备请求到每个节点,询问它们是否能够提交,然后协调者会跟踪参与者的响应 如果所有参与者都回答"是",表示它们已经准备好提交,那么协调者在提交阶段发出提交请求,分布式事务提...
相关文章
文章评论
共有0条评论来说两句吧...