当前位置: 首页 > news >正文

大数据-143 - ClickHouse 集群 SQL 超详细实践记录!

点一下关注吧!!!非常感谢!!持续更新!!!

目前已经更新到了:

  • Hadoop(已更完)
  • HDFS(已更完)
  • MapReduce(已更完)
  • Hive(已更完)
  • Flume(已更完)
  • Sqoop(已更完)
  • Zookeeper(已更完)
  • HBase(已更完)
  • Redis (已更完)
  • Kafka(已更完)
  • Spark(已更完)
  • Flink(已更完)
  • ClickHouse(正在更新···)

章节内容

上节我们完成了如下的内容:

  • 副本和分片
  • Distributed 部分
  • 编码实际案例测试

在这里插入图片描述

基本介绍

ClickHouse 是一种用于 OLAP(在线分析处理)的列式数据库,因其高速数据处理能力在大数据分析中备受青睐。ClickHouse 的 SQL 语法与标准 SQL 类似,但由于其专注于分析场景,有一些特殊的扩展。ClickHouse 默认不支持直接 DELETE 或 UPDATE 操作,但可以通过分区管理和合并机制间接清理数据。ClickHouse 提供了很多专门为高效分析而设计的功能。ClickHouse 提供了丰富的聚合函数,如 sum()、avg()、min()、max()、count()。

基本 SQL 语法

ClickHouse 的 SQL 语法与标准 SQL 类似,但由于其专注于分析场景,有一些特殊的扩展。
创建表的时候:

CREATE TABLE table_name (column1 DataType,column2 DataType,...
) ENGINE = MergeTree()
ORDER BY (primary_key_columns);
  • ENGINE:表引擎,最常用的是 MergeTree 系列。
  • ORDER BY:必须指定排序键,支持对大数据集高效查询。
  • PARTITION BY:按列进行分区(可选)。
  • SAMPLE BY:用于大数据量下的采样查询(可选)。

删除或清理表数据的时候:
ClickHouse 默认不支持直接 DELETE 或 UPDATE 操作,但可以通过分区管理和合并机制间接清理数据。

ALTER TABLE table_name DROP PARTITION partition_expr;

特殊功能

聚合函数

ClickHouse 提供了丰富的聚合函数,如 sum()、avg()、min()、max()、count()。此外,还有以下特殊聚合函数:

SELECT uniqExact(column) FROM table_name; -- 精确去重计数
SELECT quantiles(0.5, 0.9)(column) FROM table_name; -- 分位数计算

窗口函数

ClickHouse 支持窗口函数,但语法略有不同。常见窗口函数有 row_number()、rank() 等:

SELECT column, rowNumber() OVER (PARTITION BY partition_column ORDER BY sort_column) 
FROM table_name;

数组和嵌套类型

ClickHouse 支持数组和嵌套类型,适合处理复杂的数据结构:

SELECT arrayJoin(array) FROM table_name;
  • arrayJoin:将数组展开为多行

MergeTree 引擎

MergeTree 是 ClickHouse 最常用的引擎之一,具备排序、索引和分区的特性,能够高效处理海量数据。

  • ORDER BY:定义主键,数据按照该字段排序。
  • PRIMARY KEY:可以和 ORDER BY 一致,用于快速定位。
  • PARTITION BY:用于数据按逻辑分片,减少查询范围。
  • TTL:设置数据过期时间,自动清理历史数据。

基本状况

目前我是ClickHouse的集群环境:

  • h121.wzk.icu
  • h122.wzk.icu
  • h123.wzk.icu

建立连接

我们随机找一台建立链接

clickhouse-client -m --host h121.wzk.icu --port 9001 --user default --password clickhouse@wzk.icu

新建库

CREATE DATABASE mydatabase;

执行结果如下图所示:
在这里插入图片描述

可以看到对应的路径如下所示:

cd /var/lib/clickhouse/data
ls

执行结果如下图,可以看到我们刚才创建的数据库:
在这里插入图片描述

查看数据库

SHOW DATABASES;

运行结果如下图:
在这里插入图片描述

新建表

# 方式1
CREATE TABLE my_table(title String,url String,eventTime DateTime
) ENGINE = Memory;# 方式2
CREATE TABLE mydatabase.my_table(title String,url String,eventTime DateTime
) ENGINE = Memory;# 方式3
CREATE TABLE mydatabase.my_table_2(title String,url String,eventTime DateTime
) ENGINE = Memory AS SELECT * FROM mydatabase.my_table;

执行结果如下图所示:
在这里插入图片描述

查表结构

DESC my_table;

执行结果如下图:
在这里插入图片描述

插入数据

INSERT INTO my_table VALUES ('wzk', '123', now());

执行的结果如下所示:
在这里插入图片描述

临时表

CREATE TABLE tmp_v1 (title String,create_time DateTime
) ENGINE = Memory;

如果临时表与正常表名字相同,临时表优先。
临时表的引擎只能是Memory,数据是临时的,断点数据就没了。
更多的是在ClickHouse内部,是数据在集群间传播度的载体。

分区表

创建新表

CREATE TABLE partition_v1 (`id` String,`url` String,`eventTime` Date
) ENGINE = MergeTree()
PARTITION BY toYYYYMM(eventTime)
ORDER BY id;

执行结果如下所示:
在这里插入图片描述

只有合并树(MergeTree)家族的表引擎支持分区表,可以利用分区表,做定位查询,缩小查询范围。分区字段不易设置的太小。

插入数据

INSERT INTO partition_v1 (id, url, eventTime) VALUES
('1', 'http://example.com/page1', '2024-01-01'),
('2', 'http://example.com/page2', '2024-01-15'),
('3', 'http://example.com/page3', '2024-02-01'),
('4', 'http://example.com/page4', '2024-02-15'),
('5', 'http://example.com/page5', '2024-03-01'),
('6', 'http://example.com/page6', '2024-03-15');

执行结果如下图所示:
在这里插入图片描述

查询数据

SELECT * FROM partition_v1;

执行结果如下所示:
在这里插入图片描述

查看分区

SELECT table, partition, path FROM system.parts WHERE table = 'partition_v1';

执行结果如下图所示:
在这里插入图片描述

视图表

  • 普通视图:不保存数据,只是一层单纯的SELECT查询映射,起着简化查询的作用
  • 物化视图:保存数据,源表被写入数据,物化视图也会同步更新
  • POPULATE修饰符:决定在创建物化视图的过程中是否将源表的数据同步到物化视图。

表基本操作

只有 MergeTree、Merge、Distribution这三类表引擎支持ALTER操作!!!

追加字段

ALTER TABLE partition_v1 ADD COLUMN os String default 'mac';
ALTER TABLE partition_v1 ADD COLUMN ip String after id;
DESC partition_v1;

执行结果如下:
在这里插入图片描述

修改类型

注意:类型需要互相兼容

ALTER TABLE partition_v1 modify column ip IPv4;
DESC partition_v1;

执行结果如下图所示:
在这里插入图片描述

修改备注

ALTER TABLE partition_v1 COMMENT COLUMN id '主键ID';
DESC partition_v1;

执行结果如下图所示:
在这里插入图片描述

删除字段

ALTER TABLE partition_v1 DROP COLUMN url;
DESC partition_v1;

注意,删除字段会把该字段下的数据一起删除:
在这里插入图片描述

移动表

rename TABLE default.partition_v1 to mydatabase.partition_v1;
USE mydatabase;
SHOW TABLES;

执行结果如下图所示:
在这里插入图片描述

分区操作

查看分区

SELECT partition_id, name, table, database FROM system.parts where table = 'partition_v1';

执行结果如下所示:
在这里插入图片描述

删除分区

ALTER TABLE partition_v1 DROP PARTITION 202401;
SELECT partition_id, name, table, database FROM system.parts where table = 'partition_v1';

执行结果如下图所示:
在这里插入图片描述

复制分区

ALTER TABLE partition_v2 replace partition 202402 FROM partition_v1;

重置分区

ALTER TABLE partition_v1 CLEAR COLUMN ip in partition  202402;
  • 将 ip 列的值清空(设置为默认值)。
  • 清空操作不会删除记录,而是将指定列的值设置为默认值(如 0 或 NULL,具体取决于列的默认设置)。

执行结果如下图所示:
在这里插入图片描述

卸载分区

ALTER TABLE partition_v1 DETACH partition 202402;
SELECT partition_id, name, table, database FROM system.parts where table = 'partition_v1';

执行结果如下图所示:
在这里插入图片描述

转载分区

ALTER TABLE partition_v1 ATTACH partition 202402;
SELECT partition_id, name, table, database FROM system.parts where table = 'partition_v1';

执行结果如下图所示:
在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • kafka3.8的基本操作
  • 华为HarmonyOS地图服务 5 - 利用UI控件和手势进行地图交互
  • SAP学习笔记 - 开发06 - CDSView + Fiori Element 之 List Report
  • 基于PHP的CRM管理系统源码/客户关系管理CRM系统源码/php源码/附安装教程
  • SQL中的WITH AS语法
  • 线程知识点补充
  • 【Kubernetes】常见面试题汇总(二十九)
  • C++第1课——输出、变量和输入(含视频讲解)
  • MySQL深入原理
  • OpenCV特征检测(3)计算图像中每个像素处的特征值和特征向量函数cornerEigenValsAndVecs()的使用
  • 【ShuQiHere】深入理解布尔代数中的 SOP、POS、DNF 和 CNF
  • c# 线程等待变量的值符合条件
  • C++重生之我是001
  • 【django】局域网访问django启动的项目
  • [Java并发编程] synchronized(含与ReentrantLock的区别)
  • [分享]iOS开发-关于在xcode中引用文件夹右边出现问号的解决办法
  • 2017 年终总结 —— 在路上
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • codis proxy处理流程
  • Computed property XXX was assigned to but it has no setter
  • CSS中外联样式表代表的含义
  • Fabric架构演变之路
  • Go 语言编译器的 //go: 详解
  • js递归,无限分级树形折叠菜单
  • laravel with 查询列表限制条数
  • markdown编辑器简评
  • Node项目之评分系统(二)- 数据库设计
  • orm2 中文文档 3.1 模型属性
  • SpringBoot 实战 (三) | 配置文件详解
  • VUE es6技巧写法(持续更新中~~~)
  • 笨办法学C 练习34:动态数组
  • 测试开发系类之接口自动化测试
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 翻译:Hystrix - How To Use
  • 反思总结然后整装待发
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • -- 数据结构 顺序表 --Java
  • 学习笔记:对象,原型和继承(1)
  • 正则表达式小结
  • LevelDB 入门 —— 全面了解 LevelDB 的功能特性
  • ​云纳万物 · 数皆有言|2021 七牛云战略发布会启幕,邀您赴约
  • # windows 安装 mysql 显示 no packages found 解决方法
  • ## 1.3.Git命令
  • (¥1011)-(一千零一拾一元整)输出
  • (10)Linux冯诺依曼结构操作系统的再次理解
  • (leetcode学习)236. 二叉树的最近公共祖先
  • (Qt) 默认QtWidget应用包含什么?
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (附源码)springboot 智能停车场系统 毕业设计065415
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (黑马点评)二、短信登录功能实现
  • (六)DockerCompose安装与配置
  • (实战篇)如何缓存数据