Clickhouse分布式表初体验

ops/2024/10/20 11:01:27/

ClickHouse的分布式表是一种特殊类型的表,它允许你跨多个节点进行数据的查询和写入操作。以下是创建分布式表的步骤和案例:

1. 创建本地表:
   在集群的每个节点上创建一个本地表,可以使用`ReplicatedMergeTree`系列引擎来实现数据的复制。例如: 

CREATE TABLE city_local (`fdate` Int64,`city_code` Int32,`city_name` String,`total_cnt` Int64
) ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/city_local', '{replica}')
PARTITION BY fdate
ORDER BY (fdate, city_code, city_name)
SETTINGS index_granularity = 8192, storage_policy = 'ssd_to_hdd';

   这里`{shard}`和`{replica}`是集群配置中的占位符,用于指定分片和副本信息。

2. 创建分布式表:
   使用`Distributed`引擎创建一个分布式表,它不会存储数据,而是将查询和写入操作代理到本地表。例如:
  

CREATE TABLE city_all ON CLUSTER ck_cluster_name AS city_local
ENGINE = Distributed(ck_cluster_name, 'test_db', 'city_local', rand());

   这里`ck_cluster_name`是集群名称,`test_db`是数据库名称,`city_local`是本地表名称,`rand()`是一个分片键,用于数据的随机分布。

3. 插入数据:
   可以直接向分布式表插入数据,ClickHouse会将数据分发到对应的本地表。例如:
  

INSERT INTO city_all (fdate, city_code, city_name, total_cnt) VALUES (20210131, 4000, 'guangzhou', 420000);

   数据会被写入到对应的本地表中。

4. 查询分布式表:
   查询分布式表时,ClickHouse会在所有分片上执行查询并将结果合并。例如:
 

SELECT * FROM city_all;

   这会返回所有分片上的`city_all`表的数据。

5. 更新和删除操作:
   分布式表本身不支持直接的`UPDATE`和`DELETE`操作,这些操作需要在本地表上执行。例如:
 

ALTER TABLE city_local ON CLUSTER ck_cluster_name UPDATE total_cnt = 3333 WHERE city_name = 'foshan';
ALTER TABLE city_local ON CLUSTER ck_cluster_name DELETE WHERE city_name = 'foshan';

   这些操作会应用到集群中的所有本地表。

6. 添加字段:
   可以为本地表添加新字段,并且这个变化会自动反映到分布式表上。例如:

ALTER TABLE city_local ON CLUSTER ck_cluster_name ADD COLUMN history Int32;

   添加字段后,新插入的数据会包含这个新字段。

7. 删除表:
   删除分布式表或本地表时,需要指定集群名称。例如:
 

DROP TABLE city_all ON CLUSTER ck_cluster_name;
DROP TABLE city_local ON CLUSTER ck_cluster_name;

   这会删除集群中的相应表。

以上步骤和示例展示了如何在ClickHouse中创建和使用分布式表。需要注意的是,分布式表的写入操作默认是异步的,可能会在短时间内造成数据的不一致性。因此,在生产环境中,通常建议直接写入本地表,而从分布式表进行读取操作。
 


http://www.ppmy.cn/ops/119785.html

相关文章

电脑录屏怎么录视频和声音?苹果macOS、windows10都可以用的原神录屏工具来啦

在当今数字化时代,电脑录屏已经成为一项非常实用的技能,无论是制作教学视频、记录游戏精彩瞬间,还是进行线上会议演示,都离不开高质量的录屏。那么,电脑录屏怎么录视频和声音呢?今天就为大家详细介绍一下&a…

【数据库】 MongoDB 查看当前用户的角色和权限

在 MongoDB 中,可以通过一些简单的命令查看当前用户的角色和权限。这对于理解用户的访问能力和管理用户权限至关重要。 1. 使用 MongoDB Shell 查看角色和权限 1.1 查看当前数据库用户 要查看当前数据库中的所有用户及其角色,可以使用以下命令&#x…

带你0到1之QT编程:二十二、QChart类图表及折线图、直方图、饼图的三大可视化图表实战!

此为QT编程的第二十二谈!关注我,带你快速学习QT编程的学习路线! 每一篇的技术点都是很很重要!很重要!很重要!但不冗余! 我们通常采取总-分-总和生活化的讲解方式来阐述一个知识点!…

达梦8-DTS迁移测试-从Oracle迁移到达梦

1、目的 将Oracle数据库的SCOTT用户下的表迁移到达梦8。 2、数据库信息 2.1 Oracle端 操作系统 Redhat 7.5 数据库架构 单机 数据库版本 Oracle 19c 待迁移数据库名 prodpdb 待迁移的对象 SCOTT IP/端口 192.168.6.121:1521 用户名/密码 scott/tiger 字符集编…

VIIRS 版本1(5000)数据于2024年6月17日停更,请转向VIIRS版本2(5200)

根据官网发布的消息,VIIRS版本1(5000)的多数数据产品于今日停止更新。需要VIIRS数据的朋友需要转向版本2数据了。 可见红外成像辐射计套件 (VIIRS) 第 1 版 (集合 1) 陆地数据产品于 2024 年 6 月 17 日终止生产。唯一的例外是双向反射分布函…

在Ubuntu 14.04上安装带SSL的Webmin的方法

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 简介 Webmin 是一个基于 Web 的类 Unix 系统管理工具。它提供了一个简单的替代方案来进行命令行系统管理,并可以通过提供的…

力扣(leetcode)每日一题 2207 字符串中最多数目的子序列

题干 2207. 字符串中最多数目的子序列 给你一个下标从 0 开始的字符串 text 和另一个下标从 0 开始且长度为 2 的字符串 pattern ,两者都只包含小写英文字母。 你可以在 text 中任意位置插入 一个 字符,这个插入的字符必须是 pattern[0] 或者 pattern…

linux系统解压zip文件名乱码

这是 zip 格式本身的缺陷导致的。zip 格式并没有指定文件名的编码格式,在压缩和解压时均使用操作系统本地编码,Windows 下简体中文为 GBK/GB2312 编码,Linux 下为 UTF-8 编码,两者不一致就造成了乱码。 解决方案: 如…