系统运维系列 之Clickhouse数据库学习集锦(增删改查操作)

Posted 琅晓琳

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了系统运维系列 之Clickhouse数据库学习集锦(增删改查操作)相关的知识,希望对你有一定的参考价值。

1 简介
本篇内容涉及一些增删改查操作,包括数据库、表,重点介绍字段的增加/删除操作,其中包含的内容均实际测试通过。

2 Clickhouse
clickhouse是一款MPP架构的列式存储数据库,它拥有完备的管理功能,所以它称得上是一个DBMS,而不仅仅是一个数据库。它具备了如下的基本功能:
(1) DDL:可以动态创建、修改或者删除数据库、表、视图,无需重启服务;
(2) DML:可以动态查询、插入、修改或者删除数据;
(3) 权限控制:可以按照用户粒度设置数据库或者表的操作权限,保障数据的安全性;
(4) 数据备份和恢复:提供了数据备份导出与导入恢复机制,满足生产环境的要求;
(5) 分布式管理:提供集群模式,能够自动管理多个数据库节点。

3 各种操作

--建数据库
create database <数据库名> on cluster <集群名>

--建表操作
--集群建表方式
--这里的perftest_3shards_1replicas指的是3分片1副本
--分片(shard) 是指不同的服务器存储同一张表的不同部分,作用是为了水平切分表,缓解单一服务的压力
--副本(replica) 是指两个相同数据的表或表一部分,作用是为了数据备份与安全
--分片对应的是分布式计算的能力,副本对应的是高可用性
--配置方式:
----在所有ClickHouse节点上,找到remote_servers配置项追加perftest_3shards_1replicas配置。注意所有节点都需要配置
----vi /etc/clickhouse-server/config.xml
----重启ClickHouse systemctl restart clickhouse-server
--index_granularity:
----表示索引的粒度,索引粒度对MergeTree而言是一个非常重要的概念,索引粒度就如同标尺一般,会丈量整个数据的长度
----依照刻度对数据进行标注,最终将数据标记成多个间隔的小段
----数据以index_granularity的粒度(默认8192)被标记成多个小的区间,其中每个区间最多8192行数据
----在新版本中,ClickHouse提供了自适应粒度大小的特性,默认为8192
CREATE TABLE test.testtable ON CLUSTER perftest_3shards_1replicas
(
	`id` UInt8,  
	`datetime` DateTime,
	`name` String,
	`sex` String,
	`grade` Nullable(Float64)
) 
ENGINE = ReplicatedMergeTree('/clickhouse/layer/tables/shard/testtable', 'shard-shard-replica') 
PARTITION BY toYYYYMMDD(datetime) 
PRIMARY KEY name
ORDER BY id
SETTINGS index_granularity = 8192

--删除表操作
--注意:删除表和创建表一样,必须使用集群的方法。不然只会删除本机的表,而副本中的表依然存在
DROP TABLE <数据库名>.<表名> ON CLUSTER <集群名>
DROP TABLE IF EXISTS <数据库名>.<表名> ON CLUSTER <集群名>

--添加字段
--以下几种方式均可实现字段添加
--如果又对应的视图需要更新/重建视图
--业务中我们基于物化视图来做大宽表
alter table product_test add column `test` String DEFAULT '' COMMENT '注释';
alter table product_test ON CLUSTER perftest_3shards_1replicas add column `test` String DEFAULT '' COMMENT '注释';
alter table product_test add column test String DEFAULT '' COMMENT '注释';
alter table product_test ON CLUSTER perftest_3shards_1replicas add column test String DEFAULT '' COMMENT '注释';

--删除字段
alter table product_test drop column `test`;

--修改字段
alter table product_test modify column `test` Nullable(String) DEFAULT NULL COMMENT '注释';

--删除数据
ALTER TABLE db_name.table_name DROP PARTITION '分区(例如:时间20220516)'

4 普通视图和物化视图

--ClickHouse支持视图功能,目前一共支持两种视图:普通(Normal)视图和物化(Materialized)视图
--通过DROP TABLE [$db_name.]$view_table_name语句可以直接删除视图,而通过SHOW TABLES可以展示所有的表,视图也会被认为是一种特殊的表一并进行展示

--普通视图
--普通视图不会存储任何数据,它只是一个查询映射,起到了简化查询语义的作用,对查询的性能也不会有任何正负作用
COPYCREATE [OR REPLACE] VIEW [IF NOT EXISTS] [$db_name.]$view_table_name [ON CLUSTER] AS SELECT ...

--物化视图
--物化视图支持定义表引擎,因为其数据保存的形式由表引擎决定
--需要定义表引擎,决定数据存储的形式
--物化视图中的数据不支持同步删除,如果源表的数据不存在或者源表被删除了,物化视图的数据依然存在
--物化视图不会随着基础表的变化而变化,所以它也称为快照(snapshot)
--如果要更新数据的话,需要用户手动进行,如周期性执行SQL,或利用触发器等机制
COPYCREATE MATERIALIZED VIEW [IF NOT EXISTS] [$db_name.]$view_table_name [ON CLUSTER] [TO[$db_name.]$table_name] [ENGINE = $engine] [POPULATE] AS SELECT ...
--实例
CREATE MATERIALIZED VIEW order_test
ENGINE=SummingMergeTree
PARTITION BY toYYYYMMDD(order_date) ORDER BY (id,order_date) 
POPULATE  AS 
SELECT
id,
order_date,
sum(pay_number) as number,
sum(pay_amount) as amount
FROM order_detail
WHERE order_date >= '2022-05-16'
GROUP BY id,order_date;

--节点创建物化视图分布式表
--ENGINE = Distributed(cluster, 'local_database', 'local_table', rand())
CREATE TABLE my_test.user_all ON CLUSTER perftest_3shards_1replicas
AS my_test.user 
ENGINE = Distributed(perftest_3shards_1replicas, my_test, user, rand());

参考资料:

https://www.modb.pro/db/81185 ClickHouse高可用集群安装配置和创建分布式表

https://blog.csdn.net/qq_45141105/article/details/117626027 ClickHouse学习小记–MergeTree原理

https://www.cnblogs.com/wuning/p/12061756.html ClickHouse 高可用集群安装测试

https://blog.csdn.net/chy555chy/article/details/121519587?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1-121519587-blog-116783138.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1-121519587-blog-116783138.pc_relevant_default&utm_relevant_index=1 clickhouse 在集群上增删改查

https://blog.csdn.net/qq_41070393/article/details/116783138?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1-116783138-blog-117031067.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1-116783138-blog-117031067.pc_relevant_default&utm_relevant_index=2 clickhouse增删改查、创建数据库、创建表、修改字段、添加字段、删除字段

https://blog.csdn.net/choulisa/article/details/109499049 Clickhouse集群中创建多副本物化视图的方法(重要)

https://cloud.tencent.com/developer/article/1766204 ClickHouse数据库数据定义手记之不一般的DDL和DML

https://cdn.modb.pro/db/99840 分布式物化视图在clickhouse如何实现?

https://blog.csdn.net/weixin_44080445/article/details/119780193?spm=1001.2101.3001.6650.6&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-6-119780193-blog-109499049.pc_relevant_antiscanv2&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-6-119780193-blog-109499049.pc_relevant_antiscanv2&utm_relevant_index=9 详解clickhouse中的物化视图

https://www.csdn.net/tags/NtzacgzsNTk4NzktYmxvZwO0O0OO0O0O.html clickhouse 物化视图

https://www.freesion.com/article/9521715883/ 物化视图简介与CLICKHOUSE中的应用示例

https://blog.csdn.net/sojer/article/details/104903323 clickhouse里物化视图如何跟随源表更新数据

以上是关于系统运维系列 之Clickhouse数据库学习集锦(增删改查操作)的主要内容,如果未能解决你的问题,请参考以下文章

系统运维系列 之Clickhouse数据库学习集锦(增删改查操作)

系统运维系列 之Clickhouse数据类型整理

系统运维系列 之Clickhouse数据类型整理

系统运维系列 之Clickhouse查询优化问题记录整理

系统运维系列 之MySQL部分学习整理1

系统运维系列 之MySQL部分学习整理4