2017-08-09 17 views
1

私はハイブSQLでの問題で苦労し、ただ、問題が何であったかを見出した:NULLHive SQLでNULL列のcount(distinct)が0を返すのはなぜですか?

select distinct 'A', NULL;   

戻り 'A'、

select count(distinct 'A', NULL); 

戻り0

select count(distinct 'A', coalesce(NULL,'')); 

リターン1.

私は大きなクエリの中でselect行を使用していました.f結果にフィルタリングされます(= 1)。結果は0で、私は多くの行を失った。

どのようにNULL列の行がカウント(別名)クエリの結果に寄与しないのでしょうか?

+0

数の定義は、()はnullでない値をカウントすることです。ヌル値がある場合はカウントされません。 –

答えて

4

これは、ハイブのcountのインタフェースです:

count(*)カウントすべての行

count(col1)カウントCOL1がnullでないすべての行

count(distinct col1,col2...)カウント指定された列がnullではないすべての個別の行

特定の問題の解決策として、論理を使用してネストされたクエリを作成し、外部クエリで:

select count(*) from (select distinct 'A', NULL) a;リターン1

+0

したがって、すべての列はNULLでなくてはなりませんか?それは説明しています。 – AVS

関連する問題