ClickHouse(3)-企业应用最佳实战

1 ClickHouse适用场景

当场景满足如下大部分场景时,即可调研尝试使用ck。

01、绝大多数请求都是用于读访问,而且不是单点访问
02、数据需要以大批次(大于1000行)进行更新,而不是单行更新;或者根本没有更新操作
03、数据只是添加到数据库,没有必要修改
04、读取数据时,会从数据库中提取出大量的行,但只用到一小部分列
05、表很“宽”,即表中包含大量的列
06、查询频率相对较低(通常每台服务器每秒查询数百次或更少)
07、对于简单查询,允许大约50毫秒的延迟
08、列的值是比较小的数值和短字符串( 例如,每个URL只有60个字节)
09、在处理单个查询时需要高吞吐量(每台服务器每秒高达数十亿行)
10、不需要事务
11、数据一致性要求较低
12、每次查询中只会查询一个大表。除了一个大表,其余都是小表
13、查询结果显著小于数据源。即数据有过滤或聚合。返回结果不超过单个服务器内存大小

2 经典大厂案例分析

2.1 分组求topn-TopK

创建表:

create table topn_test(a Int32, b Int32, c Int32) ENGINE=Memory;

插入数据:

insert into topn_test( a,b,c) values (1,2,5),(1,2,4),(1,3,8),(1,3,2),(1,4,6),C2,3,3),(2,3,7),(2,3,8),C2,4,9),C2,5,6),(3,3,4),(3,3,7),(3,3,5),(3,4,9),(3,5,6);

查询SQL:

select * from topn_test2 order by a desc;

分组topK:以a分组,取c top3的数据

select a, topK(3)(c) from (select a,c from topn_test2 order by a asc ,c desc ) group by a order by a;

相较于hive的开窗函数,最上层的select不能获取group by 、order by 之外的字段。而且topK是集合。

**注意:**当表是分布式表时这个操作只能获取每台机器上的表的TopK,比较坑,再次验证ck是单机单表性能强悍的数据库。

2.2 窗口分析函数-over partition

Window Functions在clickhouse的需求和呼声很高,早期的版本需要借助array函数,在21.1版本进行了开窗函数的初步支持。

查询版本:

select version();

开启参数:

SET a11ow_experimental_window_functions = 1;

创建表:

create tab1e window_test(id String, score UInt8) engine=MergeTree() order by id;

生成测试数据:

insert into window_test(id,score) values('A'90)('A',80)('A'88)('A'86)('B'91)('B'95)(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值