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

相关推荐
Lenyiin11 小时前
Linux 项目托管 `git`
linux·运维·服务器·git·lenyiin
Blossom.11811 小时前
基于时序大模型+强化学习的虚拟电厂储能调度系统:从负荷预测到收益最大化的实战闭环
运维·人工智能·python·决策树·机器学习·自动化·音视频
阿达_优阅达12 小时前
集成方案 | 通过 Xtract Universal,将 SAP 数据无缝接入 Power BI 与微软 Fabric
运维·microsoft·sap·fabric·theobald
网络小白不怕黑18 小时前
Docker容器网络:四大模式解析与自定义网络
运维·docker·容器
FeelTouch Labs1 天前
Nginx核心架构设计
运维·前端·nginx
程序员zgh1 天前
Linux系统常用命令集合
linux·运维·服务器·c语言·开发语言·c++
gwd2001 天前
如何快速设置 Docker 代理设置
运维·人工智能·docker·容器
紫郢剑侠1 天前
飞秋@Windows +iptux@Linux,打造内网跨平台IM环境
linux·运维·服务器·im·qq
保持低旋律节奏1 天前
linux——调试
linux·运维·服务器
牛奶咖啡131 天前
Linux系统故障排查思路实践教程(下)
linux·运维·服务器·su命令切换用户问题解决·文件打开过多问题解决·linux网络故障问题解决·linux故障排查思路