*Hive 개수() 예외: Null이 아닌 조건을 사용하여 SELECT하면 더 높은 개수가 반환됨**
Hive에서 특별한 동작이 관찰되었습니다. 비어 있지 않은 조건의 행 개수가 모든 행 개수보다 높은 값을 반환했습니다. 이 이상 현상을 조사해 보겠습니다.
"mytable"이라는 테이블에는 "master_id"라는 필드가 포함되어 있습니다. count(*) 함수를 사용하면 다음과 같은 결과를 얻을 수 있습니다.
<code class="language-sql">select count(*) as c from mytable; c 1129563</code>
그러나 "master_id"의 null이 아닌 값만 계산하는 조건을 추가하면 훨씬 더 많은 수를 얻게 됩니다.
<code class="language-sql">select count(*) as c from mytable where master_id is not null; c 1134041</code>
놀랍게도 별도의 쿼리에서는 "master_id"에 null 값이 없음을 보여줍니다.
<code class="language-sql">select count(*) as c from mytable where master_id is null; c 0</code>
null 값이 없는데 null이 아닌 조건을 추가하면 왜 더 높은 개수가 생성되나요?
가장 가능성이 높은 설명은 Hive 사용 통계에 있습니다. 기본적으로 Hive는 통계를 사용하여 행 수를 추정하여 쿼리 계획을 최적화합니다. 그러나 이러한 통계가 항상 정확하지는 않습니다.
이 문제를 해결하려면 다음 매개변수를 설정하여 통계 사용을 비활성화하세요.
<code class="language-sql">set hive.compute.query.using.stats=false;</code>
이제 쿼리를 다시 실행하면 일관된 결과가 생성됩니다.
또는 ANALYZE TABLE 구문을 사용하여 수동으로 통계를 계산할 수도 있습니다.
또한, hive.stats.autogather=true
을 설정하면 INSERT OVERWRITE
작업 중에 자동으로 통계를 수집하여 보다 정확한 통계를 보장하고 이러한 이상 현상을 방지합니다.
위 내용은 Null이 아닌 조건이 있는 하이브 'COUNT(*)'가 단순한 'COUNT(*)'보다 더 높은 개수를 반환하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!