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. ...
随机推荐
- super 与 this 关键字
super与this用法相似: 1.普通的直接引用 2.形参与成员名字重名,用 this 来指代类本身,super指代父类 public class Students extends Person { ...
- day29:计算机网络概念
目录 1.网络开发的两大架构 2.网络概念 3.OSI七层模型 4.ARP协议 5.TCP三次握手和四次挥手 1.网络开发的两大架构 1.没有网络的时候,文件是如何传输的? 早期没有网络 a.py - ...
- 用Abp实现两步验证(Two-Factor Authentication,2FA)登录(二):Vue网页端开发
@ 目录 发送验证码 登录 退出登录 界面控件 获取用户信息功能 项目地址 前端代码的框架采用vue.js + elementUI 这套较为简单的方式实现,以及typescript语法更方便阅读. 首 ...
- 极简组调度-CGroup如何限制cpu
1. 说明 1> linux内核关于task调度这块是比较复杂的,流程也比较长,要从源码一一讲清楚很容易看晕,因此需要简化,抓住主要的一个点,抛开无关的部分才能讲清楚核心思想 2> 本篇文 ...
- linux syslog.d日记操作记录-小节
以下记录在学习LDD3时调试处理打印的一些操作 syslog 不同的发行版,不同的脚本文件,如fedora18中为rsyslog的名称 1:配置文件 /etc/syslog.conf(fedora r ...
- Python Requets库学习总结
快速开始 发送请求 >>> import requests >>> r = requests.get('https://api.github.com/events' ...
- python的format方法中文字符输出问题
format方法的介绍 前言 提示:本文仅介绍format方法的使用和中文的输出向左右和居中输出问题 一.format方法的使用 format方法一般可以解决中文居中输出问题,假如我们设定宽度,当中文 ...
- 【Linux】sed文本处理及软件管理
软件管理 1.编译安装http2.4,实现可以正常访问 安装编译相关工具包 root@mirror-centos8-p11 ~]# yum install gcc make autoconf apr- ...
- pgadmin数据输出不存在了?
菜单栏→文件→重置布局.这样数据输出就显示了.
- 2022-04-21:给定一个包含 [0,n) 中不重复整数的黑名单 blacklist, 写一个函数从 [0, n) 中返回一个不在 blacklist 中的随机整数, 对它进行优化使其尽量少调用系
2022-04-21:给定一个包含 [0,n) 中不重复整数的黑名单 blacklist, 写一个函数从 [0, n) 中返回一个不在 blacklist 中的随机整数, 对它进行优化使其尽量少调用系 ...