如何识别 Snowflake 模式中只有空值的所有列

How to identify all columns in Snowflake schema that has only null values

(代表 Snowflake 客户提交)

.......................

需要过滤空数据列,听说可以在模式INFORMATION_SCHEMA的视图"COLUMNS"中找到数据库所有表的所有列的信息。

但是,我发现它没有显示 100% 准确度的正确数据。当我们将约束指定为非 Null 或它是主键时,它将显示 Non-nullable。对于其他列,它显示为 Nullable。但这不对,我们需要实际检查列中的数据,即使只有一条记录,那么该列是 Non-nullable。

还有其他方法吗?

.......................

有什么建议吗?

INFORMATION_SCHEMA 中的视图旨在描述数据库中 table 的结构,而不是它们的内容。通过查询 [=14] 的 COLUMNS 视图,您可以简单地确定哪些列 可能 可能不 包含 null 值=]:

select COLUMN_NAME, IS_NULLABLE from YOUR_DB.INFORMATION_SCHEMA.COLUMNS
where TABLE_NAME = 'YOUR_TABLE_NAME' and TABLE_SCHEMA = 'PUBLIC';

但是,这不会告诉您这些列是否真的包含空值。为此,您实际上需要 运行 对您感兴趣的 table 进行查询。幸运的是, count 函数隐含地只计算非空值,因此您可以轻松地使用它确定行的百分比包含 null 值它是您感兴趣的列。例如:

select count(1) as TOTAL, count(YOUR_COL) as YOUR_COL_NON_NULL
from YOUR_TABLE;

如果您的 table 有 100 行并且没有任何空值,您将取回

+-------+-------------------+
+ TOTAL | YOUR_COL_NON_NULL |
+-------+-------------------+
| 100   | 100               |
+-------+-------------------+

但是,如果您的 table 有 100 行,其中 25 行在 YOUR_COL 列中包含 null 个值,您将返回:

+-------+-------------------+
+ TOTAL | YOUR_COL_NON_NULL |
+-------+-------------------+
| 100   | 75                |
+-------+-------------------+

None 这是 Snowflake 特有的,它只是基本的 SQL。