You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求通用Presto SQL查询语句:计算表所有字段的填充率

通用Presto SQL查询:计算任意表所有字段的填充率

核心查询语句

以下查询无需手动指定列名,可自动适配任意列数的表,替换your_table为目标表名即可使用:

WITH total_rows AS (
    SELECT COUNT(*) AS total
    FROM your_table
)
SELECT
    column_name,
    COUNT(CASE WHEN value IS NOT NULL THEN 1 END) / total AS fill_rate
FROM your_table,
     UNNEST(MAP_ENTRIES(JSON_PARSE(TO_JSON(your_table)))) AS t(column_name, value),
     total_rows
GROUP BY column_name, total
ORDER BY column_name;

逻辑拆解

  1. 总行数统计:通过total_rows公共表表达式(CTE)先计算表的总行数,作为填充率计算的分母
  2. 行转键值对:用TO_JSON把每行数据转为JSON对象,再通过JSON_PARSE和MAP_ENTRIES将其拆解为「列名-字段值」的键值对数组
  3. 展开聚合:用UNNEST把键值对数组展开为行数据,最后按列名聚合,统计非空值数量并除以总行数得到填充率

示例验证

针对你提到的3行4列测试表,执行查询后会输出符合预期的结果:

column_namefill_rate
A0.666...
B0.333...
C0.333...
D1.0

如果需要保留两位小数,可修改填充率计算逻辑:

ROUND(COUNT(CASE WHEN value IS NOT NULL THEN 1 END) / total, 2) AS fill_rate

额外提示

  • 若需过滤特定行(如分区数据),直接在your_table后添加WHERE条件即可
  • 支持所有数据类型列,包括数组、结构体等复杂类型,非空值都会被统计
  • 大表场景下,建议添加分区过滤或采样逻辑提升查询效率

内容的提问来源于stack exchange,提问作者aju_dev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 17:25:21