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集群,从而实现数据的无缝迁移。
作者:京东物流 刘邓忠
内容来源:京东云开发者社区
ClickHouse数据表迁移实战之-remote方式的更多相关文章
- 从SQL Server到MySQL,近百亿数据量迁移实战
从SQL Server到MySQL,近百亿数据量迁移实战 狄敬超(3D) 2018-05-29 10:52:48 212 沪江成立于 2001 年,作为较早期的教育学习网站,当时技术选型范围并不大:J ...
- Flyway数据表迁移框架的使用
目录 1. 概述 2. Maven配置 3. SQL文件规范 4. 命令 5. 总结 1. 概述 Flyway是一个根据表结构快速生成数据表的工具,类似于Hibernate的自动生成表的特性. 官网: ...
- 使用navicat进行数据表迁移
使用navicat进行数据和表迁移只需要复制,粘贴就可以实现.
- 针对数据量较大的表,需要进行跨库复制,采用navcat 实现sqlite数据库跨数据库的数据表迁移 [转载]
2014年12月13日 14:36 新浪博客 (转自http://www.cnblogs.com/nmj1986/archive/2012/09/17/2688827.html) 需求: 有两个不同的 ...
- MySQL约束和修改数据表知识集结
一.约束 划分标准:功能.数据列的数目 功能: (1)NOT NULL(非空约束) (2)PRIMARY KEY(主键约束) (3)UNIQUE(唯一约束) (4)DEFAULT(默认约束) (5)F ...
- 第1节 IMPALA:10、基本查询语法;11、数据加载的4种方式
9.3. 创建数据库表 创建student表 CREATE TABLE IF NOT EXISTS mydb1.student (name STRING, age INT, contact INT ) ...
- 数据迁移实战:基于Kettle的Mysql到DB2的数据迁移
From:https://my.oschina.net/simpleton/blog/525675 一.什么是ETL ETL,是英文 Extract-Transform-Load 的缩写,用来描述将数 ...
- MySQL-线上数据迁移实战记录
1. 迁移背景和限制条件 随着功能的迭代或者数据表中数据量的增加,将现有数据进行迁移已是工作中经常遇到的事情.通常我们在平时迁移数据数据的时候,只需要用mysqldump.mysqlimport指令就 ...
- Oracle数据逻辑迁移综合实战篇
本文适合迁移大量表和数据的复杂需求. 如果你的需求只是简单的迁移少量表,可直接参考这两篇文章即可完成需求: Oracle简单常用的数据泵导出导入(expdp/impdp)命令举例(上) Oracle简 ...
- 以对象的方式来访问xml数据表(三)
怎样以对象的方式来访问xml数据表? 在讲如何具体实现(二)中所说的专门用于访问xml文件的动态链接库之前,我们先来看看这个动态链接库具体要实现什么功能. 动态链接库IXmlDB.dll的功能: 1. ...
随机推荐
- python入门教程之二十三Python3 MySQL 数据库连接 - PyMySQL 驱动
MySQL 是最流行的关系型数据库管理系统,如果你不熟悉 MySQL,可以阅读我们的 MySQL 教程. 本章节我们为大家介绍使用 mysql-connector 来连接使用 MySQL, mysql ...
- 一文讲透 Redis 事务 (事务模式 VS Lua 脚本)
准确的讲,Redis 事务包含两种模式 : 事务模式 和 Lua 脚本. 先说结论: Redis 的事务模式具备如下特点: 保证隔离性: 无法保证持久性: 具备了一定的原子性,但不支持回滚: 一致性的 ...
- 非关系型数据库---Redis安装与基本使用
一.数据库类型 关系数据库管理系统(RDBMS) 非关系数据库管理系统(NoSQL) 按照预先设置的组织机构,将数据存储在物理介质上(即:硬盘上) 数据之间可以做无关联操作 (例如: 多表查询,嵌套查 ...
- Albert理论详解:用矩阵分解与跨层参数共享减少参数量
1.介绍 Albert是Bert的一个变种,它在Bert的基础上减少了参数量,使整个模型更加的"轻量化",同时也保持了Bert的性能,但值得注意的是,Albert虽然显著地减少了参 ...
- 深入理解python虚拟机:黑科技的幕后英雄——描述器
深入理解python虚拟机:黑科技的幕后英雄--描述器 在本篇文章当中主要给大家介绍一个我们在使用类的时候经常使用但是却很少在意的黑科技--描述器,在本篇文章当中主要分析描述器的原理,以及介绍使用描述 ...
- 2023-05-09:石子游戏中,爱丽丝和鲍勃轮流进行自己的回合,爱丽丝先开始 。 有 n 块石子排成一排。 每个玩家的回合中,可以从行中 移除 最左边的石头或最右边的石头, 并获得与该行中剩余石头值
2023-05-09:石子游戏中,爱丽丝和鲍勃轮流进行自己的回合,爱丽丝先开始 . 有 n 块石子排成一排. 每个玩家的回合中,可以从行中 移除 最左边的石头或最右边的石头, 并获得与该行中剩余石头值 ...
- 2022-10-08:以下go语言代码输出什么?A、0 0;B、0 4;C:4 0;D:4 4。 package main const s = “Go101.org“ // len(s) == 9
2022-10-08:以下go语言代码输出什么?A.0 0:B.0 4:C:4 0:D:4 4. package main const s = "Go101.org" // len ...
- 2021-06-18:已知数组arr,生成一个数组out,out的每个元素必须大于等于1,当arr[cur]>arr[cur-1]时,out[cur]>out[cur-1];当arr[cur]>arr
2021-06-18:已知数组arr,生成一个数组out,out的每个元素必须大于等于1,当arr[cur]>arr[cur-1]时,out[cur]>out[cur-1]:当arr[cu ...
- 2021-10-08:填充每个节点的下一个右侧节点指针。给定一个 完美二叉树 ,其所有叶子节点都在同一层,每个父节点都有两个子节点。填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找
2021-10-08:填充每个节点的下一个右侧节点指针.给定一个 完美二叉树 ,其所有叶子节点都在同一层,每个父节点都有两个子节点.填充它的每个 next 指针,让这个指针指向其下一个右侧节点.如果找 ...
- 在 ASP.NET Core Web API 中处理 Patch 请求
一.概述 PUT 和 PATCH 方法用于更新现有资源. 它们之间的区别是,PUT 会替换整个资源,而 PATCH 仅指定更改. 在 ASP.NET Core Web API 中,由于 C# 是一种静 ...