색조에서 하나의 하이브 테이블의 합계 함수를 실행하고 NaN의 반환 값을 가져옵니다. 그것은 나에게 NaN의 결과를주는 이유를 모르겠어요하이브에서 NaN 값을 가진 행을 필터링하는 방법은 무엇입니까?
select sum(v1) from hivedb.tb1;
:
여기 내 코드입니다. 내 V1 값 중 하나가 null의 경우 내가 확인 :
select * from hivedb.tb1 where v1 is null;
를, 그리고 null 값을 가지고 어떤 기록을 밝혀 없습니다. 표에는 1 억 개의 행이 있으므로 각 레코드에 대한 수동 확인을 수행 할 수 없습니다.
- 아무도 왜 NaN 결과를 얻는 지 알고 있습니까?
- 그리고 일부 행에 일부 비정상적인 값이 있기 때문에 어떻게 찾을 수 있습니까?
도움을 주시면 감사하겠습니다. 미리 감사드립니다.
업데이트 1 수동으로 첫 번째 1000 개의 행을 스크리닝하고 tb1에 NaN의 비정상적인 값을 찾아 냈습니다. 이전 단계의 반올림 오류로 인해 발생합니다. 그래서 제 질문 1이 대답 될 것입니다. 다른 이유가있을 수 있다고 생각되면 자유롭게 의견을 말하십시오.
효율적인 방법으로 NaN 값을 가진 행을 찾는 방법을 여전히 모르겠습니다. 그래서 나는 아직도 내 질문 # 2에 대한 답변을 기다리고있다. 언제든지 공유하십시오. 도와 주셔서 감사합니다.
업데이트 2 아래의 토론 섹션에서 허용되는 답변에서 문제가 해결되었습니다. 여러 가지 방법으로 처리 할 수 있습니다.
- v1 + 1> v1의 조건 선택을 사용하십시오. NaN이 아닌 값이있는 행을 선택합니다.
- cast (v1 as String) = 'NaN'의 조건 선택을 사용하십시오. NaN 값을 가진 행을 선택합니다.
아, 어서, SQL 집계를 계산할 때 Null 값은 무시됩니다. 반면에 1 억 개의 값의 합계가 Integer 또는 Float 또는 Decimal (p, s)의 용량을 오버플로 할 수 있습니다. 그건 그렇고,'v1'의 데이터 타입은 무엇입니까? 그리고 당신은'sum (cast (v1 as Double))'을 시도 했습니까? –
@Samson Scharfrichter 네 말이 맞아. 난 그냥 비정상적인 행을 선택하는 방법을 모르겠습니다. 그래도 나머지는 고맙다. 질문에 다시, v1은 두 배입니다. – Counter10000
@SamsonScharfrichter 감사합니다. 나는 그것을 알아낼지도 모른다. 우연히, 수천 개의 행을 수작업으로 검사하고 운 좋게도 NaN 값을 tb1에 두었습니다. 반올림 오류로 인해 생성됩니다. 그래서 내 첫 번째 질문은 좀 대답, 이는 tb1에 존재하는 NaN 값입니다. 그러나 나는 아직도 나의 질문 # 2를 다루는 방법을 모른다. 통찰력이 있다면 언제든지 공유하십시오. – Counter10000