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

相关推荐
赏点剩饭77838 分钟前
linux中的hostpath卷、nfs卷以及静态持久卷的区别
linux·运维·服务器
神鸟云1 小时前
DELL服务器 R系列 IPMI的配置
linux·运维·服务器·网络·边缘计算·pcdn
herderl1 小时前
**僵尸进程(Zombie Process)** 和**孤儿进程(Orphan Process)**
linux·运维·服务器·网络·网络协议
泽02021 小时前
Linux 编译器 gcc 与 g++
linux·运维·服务器
G_H_S_3_2 小时前
【网络运维】Playbook项目实战:基于 Ansible Playbook 一键部署 LNMP 架构服务器
linux·运维·服务器·网络·ansible
yuxb733 小时前
Ansible 学习笔记:变量事实管理、任务控制与文件部署
linux·运维·笔记
岚天start3 小时前
Linux sar命令详细使用指南
linux·运维·服务器·负载·sar·磁盘io·sysstat
遇见火星3 小时前
Jenkins全链路教程——Jenkins调用Maven构建项目
运维·jenkins·maven
wanhengidc7 小时前
当云手机出现卡顿怎么办?
运维·服务器·安全·智能手机