Clickhouse的使用以及常见命令
一、添加clickhouse
1.下载驱动程序
2.进行连接
3.显示所有的架构,包括系统架构
二、命令语句
1.展示所有的数据库
show databases;
2.创建一个数据库叫bigdata32(if not exists表示如果该库不存在就进行创建)
create database if not exists bigdata32;
3.创建表
--创建数据库表,里面有id,name,age,gender,clazz.FixedString(8)表示固定字符串长度
create table if not exists bigdata32.stu1(
`id` Int32,
`name` String,
`age` Int8,
`gender` FixedString(8),
`clazz` String
)ENGINE = TinyLog;
4.向表中添加字段
insert into bigdata32.stu1 values (1001,'江川',18,'男','大数据32期') ;
insert into bigdata32.stu1 values (1002,'张三',20,'男','大数据32期');
5.clickhouse的数据类型
a.整数类型:
--clickhouse中的数据类型跟mysql中的不一样,Int8表示[-128 : 127],还有Int16,Int32等等
--具体可以查看官方网址:https://clickhouse.com/docs/zh/sql-reference/data-types/int-uint
b.字符串类型
String:可变字符串 varchar
FixedString(长度):固定长度的字符串,参数是字节,效率比String更高 char
c.日期类型:
Date 年-月-日
Date32 年-月-日
DateTime 年-月-日 时-分-秒
DateTime64 年-月-日 时-分-秒.毫秒
案例:
建表语句:
create table date_test (date1 Date,date2 Date32,date3 DateTime,date4 DateTime64) ENGINE = TinyLog;
插入语句:
前两个将时间不变,后面一个会增加时分秒单位,最后一个会在前一个的基础上增加毫秒单位
insert into date_test values ('2023-11-21','2023-11-21','2023-11-21','2023-11-21');
将时间戳转换成日期,前面两个会按天来进行转换,倒数第二个会按秒来进行转换,而最后一个才会按毫秒来进行转换
insert into date_test values (1691825618123,1691825618123,1691825618123,1691825618123); //2023-08-12 15:33:38
6.查看数据的类型toTypeName
select id,name,toTypeName(age) as type_age,gender,clazz from bigdata32.stu1;
7.向表中添加一个字段类型为:数组
CREATE TABLE IF NOT EXISTS bigdata32.stu3
(
`id` Int32,
`name` String,
`age` Nullable(Int32),
`gender` FixedString(8),
`clazz` String,
`likes` Array(String)
) ENGINE = TinyLog;
--添加数据
insert into bigdata32.stu3
values (1003, '李四', 21, '男', '大数据32期', array('唱', '跳', 'rap'));
三、Mysql数据引擎
1.TinyLog
最简单的表引擎,用于将数据存储在磁盘上。每列都存储在单独的压缩文件中。写入时,数据将附加到文件末尾。
像之前的创建的表都是TinyLog数据引擎
2.StripeLog
该引擎是将所有的列存储在一个文件中,对每次Insert请求,都将数据块追加在表文件的末尾,逐列写入
ClickHouse 为每张表写入以下文件:
data.bin
— 数据文件。
index.mrk
— 带标记的文件。标记包含了已插入的每个数据块中每列的偏移量
3.MergeTree(合并树家族)
Clickhouse 中最强大的表引擎当属 MergeTree
(合并树)引擎及该系列(*MergeTree
)中的其他引擎。
1.创建一个表
create table bigdata32.goods_orders
(
id String,
uname String,
goods_name String,
price Int64,
date Date32
) ENGINE = MergeTree() order by date PARTITION BY date;
2.添加数据
insert into bigdata32.goods_orders
values ('1001', '李刚', 'oppo手机', 7000, '2024-10-24'),
('1002', '江川', '机械革命电脑', 10000, '2024-10-22'),
('1003', '钱志强', 'iphone14', 5000, '2024-10-24'),
('1004', '吴问强', 'AI吸尘器', 17000, '2024-10-22');
insert into bigdata32.goods_orders
values ('1001', '祝帅', 'vivo x200 pro', 5299, '2024-10-24'),
('1002', '李世博', '科睿显示屏', 10000, '2024-10-22'),
('1003', '杨珊珊', 'iphone16 pro max', 5000, '2024-10-24'),
('1004', '王亮亮', '华为三折叠', 17000, '2024-10-22');
四、常用函数
4.1 算术函数
对于所有算术函数,结果类型为结果适合的最小数值类型(如果存在这样的类型)。最小数值类型是根据数值的位数,是否有符号以及是否是浮点类型而同时进行的。如果没有足够的位,则采用最高位类型。简单理解:会自动的根据我们的数值大小,来选用最适合的数据类型存储。
4.2 比较函数
比较函数始终返回0或1(UInt8)。
等于,a=b和a==b 运算符
不等于,a!=b和a<>b 运算符
少, < 运算符
大于, > 运算符
小于等于, <= 运算符
大于等于, >= 运算符
五、开窗over()
-- 开窗 over()
-- select xxx(...) over(...)
-- 开窗不会改变数据条数,新增一列开窗的列
-- 统计每个部门薪资前2的员工
-- rank(), dense_rank(), row_number() 排序开窗函数
select
t1.emp_name,
t1.job,
t1.mgr_no,
t1.hire_date,
t1.salary,
t1.commission,
t1.dept_no,
t1.rn
from
(
select emp_no,
emp_name,
job,
mgr_no,
hire_date,
salary,
commission,
dept_no,
row_number() over (partition by dept_no order by salary desc) as rn
from bigdata32.employees
) t1 where t1.rn<3;

select emp_no,
emp_name,
job,
mgr_no,
hire_date,
salary,
commission,
dept_no,
row_number() over (partition by dept_no order by salary desc) as rn,
rank() over (partition by dept_no order by salary desc) as rn2,
dense_rank() over (partition by dept_no order by salary desc) as rn3
from bigdata32.employees;

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义