Redshift: анализ всех столбцов с нулевыми значениями во всех таблицах в базе данных - PullRequest
0 голосов
/ 29 июня 2018

Необходимо найти количество нулевых, а не нулевых значений во всех столбцах всех таблиц в моей базе данных. С помощью запроса ниже я могу получить информацию для одной таблицы.

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, но я не уверен, как написать их для моего случая.

1 Ответ

0 голосов
/ 29 июня 2018

Пользовательские функции Python вам не помогут - они могут возвращать только одно значение.

Вам потребуется написать внешнюю по отношению к 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
...