>데이터 베이스 >MySQL 튜토리얼 >'WHERE master_id IS NOT NULL' 절을 추가하면 Hive에서 'COUNT(*)'가 ​​증가하는 이유는 무엇입니까?

'WHERE master_id IS NOT NULL' 절을 추가하면 Hive에서 'COUNT(*)'가 ​​증가하는 이유는 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2025-01-12 06:27:45364검색

Why Does Adding a `WHERE master_id IS NOT NULL` Clause Increase the `COUNT(*)` in Hive?

Hive 개수 예외: WHERE 절로 인해 개수가 증가합니다.

Hive 데이터 탐색 중 이상한 현상이 관찰되었습니다. 간단한 설명 select count(*) as c from mytable을 사용하여 계산하면 결과는 1,129,563입니다. 그러나 select count(*) as c from mytable where master_id is not null 필터를 추가하면 개수가 예기치 않게 1,134,041개로 늘어났습니다.

추가 조사에 따르면 master_id 열에는 항상 null이 아닌 값이 포함되어 있는 것으로 나타났습니다. 이는 다음과 같은 질문으로 이어집니다. null 값 제외 조건을 구현하면 실제로 행 수가 증가한다는 것을 어떻게 설명할 수 있을까요?

가능한 설명: Hive 통계

답은 Hive 통계의 영향을 이해하는 데 있습니다. 기본적으로 Hive는 통계를 활용하여 쿼리를 최적화하고 성능을 향상시킵니다. 필터링 없이 select count(*) as c from mytable 쿼리를 실행할 때 Hive는 저장된 통계를 사용하여 개수를 추정할 수 있습니다. 그러나 이러한 통계가 항상 정확하거나 최신인 것은 아닙니다.

이 경우 통계에 따르면 master_id 열에 null 값이 포함된 행이 많이 있는 것으로 나타날 수 있습니다. master_id is not null 필터를 추가할 때 Hive는 통계를 재평가하여 대부분의 행에 null이 아닌 값이 포함되어 있음을 인식했습니다. 이로 인해 눈에 띄는 불일치가 제거되어 보다 정확한 계산이 가능해집니다.

문제 해결 방법

정확한 개수를 얻으려면 특히 크게 변경되었거나 최근에 분석되지 않은 테이블로 작업할 때 다음을 수행하는 것이 좋습니다.

  • 통계 비활성화: hive.compute.query.using.stats=false을 설정하여 Hive가 통계를 사용하지 못하게 하고 전체 테이블 스캔을 강제 실행합니다.
  • 통계 수집: 테이블 통계를 수동으로 업데이트하고 정확성을 보장하려면 ANALYZE TABLE 명령을 사용하세요.
  • 자동 통계 수집 활성화: hive.stats.autogather=true와 같은 데이터 작업 중에 통계를 자동으로 수집하려면 INSERT OVERWRITE을 설정하세요.

위 내용은 'WHERE master_id IS NOT NULL' 절을 추가하면 Hive에서 'COUNT(*)'가 ​​증가하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.