Redshift:分析数据库中所有表中具有空值的所有列

时间:2018-06-29 11:29:05

标签: sql amazon-redshift user-defined-functions

需要在数据库的所有表的所有列中查找空值和非空值的计数。通过以下查询,我可以获得单个表的信息。

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,但是我不确定如何为我的情况编写它们。

1 个答案:

答案 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