clickhouse查询实践与进阶
table里记录了一些流量详情,流量包括源IP src_ip,目标IP dst_ip,数据包大小pack_size,创建时间create_time
下面是一些要统计的内容
一个ip和多少个ip通信了
查询每个src_ip对应有多少个dst_ip,每个dst_ip对应多少个src_ip,也就是一个ip和多少个ip通信了,SQL语法如下:主要就是union all的两边。
1 |
|
数据包大小分布
要计算pack_size<100的数据包有多少个,100<=pack_size<200的数据包有多少个,200<=pack_size<300的数据包有多少个等等
1 |
|
这个是运行结果
1 |
|
改成这样也可以:
1 |
|
主要就是通过multiIf实现的。
下面的内容来自clickhouse官方文档:
multiIf允许您在查询中更紧凑地编写CASE运算符。
语法
1
multiIf(cond_1, then_1, cond_2, then_2, ..., else)
您可以使用short_circuit_function_evaluation 设置,根据短路方案计算
multiIf
函数。如果启用此设置,则then_i
表达式仅在((NOT cond_1) AND (NOT cond_2) AND ... AND (NOT cond_{i-1}) AND cond_i)
为真,cond_i
将仅对((NOT cond_1) AND (NOT cond_2) AND ... AND (NOT cond_{i-1}))
为真的行进行执行。例如,执行查询“SELECT multiIf(number = 2, intDiv(1, number), number = 5) FROM numbers(10)”时不会抛出除以零的异常。参数:
cond_N
— 函数返回then_N
的条件。then_N
— 执行时函数的结果。else
— 如果没有满足任何条件,则为函数的结果。该函数接受
2N + 1
参数。
clickhouse查询实践与进阶
https://nrbackback.github.io/2022/12/13/clickhouse查询实践与进阶/