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 步骤

  1. 创建新clickhouse集群:请到云管平台申请,请先预估好业务未来数据量,再去填写申请的容量配置;

  2. 创建数据库:

CREATE DATABASE IF NOT EXISTS new_database on cluster default;

注意后面的on cluster default;必须带上。

  1. 创建表:

根据实际表字段、表引擎编写sql。参考:https://clickhouse.com/docs/zh/sql-reference/statements/create/table

  1. 建立测试表
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());
  1. 写入测试数据:
在原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')
  1. 测试迁移命令:
INSERT INTO new_database.test_ck_01
SELECT * from
remote('老集群地址',old_database.test_ck_01,'user','password')
  1. 正式迁移步骤如下:

•提前修改代码里的clickhouse地址,替换新地址;

•通知大数据实时负责人停止flink等写入任务;

•进行数据迁移到新ClickHouse集群(参考以上迁移语句);

•通知大数据实时负责人开启flink等写入任务;

•验证数据是否同步到新ClickHouse集群;

•在灰度或预发环境部署或重启,通过代码调用查询新ClickHouse集群看是否正常。

  1. 迁移语句:(在目标clickhouse集群客户端内执行)
INSERT INTO new_database.待迁移的数据表
SELECT * from
remote('老集群地址',old_database.老数据表,'user','password')
  1. 验证表数据量是否一致:
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方式的更多相关文章

  1. 从SQL Server到MySQL,近百亿数据量迁移实战

    从SQL Server到MySQL,近百亿数据量迁移实战 狄敬超(3D) 2018-05-29 10:52:48 212 沪江成立于 2001 年,作为较早期的教育学习网站,当时技术选型范围并不大:J ...

  2. Flyway数据表迁移框架的使用

    目录 1. 概述 2. Maven配置 3. SQL文件规范 4. 命令 5. 总结 1. 概述 Flyway是一个根据表结构快速生成数据表的工具,类似于Hibernate的自动生成表的特性. 官网: ...

  3. 使用navicat进行数据表迁移

    使用navicat进行数据和表迁移只需要复制,粘贴就可以实现.

  4. 针对数据量较大的表,需要进行跨库复制,采用navcat 实现sqlite数据库跨数据库的数据表迁移 [转载]

    2014年12月13日 14:36 新浪博客 (转自http://www.cnblogs.com/nmj1986/archive/2012/09/17/2688827.html) 需求: 有两个不同的 ...

  5. MySQL约束和修改数据表知识集结

    一.约束 划分标准:功能.数据列的数目 功能: (1)NOT NULL(非空约束) (2)PRIMARY KEY(主键约束) (3)UNIQUE(唯一约束) (4)DEFAULT(默认约束) (5)F ...

  6. 第1节 IMPALA:10、基本查询语法;11、数据加载的4种方式

    9.3. 创建数据库表 创建student表 CREATE TABLE IF NOT EXISTS mydb1.student (name STRING, age INT, contact INT ) ...

  7. 数据迁移实战:基于Kettle的Mysql到DB2的数据迁移

    From:https://my.oschina.net/simpleton/blog/525675 一.什么是ETL ETL,是英文 Extract-Transform-Load 的缩写,用来描述将数 ...

  8. MySQL-线上数据迁移实战记录

    1. 迁移背景和限制条件 随着功能的迭代或者数据表中数据量的增加,将现有数据进行迁移已是工作中经常遇到的事情.通常我们在平时迁移数据数据的时候,只需要用mysqldump.mysqlimport指令就 ...

  9. Oracle数据逻辑迁移综合实战篇

    本文适合迁移大量表和数据的复杂需求. 如果你的需求只是简单的迁移少量表,可直接参考这两篇文章即可完成需求: Oracle简单常用的数据泵导出导入(expdp/impdp)命令举例(上) Oracle简 ...

  10. 以对象的方式来访问xml数据表(三)

    怎样以对象的方式来访问xml数据表? 在讲如何具体实现(二)中所说的专门用于访问xml文件的动态链接库之前,我们先来看看这个动态链接库具体要实现什么功能. 动态链接库IXmlDB.dll的功能: 1. ...

随机推荐

  1. 方差分析1—单因素方差分析(R语言)

    方差分析是由英国著名统计学家:R.A.Fisher推导,也叫F检验,用于多个样本间均数的比较(分析类别变量.有序变量).当包含的因子是解释变量时,关注的重点通常会从预测转向组别差异的分析.方差分析是一 ...

  2. 投资组合计算分析——R语言

    "投资组合"是指金融资产(如股票.债券和现金)的任何组合.投资组合有很多类型,包括市场投资组合和零投资投资组合.可以使用以下任何一种投资方法和原则来管理投资组合的资产分配:股息加权 ...

  3. 痞子衡嵌入式:利用i.MXRT1xxx系列ROM集成的DCD功能可轻松配置指定外设

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是利用i.MXRT1xxx系列ROM集成的DCD功能可轻松配置指定外设. 关于 i.MXRT1xxx 系列芯片 BootROM 中集成的 ...

  4. Python常见部分内置方法与操作

    Python常见内置方法与操作 整型int 类型转换 int(其它数据类型),但只支持数字类型和小数类型 >>> num1 = input('Your age>>> ...

  5. pandas之聚合函数

    在<Python Pandas窗口函数>一节,我们重点介绍了窗口函数.我们知道,窗口函数可以与聚合函数一起使用,聚合函数指的是对一组数据求总和.最大值.最小值以及平均值的操作,本节重点讲解 ...

  6. [SpringBoot]Spring Boot Framework @ Environment / ApplicationContext & SpringApplication

    [#]: 表示较为重要 1 Spring Boot Overview SpringBoot是一个快速开发框架,快速的将一些常用的第三方依赖整合(原理:通过Maven子父工程的方式),简化XML配置,全 ...

  7. Golang 常用库之jwt-go

    本文地址 https://www.cnblogs.com/zichliang/p/17303759.html github地址:https://github.com/dgrijalva/jwt-go ...

  8. 简单的了解下 Fetch API 的工作原理

    一.简介 Fetch API是一种现代的Web API,提供了一种异步获取网络资源的方法.由于其简单性.灵活性和一致性,它已经成为Web应用程序中获取数据和资源的流行选择.在本文中,我们将深入探讨Fe ...

  9. CSS页面布局方式

    css页面布局方式 1.标准流 <!DOCTYPE html> <html lang="en"> <head> <meta charset ...

  10. 从零开始基于Archlinux 安装 containerd + k8s

    下载ISO文件:https://mirrors.tuna.tsinghua.edu.cn/archlinux/iso/latest/ 目录 1. 准备工作 2. 磁盘管理 2.1 磁盘分区 2.2 磁 ...