집 >데이터 베이스 >MySQL 튜토리얼 >'WHERE master_id IS NOT NULL' 절을 추가하면 Hive에서 'COUNT(*)'가 증가하는 이유는 무엇입니까?
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!