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

相关推荐
峥无2 小时前
Linux进程信号:从基础概念到内核底层原理
linux·运维·服务器·信号处理
北山有鸟2 小时前
用开发板的.config替换ubuntu中内核源码目录的.config
linux·运维·ubuntu
qq_452396233 小时前
第二十篇:《Docker 故障排查常用命令与技巧》
运维·docker·容器
jcbut3 小时前
离线安装dify 1.7
linux·运维·dify
云计算磊哥@3 小时前
运维开发宝典024-Linux云计算运维入门阶段总结
linux·运维·运维开发
周小码4 小时前
10分钟搭建私有Git服务器:Soft Serve实战
运维·服务器·git
The Open Group4 小时前
从项目到产品:数字化转型为何进入“产品时代”?
运维
Urbano4 小时前
休闲束脚裤全生产工艺科普:从裁片到成衣,缝纫工序与自动化设备选型详解
运维·自动化
萤丰信息4 小时前
AI 重构园区运维|全场景无人化智慧运维:破解传统物业高成本痛点
运维·人工智能·重构
AI创界者5 小时前
运维进阶:如何使用 Medusa 进行企业内部服务器密码合规性审计?
运维·服务器