HIVE select count (*) non null возвращает большее значение, чем select count(*)


В настоящее время я провожу некоторые исследования данных с Hive и не могу объяснить следующее поведение. Допустим, у меня есть таблица (mytable) с полем master_id.

Когда я считаю число строк, я получаю

select count(*) as c from mytable 
c
1129563

Если я хочу подсчитать число строк с ненулевым master_id, я получаю более высокое число

select count(*) as c from mytable where master_id is not null
c
1134041

Кроме того, master_id, по-видимому, никогда не бывает нулевым.

select count(*) as c from mytable where master_id is null
c
0
Я не могу объяснить, как добавление оператора where может в конечном итоге увеличить число строк. Есть ли у кого-нибудь намек, чтобы объяснить это поведение ?

Спасибо

1 5

1 ответ:

Скорее всего, ваш запрос без where использует статистику, потому что этот параметр установлен:

set hive.compute.query.using.stats=true;

Попробуйте установить его false и выполнить снова.

В качестве альтернативы вы можете вычислить статистику по таблице. См. синтаксис таблицы ANALYZE

Также можно собирать статистику во время вставки перезаписи автоматически:

set hive.stats.autogather=true;