clickhouse数据库入门

275 阅读4分钟

简单介绍

俄罗斯人开发的列式数据库。语法对大小写敏感。查询比较快,主要支持新增、查询功能。修改和删除功能不是那么友好,对于clickhouse来说属于重操作,类似我们常见数据库(mysql,oracle)中的表结构级别的调整。对该数据库的详细说明,可以查看相应的官方文档介绍。 clickhouse.com/docs/zh

使用说明

服务器端安装完毕后,本地可使用dbeaver工具进行连接,即可使用。

Linux服务器

# 查看clickhouse状态
# 可以通过执行该命令,还能查看对应配置文件,日志等所在位置
systemctl status clickhouse-server



# 启动clickhouse
systemctl start clickhouse-server

# 重新启动clickhouse
systemctl restart clickhouse-server

# 停止clickhouse
systemctl stop clickhouse-server


# 当查看当前clickhouse
ps -ef|grep clickhouse


# 进入日志文件夹,查看对应的日志
cd /var/log/clickhouse-server/
tail -f clickhouse-server.log

基础知识说明

数据类型

主要与常见的Mysql数据库中数据类型作对比。

图片.png

系统常用表

-- 查看当前数据库引擎,data_cluster,为数据库名称
SHOW CREATE DATABASE data_cluster; 

-- 查询正在执行的sql任务
-- clickhouse无事务
select user,query_id,query,elapsed,memory_usage from system.processes; 


-- 查看当前分区下,哪些使用了主从备份,当前表只读模式 
SELECT `table`, zookeeper_path, replica_path FROM `system`.replicas WHERE is_readonly; 


-- 查看版本号
-- 22.1.3.7
select version(); 


-- 查询表及对应中文名称 
-- 注意大小写,database、table等 
SELECT name, comment FROM system.tables WHERE database = 'data_cluster' ORDER BY table;

常见函数

日期相关

-- 可比较是否同一天,toYYYYMMDD
SELECT * FROM t_test WHERE toYYYYMMDD(test_date) = toYYYYMMDD(today());


-- 加一天(注意!!!看到-1,最开始我还以为减一天。反而是加一天)
-- substract,减去的含义
-- 2023-01-31 00:00:00.000
SELECT subtractDays(toDateTime('2023-01-30'), -1);


-- 将字符串'2023-02-13'转换为日期格式后,最终转为数字20230213
SELECT toYYYYMMDD(toDate('2023-02-13'));


-- 获取昨天的日期,并转为数字的年月日
SELECT toYYYYMMDD(yesterday());



-- 获取两个时间的是时间差,可用于两个时间的比较,后者减前者
dateDiff('unit', startdate, enddate, [timezone])
-- 示例
SELECT IF(dateDiff('second', now(), yesterday()) > 0, now(), yesterday())
参考资料,https://blog.csdn.net/zhang_MyApple/article/details/123428084


-- 日期格式化
-- %F转化为2023-03-21,这种格式
SELECT formatDateTime(jrt.testDate, '%F')
参考资料,https://clickhouse.com/docs/zh/sql-reference/functions/date-time-functions#formatdatetime


-- clickhouse,日期转换(时间戳 -> 日期)
SELECT toDateTime(1641830434);

-- 以下资料中日期相关函数比较齐全
-- 参考资料:https://zhuanlan.zhihu.com/p/342734669


-- 计算两个时刻的时间差
SELECT dateDiff('hour', toDateTime('2018-01-01 22:00:00'), toDateTime('2018-01-02 23:00:00'));
-- 参考文档,https://clickhouse.com/docs/zh/sql-reference/functions/date-time-functions#date_diff

表引擎

MergeTree引擎

常用的一种表引擎。 其实对于这个系列引擎,对于数据删除是允许执行delete。

(用了好久,无意中才发现的)

图片.png

官方文档是这么介绍的,【轻量级的 DELETE 语句从表 [db.]table 中删除与表达式 expr 匹配的行。它仅适用于 *MergeTree表引擎系列。】

参考资料,clickhouse.com/docs/en/sql…

Merge引擎

一个工具引擎,本身不保存数据,只用于把指定库中指定的多个表”合并“在一起,有点像我们常用的视图。

Mysql引擎

说明,该引擎可以与其它类型库建立“映射”,直接可以在clickhouse里读取到其它类型库中表的数据

clickHouse与mysql一起使用,clickhouse查询数据较快,一般将数据量大的数据,从mysqli建立一个映射,即可从clickhouse直接查询数据。(根据官方文档,还存在其它数据库引擎,比如MongoDB等)

ReplacingMergeTree

指定字段,可以根据某字段,自动合并重复项。比如两条记录id都为1,最终会保留一条记录。但是合并的时机是不确定的,clickhouse是异步执行的。若需马上进行合并,可考虑执行以下语句手动执行合并。

-- 手动触发合并
optimize table t_replace_test final;

说说使用clickhouse看法

1、官方文档是最详细的。尽管像一些基本知识点,网上一搜都是能查询到。但是看官网文档,整体浏览一遍,会有一个大致的认识。

2、基础操作,平时了解就行,真正使用的时候,用来用去就只需要那些。掌握这些基础的操作,基本能达到日常工作使用的要求。

3、列式数据库查询起来确实快,不怎么支持事务。大数据库相关开发,还是需要了解一项相应的数据库技术。