大数据-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';

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/881744.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Android TV RecyclerView列表获得焦点左右换行

在TV上&#xff0c;用RecyclerView显示一个列表&#xff0c;飞鼠遥控左右遥控获得Item焦点&#xff0c;到最后一个进行右移动换行&#xff0c;是不能做到的&#xff0c;因此需要监听key事件处理换行。 效果图如下 代码实现 Item.xml布局 <?xml version"1.0" e…

Layout 布局组件快速搭建

文章目录 设置主题样式变量封装公共布局组件封装 Logo 组件封装 Menu 菜单组件封装 Breadcrumb 面包屑组件封装 TabBar 标签栏组件封装 Main 内容区组件封装 Footer 底部组件封装 Theme 主题组件 经典布局水平布局响应式布局搭建 Layout 布局组件添加 Layout 路由配置启动项目 …

连续数组问题

目录 一题目&#xff1a; 二思路&#xff1a; 三代码&#xff1a; 一题目&#xff1a; leetcode链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 二思路&#xff1a; 思路&#xff1a;前缀和&#xff08;第二种&#xff09;化0为-1hash&#xff1a; 这样可以把…

SQL server学习01-SQL server环境配置

目录 一&#xff0c;手动下载及安装 microsoft .net framework 3.5 1&#xff0c;下载 2&#xff0c;安装 二&#xff0c;安装SQL server2014 1&#xff0c;下载 2&#xff0c;安装 3&#xff0c;启动SQL server服务 三&#xff0c;下载及安装Microsoft SQL Server…

高效编程的利器 Jupyter Notebook

目录 前言1. Jupyter Notebook简介1.1 功能特点1.2 使用场景 2. 不同编程工具的对比与效率提升2.1 VS Code&#xff1a;灵活且轻量的代码编辑器2.2 PyCharm&#xff1a;面向专业开发者的集成开发环境2.3 Git&#xff1a;高效协作的版本控制工具2.4 Jupyter Notebook 和 VS Code…

【AI学习笔记】初学机器学习西瓜书概要记录(一)机器学习基础知识篇

初学机器学习西瓜书的概要记录&#xff08;一&#xff09;机器学习基础知识篇(已完结) 初学机器学习西瓜书的概要记录&#xff08;二&#xff09;常用的机器学习方法篇(持续更新) 初学机器学习西瓜书的概要记录&#xff08;三&#xff09;进阶知识篇(待更) 文字公式撰写不易&am…

【爱给网-注册安全分析报告-无验证方式导致安全隐患】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 1. 暴力破解密码&#xff0c;造成用户信息泄露 2. 短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉 3. 带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造…

virtualbox中的网络模式,网络设置,固定IP

virtualbox关于网络设置的文档&#xff1a;https://www.virtualbox.org/manual/topics/networkingdetails.html#networkingdetails DHCP Dynamic Host Configuration Protocol&#xff1a;动态主机配置协议&#xff0c;是专门用来给网络中的节点分发IP地址&#xff0c;确保每…

用友U8二次开发工具KK-FULL-*****-EFWeb使用方法

1、安装: 下一步&#xff0c;下一步即可。弹出黑框不要关闭&#xff0c;让其自动执行并关闭。 2、服务配置&#xff1a; 输入服务器IP地址&#xff0c;选择U8数据源&#xff0c;输入U8用户名及账号&#xff0c;U8登录日期勾选系统日期。测试参数有效性&#xff0c;提示测试通过…

【Unity-UGUI组件拓展】| Image 组件拓展,支持FIlled和Slice功能并存

🎬【Unity-UGUI组件拓展】| Image 组件拓展,支持FIlled和Slice功能并存一、组件介绍二、组件拓展方法三、完整代码💯总结🎬 博客主页:https://xiaoy.blog.csdn.net 🎥 本文由 呆呆敲代码的小Y 原创,首发于 CSDN🙉 🎄 学习专栏推荐:Unity系统学习专栏 🌲 游戏…

esp32 wifi 联网后,用http 发送hello 用pc 浏览器查看网页

参考chatgpt Esp32可以配置为http服务器&#xff0c;可以socket编程。为了免除编写针对各种操作系统的app。完全可以用浏览器仿问esp32服务器&#xff0c;获取esp32的各种数据&#xff0c;甚至esp的音频&#xff0c;视频。也可以利用浏览器对esp进行各种操作。但esp不能主动仿…

golang学习笔记1-go程序执行流程

声明&#xff1a;本人已有C&#xff0c;C,Python基础&#xff0c;只写本人认为的重点&#xff0c;方便自己回顾。 命令行执行go程序有两种方式&#xff0c;其流程如下图 注意第一种方式会得到可执行文件&#xff0c;第二种不会。 例1 在当前目录下编译hello.go go build hel…

Matplotlib绘图基础

1、散点图 绘制散点图是数据可视化中非常常见的操作&#xff0c;它用于显示两组数据之间的关系。Matplotlib 提供了 plt.scatter() 函数&#xff0c;可以轻松绘制散点图。以下是一个基础的散点图示例代码&#xff0c;并包含了一些优化可视化呈现的技巧。 import matplotlib.p…

istio中如何使用serviceentry引入外部服务

假设需要引入一个外部服务&#xff0c;外部服务ip为10.10.102.90&#xff0c;端口为32033. 引入到istio中后&#xff0c;我想通过域名gindemo.test.ch:9090来访问这个服务。 serviceentry yaml内容如下&#xff1a; apiVersion: networking.istio.io/v1beta1 kind: ServiceEn…

53 语言模型(和之后用来训练语言模型的数据集)_by《李沐:动手学深度学习v2》pytorch版

系列文章目录 文章目录 系列文章目录理论部分使用计数来建模N元语法总结 代码读取长序列数据随机采样顺序分区 小结练习 理论部分 在上一部分中&#xff0c;我们了解了如何将文本数据映射为词元&#xff0c;以及将这些词元可以视为一系列离散的观测&#xff0c;例如单词或字符…

构建与优化自定义进程池

1. 什么是进程池&#xff1f; 简单来说&#xff0c;进程池就是预先创建固定数量的工作进程&#xff0c;通过设计任务队列或调度算法来分配任务给空闲的进程 —— 实现“负载均衡”。 2. 进程池框架设计 枚举错误返回值&#xff1a; enum {UsageError 1,ArgError,PipeError };…

基于51单片机的汽车倒车防撞报警器系统

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 本课题基于微控制器控制器&#xff0c; 设计一款汽车倒车防撞报警器系统。 要求&#xff1a; 要求&#xff1a;1.配有距离&#xff0c; 用于把车和障碍物之间的距离信号送入控制器。 2.配有报警系…

如何安装和注册 GitLab Runner

如何安装和注册 GitLab Runner GitLab Runner 是一个用于运行 GitLab CI/CD (Continuous Integration/Continuous Deployment) 作业。它是一个与 GitLab 配合使用的应用程序&#xff0c;可以在本地或云中运行。Runner 可以执行不同类型的作业&#xff0c;例如编译代码、运行测…

传统软件应用技术的价值转换率越来越低

为什么感觉到卷&#xff1f;可能的一个原因是大家都在进步&#xff0c;用户和竞争对手也在进步&#xff0c;而自己却没有进步&#xff0c;也谈不上思维模式的改变。 我们不谈理论、不谈理想、不谈市场环境不好&#xff0c;就谈与用户接触过程的案例&#xff0c;这是最有说服力的…

传输层协议(TCP和UDP)

目录 一、UDP 1、UDPAPI 2、UDPAPI的使用 二、TCP 1、TCPAPI 2、TCP的相关特性 2.1 确认应答 2.2 超时重传 2.3 连接管理&#xff08;三次握手&#xff0c;四次挥手&#xff09; 2.4 滑动窗口 2.5 流量控制 2.6 拥塞控制 2.7 延时应答 2.8 捎带应答 2.9 面向字节…