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

Snowflake统计表各列NULL值的SQL实现(替代SQL Server方案)

Snowflake 自动统计表各列NULL值方案

方案一:无存储过程(优先推荐,无权限限制)

该方案利用Snowflake的EXECUTE IMMEDIATE语句自动执行动态生成的SQL,无需手动复制代码,完美适配权限受限场景。

完整代码

-- 设置目标表的数据库、Schema和表名
SET DBName = 'YOUR_DATABASE';
SET SchemaName = 'YOUR_SCHEMA';
SET TableName = 'YOUR_TABLE';

-- 拼接完整的动态查询语句(用STRING_AGG替代递归CTE,更简洁高效)
SET dynamic_sql = (
    SELECT STRING_AGG(
        'SELECT ''' || c.column_name || ''' AS COLUMN_NAME, SUM(CASE WHEN ' || c.column_name || ' IS NULL THEN 1 ELSE 0 END) AS NULLVALUES FROM ' || $DBName || '.' || $SchemaName || '.' || $TableName,
        ' UNION ALL '
    )
    FROM information_schema.tables t
    JOIN information_schema.columns c 
        ON t.table_name = c.table_name AND t.table_schema = c.table_schema
    WHERE t.table_name = $TableName AND t.table_schema = $SchemaName
);

-- 自动执行动态SQL,直接输出结果
EXECUTE IMMEDIATE $dynamic_sql;

核心优势

  • 替代原递归CTE的STRING_AGG函数,大幅简化代码逻辑
  • 全程自动完成SQL生成与执行,无需人工介入复制步骤
  • 输出结果严格匹配需求格式:COLUMN_NAME列显示列名,NULLVALUES列显示对应空值数量

方案二:存储过程方案(备用)

若权限允许,可封装为复用性更强的存储过程,支持快速查询任意表的列空值统计。

存储过程代码

CREATE OR REPLACE PROCEDURE COUNT_COLUMN_NULLS(db_name VARCHAR, schema_name VARCHAR, table_name VARCHAR)
RETURNS TABLE(COLUMN_NAME VARCHAR, NULLVALUES INTEGER)
LANGUAGE SQL
AS
$$
DECLARE
    dynamic_sql VARCHAR;
BEGIN
    -- 拼接动态查询语句
    dynamic_sql := (
        SELECT STRING_AGG(
            'SELECT ''' || c.column_name || ''' AS COLUMN_NAME, SUM(CASE WHEN ' || c.column_name || ' IS NULL THEN 1 ELSE 0 END) AS NULLVALUES FROM ' || db_name || '.' || schema_name || '.' || table_name,
            ' UNION ALL '
        )
        FROM information_schema.tables t
        JOIN information_schema.columns c 
            ON t.table_name = c.table_name AND t.table_schema = c.table_schema
        WHERE t.table_name = table_name AND t.table_schema = schema_name
    );
    
    -- 执行并返回格式化结果
    RETURN TABLE(EXECUTE IMMEDIATE :dynamic_sql);
END;
$$;

使用方法

调用存储过程传入目标表参数即可:

CALL COUNT_COLUMN_NULLS('YOUR_DATABASE', 'YOUR_SCHEMA', 'YOUR_TABLE');

核心优势

  • 一次创建可重复用于任意表,无需重复编写动态SQL
  • 参数化设计,查询不同表仅需修改传入参数
  • 执行结果直接返回符合要求的结构化数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 10:45:37