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值和空值,需要额外的业务逻辑处理。

相关推荐
乘云数字DATABUFF3 天前
5分钟部署开源APM Databuff:OpenTelemetry全链路追踪入门实战
运维·后端
荣--5 天前
一键部署不是为了省时间 —— 它是把"买来的 PaaS"变成"自己的平台"的拐点
运维·zabbix·工程化·一键部署·平台化·边界设计
江华森5 天前
动手实战学 Docker — 从零到集群编排完全指南
运维
Avan_菜菜5 天前
FRP 内网穿透完整实战:从 HTTP 映射到 HTTPS 自签代理
运维·nginx·https
SelectDB6 天前
Litefuse 开源并推出单进程轻量模式,25 秒就能跑起来的 Agent 可观测与评估平台
运维·后端·自动化运维
XIAOHEZIcode8 天前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户0328472220708 天前
如何搭建本地yum源(上)
运维
大树8811 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠11 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质11 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务