ClickHouse数据库二
1.性能分析及优化策略
像携程、字节跳动等公司,都在使用Clickhouse,并在其基础上,针对自身的业务场景进行了适度的优化与重写,使其能适应自身业务的增长以及数据的查询。其中用到的技术可能不仅仅局限于Clickhouse一个数据库,只有对相应的算法以及其他分布式系统原理,都有相当的了解,才能真正的实现Clickhouse数据库的落地。
1.从携程性能测试case中重新认识clickhouse
2.mysql 通过Python导入clickhouse 行数对于完成速度的影响(数据文件无压缩)
3.Apache Beam 实战指南 | 如何结合 ClickHouse 打造“AI 微服务”?
4.Clickhouse 使用总结
5.最快开源 OLAP 引擎!ClickHouse 在头条的技术演进
压缩率
从一开始ClickHouse就支持多种方式的数据压缩:LZ4和ZSTD,默认情况下ClickHouse采用的是lz4压缩算法。一张图可以说明相关的问题(ES和clickhouse的压缩对比),这是新浪公司的人对相关的内容进行测试的结果。
使用SQL语句进行压缩率的查询:
1 | -- 查看数据库容量,以测试数据为参考 |
1.ClickHouse数据压缩[译文]
2.clickhouse(四、运维查看数据库及表容量)
3.ClickHouse 数据压缩与解压
4.【ClickHouse】查看数据库容量和表大小的方法(system.parts各种操作方法) (还讲了使用clickhouse存储nginx日志文件的案例)
2.求最大最小值
1.min(x)计算
3.时间日期函数
1 | /*查找在指定时间范围内的记录,并且id号为2778或者2779的记录 |
1.Functions for working with dates and times
2.Parse DateTime consistently
3.parseDateTimeBestEffort
3.执行sql语句
1 | clickhouse-client --password 密码 -d 数据库 --multiquery < realtime.sql |
1.vim 空格和换行的删除和替换
2.clickhouse通过命令行执行*.sql文件
3.clickhouse 删除或更新数据
4.五.clickhouse 批量导入数据(clickhouse极简教程系列)
4.创建视图
1 | CREATE view lsmfhx.v_realtime as select * from lsmfhx.realtime r left join lsmfhx.siteinfo s on r.SiteNo = s.SiteNo |
1.CREATE VIEW
5.With和CTE(公用表达式)
在编写复杂的查询的时候,需要用到重复的SQL语句,所以能不能定义一个通用的变量呢?Clickhouse支持With语句,但是只能用于标量,我查了下,标量的意思就是只能是一个值。
Clickhouse supports WITH clause since mid 2017, but only for scalar values.
我尝试了一下,好像还真是可以
1 | with concat(formatDateTime(RecordTime,'%Y%m%d'),toString(floor((toHour(RecordTime)*60+toMinute(RecordTime))/60-0.001))) as timeid |
经过实验,with不能用在join语句中,也就是不能跨表使用。如下,会提示timeid不存在与b中,强行解释一波,可能是因为使用join的时候,已经是两张表了。
1 | with concat(formatDateTime(RecordTime,'%Y%m%d'),toString(floor((toHour(RecordTime)*60+toMinute(RecordTime))/60-0.001))) as timeid |
6.升级
因为我的clickhouse-common-static是使用的rpm的方式安装的,所以我需要做的就是使用rpm方式升级。但是我下载了clickhouse-common-static最新版,执行了rpm -Uvh clickhouse-common-static-20.1.4.14-2.x86_64.rpm
,结果显示这个包被别人依赖了。
于是我尝试通过yum的方式继续更新。你知道的,下载起来特别的慢。
1 | ## Debian/Ubuntu |
所以最后我通过先把clickhouse-common-static-20.1.4.14-2.x86_64.rpm下载到服务器中(用梯子),然后使用:
1 | ## 指定本地包升级 |
顺利解决了更新的问题。