Clickhouse统计指定表中各字段的空值、空字符串或零值比例

下面是一段Clickhouse SQL代码,用于统计指定数据库中多张表的字段空值情况。代码通过动态生成查询语句实现自动化统计,处理逻辑如下:

  1. 从系统表获取指定数据库(替换your_database)中所有表的字段元数据
  2. 根据字段类型动态生成对应的空值统计逻辑
  3. 使用sum聚合函数统计空值记录数
  4. 计算空值占比百分比
  5. 结果包含数据库名、表名、字段名、字段类型、空值计数、总行数和空值占比
sql 复制代码
SELECT 
    database,
    table,
    column,
    type,
    count_empty,
    total_rows,
    ROUND(count_empty * 100.0 / total_rows, 2) AS percentage
FROM (
    SELECT 
        database,
        table,
        column,
        type,
        CASE 
            WHEN type LIKE 'String%' THEN
                (SELECT sum(TRIM(IFNULL({col}, '')) = '') FROM {db}.{tbl})
            WHEN type IN ('UInt8','UInt16','UInt32','UInt64','Int8','Int16','Int32','Int64','Float32','Float64') THEN
                (SELECT sum(IFNULL({col}, 0) = 0) FROM {db}.{tbl})
            ELSE 
                (SELECT sum({col} IS NULL) FROM {db}.{tbl})
        END AS count_empty,
        (SELECT count() FROM {db}.{tbl}) AS total_rows
    FROM system.columns 
    WHERE database = 'your_database' 
      AND table IN ('table1', 'table2', 'table3')  -- 替换为需要分析的表名
    SETTINGS 
        allow_experimental_analyzer = 1, 
        format_template = 'SELECT \'{database}\', \'{table}\', \'{column}\', \'{type}\', ${{col:Identifier}}, ${{tbl:Identifier}}, ${{db:String}}'
)

使用说明:

  1. 替换数据库名 :将代码中的'your_database'改为实际数据库名
  2. 指定表名 :修改table IN列表中的表名(如'table1', 'table2'
  3. 执行结果:查询将输出7列统计结果

处理逻辑说明:

字段类型 处理方式 空值定义
String TRIM(IFNULL(字段, '')) = '' 空字符串
数值类型 IFNULL(字段, 0) = 0 数值0
其他类型 字段 IS NULL NULL值

输出列说明:

列名 说明
database 数据库名称
table 表名称
column 字段名称
type 字段类型
count_empty 空值记录数(空串/0/NULL)
total_rows 表总行数
percentage 空值占比百分比(保留两位小数)

注意:对于数值类型字段,真实值为0的记录也会被统计在内。若需区分真实0值和空值,需要额外的业务逻辑处理。

相关推荐
Vinton_Liu1 分钟前
NAT 类型详解:四种 NAT 的数据流与原理解析
运维·服务器
一个处女座的程序猿O(∩_∩)O3 分钟前
如何保持nginx配置与前端打包dist的路径保持一致、解决页面刷新白屏以及页面跳转问题
运维·前端·nginx
想唱rap3 分钟前
五种IO模型和非阻塞IO
linux·运维·服务器·网络·数据库·tcp/ip
环流_5 分钟前
nacos:负载均衡 3大核心操作
运维·nacos·负载均衡
阿洛学长41 分钟前
CSDN、掘金、简书博客文章如何转为Markdown?
运维·数据库·架构·php·持续部署
方安乐43 分钟前
交换机的自学机制
运维·服务器·网络
MXsoft6182 小时前
**智能运维如何实现全栈监控与****AI****告警?****——****一体化平台实战解析**
运维·人工智能
MXsoft6182 小时前
**运维体系升级:筑牢企业数字化转型的稳定底座**
运维
MXsoft6183 小时前
**一体化智能运维如何破解跨区域****IT****管理****难题****?**
运维