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. ...
随机推荐
- 随机分布和随机数生成——R语言
在人们的生活中,很多场景都需要用到随机数,例如福利彩票,车牌摇号,公共用房分配等.在用数学模型, 包括概率统计模型处理实际应用中的问题时, 我们希望建立的模型能够尽可能地符合实际情况.但是,实际情况是 ...
- [数据库/MySQL]解决异常:Data truncation: Truncated incorrect DOUBLE value: 'dc5'
1 场景复现 MySQL: 5.7.24-27 表结构 (两张独立的表) [表 RRR1] CREATE TABLE `RRR1` ( `R1` float NOT NULL COMMENT 'R1' ...
- [Linux]./configure | make | make install的工作过程与原理
经常使用的Linux编译/安装命令,有必要了解一下原理了. step1 ./configure 配置与编译前检查 通常由软件开发商编写一个检测程序(configure或config)来检测用户的操作环 ...
- [Java]排序算法>交换排序>【冒泡排序】(O(N*N)/稳定/N较小/有序/顺序+链式)
1 冒泡排序 1.1 算法思想 交换排序的基本思想:两两比较待排序记录的关键字,一旦发现2个记录不满足次序要求时,则:进行交换,直到整个序列全部满足要求为止. 1.2 算法特征 属于[交换排序] 冒泡 ...
- 【Diary】CSP-S 2020 游记
一年 好快 从三百多天倒计时 一点一点掂着 又回来了 但是时间永远不会等待你. --??? CSP-J1/S1 CSP-J1/S1 Day0 请了一上午假. 这段时间都在摸鱼,作业没写( 多备赛一个上 ...
- django中使用celery,模拟商品秒杀。
Celery是Python开发的简单.灵活可靠的.处理大量消息的分布式任务调度模块 安装: pip install celery # 安装celery库 pip install redis # cel ...
- CommunityToolkit.Mvvm8.1 消息通知(4)
本系列文章导航 https://www.cnblogs.com/aierong/p/17300066.html https://github.com/aierong/WpfDemo (自我Demo地址 ...
- MySQL(三)数据目录
目录 Mysql的主要目录结构 1 数据库文件的存放路径 /var/lib/mysql/ 2 相关命令目录 /usr/bin/mysql /usr/sbin/mysql 3 配置文件目录 /usr/s ...
- c/c++快乐算法第三天
c/c++感受算法快乐(3) 开始时间2023-04-16 22:21:10 结束时间2023-04-17 00:09:34 前言:很好,这周就要结束了,大家都回学校了么,嘻嘻.回顾一下昨天的算法题, ...
- 苞米豆的多数据源 → dynamic-datasource-spring-boot-starter,挺香的!
开心一刻 2023年元旦,我妈又开始了对我的念叨 妈:你到底想多少岁结婚 我:60 妈:60,你想找个多大的 我:找个55的啊,她55我60,结婚都有退休金,不用上班不用生孩子,不用买车买房,成天就是 ...