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

Posted

技术标签:

【中文标题】Redshift:分析数据库中所有表中具有空值的所有列【英文标题】:Redshift: Analysis of all columns with null values in all the tables in a database 【发布时间】:2018-06-29 11:29:05 【问题描述】:

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

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】:

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

【讨论】:

以上是关于Redshift:分析数据库中所有表中具有空值的所有列的主要内容,如果未能解决你的问题,请参考以下文章

在表中为每个数据库查找具有空值的列[关闭]

如何获取表中具有空值的行,并且没有任何关于任何列名的行?

SQL - 仅从表中获取并非所有值都是空值的列

在 Redshift SQL 中标记具有相同值的所有行

在另一列上复制在某些条件下具有空值的列

需要为每条记录查找具有空值的所有列 - 访问 SQL 或 vba