如何在Snowflake模式中识别仅具有空值的所有列

时间:2019-10-10 21:28:04

标签: snowflake-data-warehouse

(代表Snowflake客户提交)

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

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

但是,我发现不能正确显示100%的正确数据。当我们给出的约束不是Null或它是主键时,它将显示Non-nullable。对于其他列,它显示Nullable。但这是不对的,即使有一条记录表明该列是不可为空的,我们也需要实际检查该列中的数据。

还有另一种方法吗?

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

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

INFORMATION_SCHEMA中的视图用于描述数据库中表的结构,而不是其内容。您可以通过查询null的{​​{1}}视图来确定哪些列可能可能不包含COLUMNS值:

INFORMATION_SCHEMA

但是,这不会告诉您这些列是否实际上包含null。为此,您实际上需要对您感兴趣的表运行查询。幸运的是,select COLUMN_NAME, IS_NULLABLE from YOUR_DB.INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = 'YOUR_TABLE_NAME' and TABLE_SCHEMA = 'PUBLIC'; 函数隐式仅计算非空值,因此您可以轻松地使用它来确定包含{ {1}}将其视为您感兴趣的列。例如:

count

如果您的表有100行并且从不包含任何空值,您将得到

null

但是,如果您的表有100行,其中25行包含select count(1) as TOTAL, count(YOUR_COL) as YOUR_COL_NON_NULL from YOUR_TABLE; 列中的+-------+-------------------+ + TOTAL | YOUR_COL_NON_NULL | +-------+-------------------+ | 100 | 100 | +-------+-------------------+ 值,则会返回:

null

这些都不是Snowflake特有的,只是基本的SQL。