2016-12-19 4 views
2

Как мы можем получить нулевые и ненулевые значения всех столбцов таблицы в Vertica? Таблица может иметь n количество столбцов, и для каждого столбца нам нужно получить количество значений NULL и ненулевых значений этой таблицы.Vertica. Count of Null и Not-Null всех столбцов таблицы

Для примера. Ниже таблице два столбца

column1 Column2 
1   abc 
      pqr 
3 
      asd 
5 

Если его определенный столбец, то мы можем проверить, как

SELECT COUNT(*) FROM table where column1 is null; 
SELECT COUNT(*) FROM table where column1 is not null; 

тот же запрос для COLUMN2

Я проверил системные таблицы, как projection_storage и другие, но я не могу понять из общего запроса, который дает детали жестким кодированием только TABLE NAME в запросе.

ответ

1

Привет @ user2452689: Вот динамически сгенерированный оператор VSQL который отвечает вашим требованиям подсчета нулям & не NULLS в N столбцов. Обратите внимание, что это записывает временный файл SQL в ваш рабочий каталог, а затем выполняет его с помощью команды \ i. Вам нужно всего лишь изменить первые две переменные на таблицу. Надеюсь это поможет. Удачи! :-D

--CHANGE SCHEMA AND TABLE PARAMETERS ONLY: 
\set table_schema '\'public\'' 
\set table_name '\'dim_promotion\'' 
--------- 
\o temp_sql_file 
\pset tuples_only 
select e'select \'' || :table_schema || e'\.' || :table_name || e'\' as table_source' as txt 
union all 
select * from (
select 
', sum(case when ' || column_name || ' is not null then 1 else 0 end) as ' || column_name || '_NOT_NULL 
, sum(case when ' || column_name || ' is null then 1 else 0 end) as ' || column_name || '_NULL' as txt 
from columns 
where table_schema = :table_schema 
and table_name = :table_name 
order by ordinal_position 
) x 
union all 
select ' from ' || :table_schema || e'.' || :table_name || ';' as txt ; 
\o 
\pset tuples_only 
\i temp_sql_file 
+0

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

+0

Я попытался предоставить имя схемы и таблицы. Но мой temp_sql_file содержит только select abc.table как table_source из abc.table – user2452689

+0

. В файле temp_sql_file должен содержаться полный оператор SQL, который вы будете запускать ... он будет выглядеть примерно так, как этот SQL ниже. Вы запускаете его с помощью команды \ i. выберите «public.TABLE_TEST», как table_source , сумма (случай, когда COL_01 не равно нулю, то 1 еще 0 конец) как COL_01_NOT_NULL , сумма (случай, когда COL_01 равна нулю, то 1 еще 0 конец), как COL_01_NULL от public.TABLE_TEST ; –

0

Вы можете использовать:

select count(*) as cnt, 
     count(column1) as cnt_column1, 
     count(column2) as cnt_column2 
from t; 

count() с именем столбца или выражения подсчитывает количество непредставленных NULL значений в столбце/выражение.

(Очевидно, что число NULL значений cnt - cnt_columnX.)

0
select column1_not_null 
     ,column2_not_null 
     ,column3_not_null 

     ,cnt - column1_not_null as column1_null 
     ,cnt - column2_not_null as column2_null 
     ,cnt - column3_not_null as column3_null 


from (select count(*)   as cnt 

       ,count (column1) as column1_not_null 
       ,count (column2) as column2_not_null 
       ,count (column3) as column3_not_null 

     from mytable 
     ) t