跳转到主要内容

如何计算表中每一列的空值/零值占比

如果某一列是稀疏的 (为空或大多数值为零) ,ClickHouse 可以将其编码为稀疏格式,并自动优化计算——查询时无需对数据进行完全解压。实际上,如果你知道某一列的稀疏程度,就可以通过 ratio_of_defaults_for_sparse_serialization 设置 来定义其占比,从而优化序列化。 这个实用查询可能需要一些时间,但它会分析表中的每一行,并计算指定表中每一列的零值 (或默认值) 占比:
例如,我们在上文中对名为 sensorsenvironmental sensors dataset表执行了这个查询;该表包含超过 200 亿行和 19 列:
响应如下:
根据上述结果:
  • sensor_id 列完全不稀疏。实际上,每一行都有一个非零值
  • sensor_type 列只有大约 15.9% 的情况下是稀疏的
  • P0 列非常稀疏:99.9% 的值都是零
  • pressure 列相当稀疏,达到 83%
  • temperature 列有 53.2% 的值缺失或为零
正如前面所说,这条查询语句很适合用来计算 ClickHouse 表中各列的稀疏程度!
最后修改于 2026年6月19日