Clickhouse常用函数

ClickHouse常用统计、质量控制及类型转换函数详解

ClickHouse 是一个高性能的列式数据库管理系统,广泛应用于大数据分析场景。本文将详细介绍其常用的统计函数、质量控制指标函数以及类型转换函数,涵盖总数、平均值、标准差、分位数、中位数、众数、峰度、偏度、CPK、CA、CP等指标的实现方法。


一、统计函数

1. 总数(Count)

用于计算行数或满足条件的记录数。

sql 复制代码
SELECT count(*) AS total FROM table_name;  -- 总行数
SELECT count(column) AS non_null_count FROM table_name;  -- 非空值的数量

2. 平均值(Average)

计算数值列的平均值。

sql 复制代码
SELECT avg(value) AS average_value FROM measurements;

3. 标准差(Standard Deviation)

计算样本标准差(stddevSamp)或总体标准差(stddevPop)。

sql 复制代码
SELECT 
    stddevSamp(value) AS sample_stddev, 
    stddevPop(value) AS population_stddev 
FROM data_table;

4. 分位数(Quantile)

计算指定分位数,例如中位数(0.5分位数)。

sql 复制代码
SELECT 
    quantile(0.5)(value) AS median,  -- 中位数
    quantile(0.9)(value) AS percentile_90  -- 第90百分位数
FROM sales_data;

5. 众数(Mode)

通过 topK 函数获取出现频率最高的值:

sql 复制代码
SELECT arrayElement(topK(1)(value), 1) AS mode FROM data_table;

6. 总和(Sum)

计算数值列的总和。

sql 复制代码
SELECT sum(revenue) AS total_revenue FROM sales;

7. 峰度(Kurtosis)与偏度(Skewness)

需通过数学公式手动计算:

sql 复制代码
SELECT 
    avg(value) AS mean,
    pow(avg(pow(value - mean, 3)), 1/3) / pow(stddevSamp(value), 1) AS skewness,
    (avg(pow(value - mean, 4)) / pow(stddevSamp(value), 4)) - 3 AS kurtosis
FROM data_table;

二、质量控制指标函数

1. 过程能力指数(CP)

衡量过程能力与规格范围的匹配程度:

sql 复制代码
-- 假设 USL(上规格限)和 LSL(下规格限)已知
SELECT 
    (USL - LSL) / (6 * stddevSamp(value)) AS CP 
FROM measurements;

2. 过程性能指数(CPK)

评估过程中心位置与规格限的匹配程度:

sql 复制代码
SELECT 
    MIN(
        (USL - avg_value) / (3 * std_dev),
        (avg_value - LSL) / (3 * std_dev)
    ) AS CPK
FROM (
    SELECT 
        avg(value) AS avg_value,
        stddevSamp(value) AS std_dev
    FROM measurements
);

3. 过程能力分析(CA)

综合 CP 和 CPK 的分析,需结合具体业务场景定义公式。


三、类型转换函数

1. 数值类型转换

sql 复制代码
SELECT 
    toInt32('123') AS int_value,          -- 字符串转整数
    toFloat64('3.14') AS float_value,     -- 字符串转浮点数
    toString(42) AS string_value          -- 整数转字符串

2. 日期与时间转换

sql 复制代码
SELECT 
    toDate('2023-01-15') AS date_value,          -- 字符串转日期
    toDateTime('2023-01-15 14:30:00') AS datetime_value,  -- 字符串转DateTime
    formatDateTime(now(), '%Y-%m-%d %H:%M:%S') AS formatted_time  -- 格式化当前时间

3. 数组操作

sql 复制代码
SELECT 
    arrayJoin([1, 2, 3]) AS element,  -- 展开数组为多行
    arraySum([10, 20, 30]) AS total   -- 数组元素求和

4. 条件转换

sql 复制代码
SELECT 
    ifNull(value, 0) AS safe_value,    -- 将NULL转为0
    coalesce(NULL, 'default') AS coalesced_value  -- 返回第一个非NULL值

四、示例场景:电商数据分析

表结构

sql 复制代码
CREATE TABLE sales (
    entity_id UInt32,
    datetime DateTime,
    type Enum8('click' = 1, 'view' = 2),
    value Float64
) ENGINE = MergeTree()
ORDER BY datetime;

示例查询

sql 复制代码
-- 计算不同类型的平均值和标准差
SELECT 
    type,
    avg(value) AS average,
    stddevSamp(value) AS std_dev,
    quantile(0.5)(value) AS median
FROM sales
GROUP BY type;

-- 计算CPK(假设 USL=100, LSL=50)
WITH 
    (SELECT avg(value) FROM sales WHERE type = 'click') AS mean,
    (SELECT stddevSamp(value) FROM sales WHERE type = 'click') AS std_dev
SELECT 
    MIN(
        (100 - mean) / (3 * std_dev),
        (mean - 50) / (3 * std_dev)
    ) AS CPK;

五、注意事项

  1. 性能优化 :使用 uniqExact 替代 count(DISTINCT) 时需注意内存消耗。
  2. 版本兼容性 :部分函数(如 quantile 的精确度参数)可能因版本不同而有所差异。
  3. 自定义计算:复杂指标(如峰度、偏度)需手动实现,建议封装为视图或物化视图。

六、总结

ClickHouse 的统计函数和类型转换功能强大,能够高效处理大规模数据的分析需求。质量控制指标虽需结合业务逻辑自行计算,但通过组合内置函数可快速实现。建议结合实际场景,参考 ClickHouse官方文档 获取最新函数列表和最佳实践。

通过合理使用这些函数,开发者可以快速构建实时分析系统,满足从基础统计到复杂质量控制的多样化需求。

相关推荐
Chen-Edward11 分钟前
有了Spring为什么还有要Spring Boot?
java·spring boot·spring
陈小桔1 小时前
idea中重新加载所有maven项目失败,但maven compile成功
java·maven
小学鸡!1 小时前
Spring Boot实现日志链路追踪
java·spring boot·后端
xiaogg36781 小时前
阿里云k8s1.33部署yaml和dockerfile配置文件
java·linux·kubernetes
逆光的July2 小时前
Hikari连接池
java
微风粼粼2 小时前
eclipse 导入javaweb项目,以及配置教程(傻瓜式教学)
java·ide·eclipse
番茄Salad2 小时前
Spring Boot临时解决循环依赖注入问题
java·spring boot·spring cloud
天若有情6732 小时前
Spring MVC文件上传与下载全面详解:从原理到实战
java·spring·mvc·springmvc·javaee·multipart
祈祷苍天赐我java之术2 小时前
Redis 数据类型与使用场景
java·开发语言·前端·redis·分布式·spring·bootstrap
Olrookie3 小时前
若依前后端分离版学习笔记(二十)——实现滑块验证码(vue3)
java·前端·笔记·后端·学习·vue·ruoyi