HiveQL에서where 뒤에 있는 and 및 or 처리
1557 단어 HiveQL
HiveQL:
select ,a.ver,a.vid,a.wid,a.type,count(*) from (select stat_date,ver,get_json_object(json,"$.vid") as vid,get_json_object(json,"$.wid") as wid,get_json_object(json,"$.type") as type from iphonevv_ where stat_date= and ver >= '3.5.0' and get_json_object(json,"$.type")=4 or get_json_object(json,"$.type")=5 or get_json_object(json,"$.type")=6 )a group by a.stat_date,a.ver,a.vid,a.wid,a.type
내 생각은:statdate=and ver>='3.5.0', 뒤에 있는 것은 or면 되지만 결과는 그렇지 않습니다. 많은 ver가 3.5.0보다 크지 않습니다. 저는 오랫동안 고민을 했습니다. 어디에 문제가 생겼는지 모르겠습니다. 왜 ver>='3.5.0'은 작용하지 않습니까?오늘 조사해 보니 원래where 뒤에 있는 and와 or의 문제로 인한 것이었다.
결과는 다음과 같이 수정되었습니다.
select ,a.ver,a.vid,a.wid,a.type,count(*) from (select stat_date,ver,get_json_object(json,"$.vid") as vid,get_json_object(json,"$.wid") as wid,get_json_object(json,"$.type") as type from iphonevv_ where stat_date= and ver >= '3.5.0' and (get_json_object(json,"$.type")=4 or get_json_object(json,"$.type")=5 or get_json_object(json,"$.type")=6 ))a group by a.stat_date,a.ver,a.vid,a.wid,a.type
or의 조건을 () 안에 두면 문제가 해결된다.
where 뒤에 and, or의 조건이 있으면 or는 자동으로 좌우의 조회 조건을 분리합니다. 즉, 먼저 and를 실행하고 나서 or를 실행합니다.원인은 다음과 같다. and의 실행 우선순위가 가장 높다!
관계형 연산자 우선 순위가 낮음: not and or
문제의 해결 방법은 다음과 같습니다.
실행 순서를 ()로 변경합니다!!!!