> 데이터 베이스 > MySQL 튜토리얼 > Null이 아닌 값을 필터링한 후 내 하이브 'COUNT(*)'가 ​​증가하는 이유는 무엇입니까?

Null이 아닌 값을 필터링한 후 내 하이브 'COUNT(*)'가 ​​증가하는 이유는 무엇입니까?

DDD
풀어 주다: 2025-01-12 10:55:44
원래의
424명이 탐색했습니다.

Why Does My Hive `COUNT(*)` Increase After Filtering for Non-Null Values?

*Hive의 `COUNT()` 필터링 후 예상치 못한 결과 발생**

Hive의 COUNT(*) 기능을 사용하면 때로는 놀라운 결과가 나올 수 있습니다. "master_id" 열이 있는 "mytable" 테이블을 생각해 보세요.

초기 개수 쿼리에서는 1,129,563개의 행이 표시됩니다.

<code class="language-sql">SELECT COUNT(*) AS c FROM mytable;</code>
로그인 후 복사

그러나 null이 아닌 "master_id" 값을 필터링하면 개수가 예기치 않게 1,134,041로 증가합니다.

<code class="language-sql">SELECT COUNT(*) AS c FROM mytable WHERE master_id IS NOT NULL;</code>
로그인 후 복사

이것은 특히 null "master_id" 값을 검사하는 쿼리가 0을 반환하기 때문에 매우 혼란스럽습니다.

<code class="language-sql">SELECT COUNT(*) AS c FROM mytable WHERE master_id IS NULL;</code>
로그인 후 복사

불일치의 원인

이러한 불일치는 Hive가 쿼리 최적화를 위해 테이블 ​​통계에 의존하기 때문에 발생합니다. COUNT(*) 절이 없는 초기 WHERE 쿼리에서는 전체 테이블 스캔 대신 추정 통계를 사용할 수 있습니다. WHERE 절을 추가하면 전체 테이블 스캔이 강제되어 정확하고 더 많은 행 수가 생성됩니다.

정확한 집계 방법

정확한 결과를 보장하려면 다음 해결 방법을 고려하세요.

  1. 통계 기반 최적화 비활성화: Hive가 쿼리 최적화를 위해 통계를 사용하지 못하도록 방지:

    <code class="language-sql">SET hive.compute.query.using.stats=false;</code>
    로그인 후 복사
  2. 테이블 통계 수동 업데이트: 테이블 통계를 새로 고치려면 ANALYZE TABLE 명령을 사용하세요.

    <code class="language-sql">ANALYZE TABLE mytable COMPUTE STATISTICS;</code>
    로그인 후 복사
  3. 자동 통계 수집 활성화: INSERT OVERWRITE 작업 중에 통계를 자동으로 업데이트하도록 Hive를 구성합니다.

    <code class="language-sql">SET hive.stats.autogather=true;</code>
    로그인 후 복사

이러한 방법 중 하나를 구현하면 COUNT(*) 쿼리가 일관되게 정확한 행 수를 반환하도록 할 수 있습니다.

위 내용은 Null이 아닌 값을 필터링한 후 내 하이브 'COUNT(*)'가 ​​증가하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿