需要在数据库的所有表的所有列中查找空值和非空值的计数。通过以下查询,我可以获得单个表的信息。
SELECT
'A' as col_name,
COUNT(*) - COUNT(A) as nul_val,
COUNT(A) as nnul_val
FROM table1
UNION
SELECT
'B' as col_name,
COUNT(*) - COUNT(B) as nul_val,
COUNT(B) as nnul_val
FROM table1
我可以查询information_schema以获得列名和表名的列表。
SELECT column_name, table_name from information_schema.columns;
如何将此处的column_name和table_name值传递给主查询?我的数据库是Redshift,没有任何变量。很可能需要使用python UDF,但是我不确定如何为我的情况编写它们。
答案 0 :(得分:0)
Python UDF无法帮助您-它们只能返回一个值。
您将需要编写Redshift外部的程序来收集表及其列的列表,然后对每个表和表的特定列运行查询。
顺便说一句,可能有一种更简单的方法来计算空值,如下所示:
SELECT
SUM(CASE WHEN column1 IS NULL THEN 1 END) as column1_null_count,
SUM(CASE WHEN column1 IS NOT NULL THEN 1 END) as column1_not_null_count,
SUM(CASE WHEN column2 IS NULL THEN 1 END) as column2_null_count,
SUM(CASE WHEN column2 IS NOT NULL THEN 1 END) as column2_not_null_count
FROM table