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. ...
随机推荐
- 逍遥自在学C语言 | 逻辑运算符
前言 一.人物简介 第一位闪亮登场,有请今后会一直教我们C语言的老师 -- 自在. 第二位上场的是和我们一起学习的小白程序猿 -- 逍遥. 二.构成和表示方式 逻辑运算符是用来比较和操作布尔值的运算符 ...
- [Linux]ln:软链接与硬链接
1 硬链接与软链接的[语法] 软链接:ln -s 源文件 目标文件 硬链接:ln 源文件 目标文件 [-s : symbolic,符号/代号] 2 软链接/硬链接的[比喻] / (编辑)同步性 [ro ...
- day134:2RenMJ:TypeScript的抽象类&装饰器&命名空间&模块&编译配置文件&python中的类型注解
目录 1.抽象类 2.装饰器 3.命名空间 4.模块 5.编译配置文件 6.python的类型注解 1.抽象类 抽象类(abstract class)做为其它派生类的基类使用. 它们一般不会直接被实例 ...
- Ubuntu上Git的简单配置及使用(使用的代码托管平台为gitee码云)
目录 1.关于gitee 2.Ubuntu下Git的下载及配置 3.使用Git连接到远程的Gitee仓库 4.常用命令 1.关于gitee Gitee(码云) 是 OSCHINA.NET 推出的代码托 ...
- RDIFramework.NET开发框架编码管理助力业务编码的自动处理
1.概述 几乎每一个企业应用中不可避免的都会涉及到业务编码规则的问题,比如订单管理中的订单编号,商品管理中的商品编码,项目管理中的项目编码等等,针对这一系列的编码如果直接写在程序中,不仅复杂,代码重复 ...
- MIT6.824 Distributed-System(Lab1)-MapReduce
Lab address: http://nil.csail.mit.edu/6.824/2020/labs/lab-mr.html paper: MapReduce: Simplified Data ...
- 【LeetCode动态规划#13】买卖股票含冷冻期(状态众多,比较繁琐)、含手续费
最佳买卖股票时机含冷冻期 力扣题目链接(opens new window) 给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 . 设计一个算法计算出最大利润.在满足以下约束条件下,你可以 ...
- 【机器学习与深度学习理论要点】26.请列举AlexNet的特点
请列举AlexNet的特点 使用ReLU作为激活函数,并验证其效果在较深的网络超过了Sigmoid,成功解决了sigmoid在网络较深时梯度消失问题 使用dropout(丢弃学习)随机忽略一部分神经元 ...
- 一个WPF开发的、界面简洁漂亮的音频播放器
今天推荐一个界面简洁.美观的.支持国际化开源音频播放器. 项目简介 这是一个基于C# + WPF开发的,界面外观简洁大方,操作体验良好的音频播放器. 支持各种音频格式,包括:MP4.WMA.OGG.F ...
- 在Winform分页控件中集成保存用户列表显示字段及宽度调整设置
在Winform的分页控件里面,我们提供了很多丰富的功能,如常规分页,中文转义.导出Excel.导出PDF等,基于DevExpress的样式的分页控件,我们在其上面做了不少封装,以便更好的使用,其中就 ...