我有一个大表,有 500 列和 100M 行。基于一个小样本,我相信只有大约 50 列包含任何值,其他 450 列仅包含 NULL 值。我想列出不包含数据的列。
在我当前的硬件上,查询每一列大约需要 24 小时(select count(1) from tab where col_n is not null
)
是否有更便宜的方法来确定列完全为空/NULL?
那这个呢:
SELECT
SUM(CASE WHEN column_1 IS NOT NULL THEN 1 ELSE 0) column_1_count,
SUM(CASE WHEN column_2 IS NOT NULL THEN 1 ELSE 0) column_2_count,
...
FROM table_name
?
如果您使用 INFORMATION_SCHEMA.COLUMNS 表,则可以轻松创建此查询。
EDIT:
另一个想法:
从表名中选择 MAX(列_1), MAX(列_2),.....
如果结果包含值,则填充列。它应该需要一次表扫描。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)