简单介绍
俄罗斯人开发的列式数据库。语法对大小写敏感。查询比较快,主要支持新增、查询功能。修改和删除功能不是那么友好,对于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数据库中数据类型作对比。
系统常用表
-- 查看当前数据库引擎,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。
(用了好久,无意中才发现的)
官方文档是这么介绍的,【轻量级的 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、列式数据库查询起来确实快,不怎么支持事务。大数据库相关开发,还是需要了解一项相应的数据库技术。