[ https://issues.apache.org/jira/browse/HIVE-9745?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Xuefu Zhang updated HIVE-9745: ------------------------------ Description: The following query should return 5 rows but Hive returns 3 {code} select rnum, tchar.cchar from tchar where not ( tchar.cchar = ' ' or ( tchar.cchar is null and ' ' is null )) {code} Consider the following project of the base table {code} select rnum, tchar.cchar, case tchar.cchar when ' ' then 'space' else 'not space' end, case when tchar.cchar is null then 'is null' else 'not null' end, case when ' ' is null then 'is null' else 'not null' end from tchar order by rnum {code} Row 0 is a NULL Row 1 was loaded with a zero length string '' Row 2 was loaded with a single space ' ' {code} rnum tchar.cchar _c2 _c3 _c4 0 <null> not space is null not null 1 not space not null not null 2 not space not null not null 3 BB not space not null not null 4 EE not space not null not null 5 FF not space not null not null {code} Explicitly type cast the literal which many SQL developers would not expect need to do. {code} select rnum, tchar.cchar, case tchar.cchar when cast(' ' as char(1)) then 'space' else 'not space' end, case when tchar.cchar is null then 'is null' else 'not null' end, case when cast( ' ' as char(1)) is null then 'is null' else 'not null' end from tchar order by rnum rnum tchar.cchar _c2 _c3 _c4 0 <null> not space is null not null 1 space not null not null 2 space not null not null 3 BB not space not null not null 4 EE not space not null not null 5 FF not space not null not null create table if not exists T_TCHAR ( RNUM int , CCHAR char(32 ) ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '|' LINES TERMINATED BY '\n' STORED AS TEXTFILE ; 0|\N 1| 2| 3|BB 4|EE 5|FF create table if not exists TCHAR ( RNUM int , CCHAR char(32 ) ) STORED AS orc ; insert overwrite table TCHAR select * from T_TCHAR; {code} was: The following query should return 5 rows but Hive returns 3 select rnum, tchar.cchar from tchar where not ( tchar.cchar = ' ' or ( tchar.cchar is null and ' ' is null )) Consider the following project of the base table select rnum, tchar.cchar, case tchar.cchar when ' ' then 'space' else 'not space' end, case when tchar.cchar is null then 'is null' else 'not null' end, case when ' ' is null then 'is null' else 'not null' end from tchar order by rnum Row 0 is a NULL Row 1 was loaded with a zero length string '' Row 2 was loaded with a single space ' ' rnum tchar.cchar _c2 _c3 _c4 0 <null> not space is null not null 1 not space not null not null 2 not space not null not null 3 BB not space not null not null 4 EE not space not null not null 5 FF not space not null not null Explicitly type cast the literal which many SQL developers would not expect need to do. select rnum, tchar.cchar, case tchar.cchar when cast(' ' as char(1)) then 'space' else 'not space' end, case when tchar.cchar is null then 'is null' else 'not null' end, case when cast( ' ' as char(1)) is null then 'is null' else 'not null' end from tchar order by rnum rnum tchar.cchar _c2 _c3 _c4 0 <null> not space is null not null 1 space not null not null 2 space not null not null 3 BB not space not null not null 4 EE not space not null not null 5 FF not space not null not null create table if not exists T_TCHAR ( RNUM int , CCHAR char(32 ) ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '|' LINES TERMINATED BY '\n' STORED AS TEXTFILE ; 0|\N 1| 2| 3|BB 4|EE 5|FF create table if not exists TCHAR ( RNUM int , CCHAR char(32 ) ) STORED AS orc ; insert overwrite table TCHAR select * from T_TCHAR; > predicate evaluation of character fields with spaces and literals with spaces > returns unexpected result > ------------------------------------------------------------------------------------------------------- > > Key: HIVE-9745 > URL: https://issues.apache.org/jira/browse/HIVE-9745 > Project: Hive > Issue Type: Bug > Components: SQL > Affects Versions: 0.14.0 > Reporter: N Campbell > > The following query should return 5 rows but Hive returns 3 > {code} > select rnum, tchar.cchar from tchar where not ( tchar.cchar = ' ' or ( > tchar.cchar is null and ' ' is null )) > {code} > Consider the following project of the base table > {code} > select rnum, tchar.cchar, > case tchar.cchar when ' ' then 'space' else 'not space' end, > case when tchar.cchar is null then 'is null' else 'not null' end, case when ' > ' is null then 'is null' else 'not null' end > from tchar > order by rnum > {code} > Row 0 is a NULL > Row 1 was loaded with a zero length string '' > Row 2 was loaded with a single space ' ' > {code} > rnum tchar.cchar _c2 _c3 _c4 > 0 <null> not space is null not null > 1 not space not null > not null > 2 not space not null > not null > 3 BB not space not null > not null > 4 EE not space not null > not null > 5 FF not space not null > not null > {code} > Explicitly type cast the literal which many SQL developers would not expect > need to do. > {code} > select rnum, tchar.cchar, > case tchar.cchar when cast(' ' as char(1)) then 'space' else 'not space' end, > case when tchar.cchar is null then 'is null' else 'not null' end, case when > cast( ' ' as char(1)) is null then 'is null' else 'not null' end > from tchar > order by rnum > rnum tchar.cchar _c2 _c3 _c4 > 0 <null> not space is null not null > 1 space not null not null > 2 space not null not null > 3 BB not space not null > not null > 4 EE not space not null > not null > 5 FF not space not null > not null > create table if not exists T_TCHAR ( RNUM int , CCHAR char(32 ) ) > ROW FORMAT DELIMITED FIELDS TERMINATED BY '|' LINES TERMINATED BY '\n' > STORED AS TEXTFILE ; > 0|\N > 1| > 2| > 3|BB > 4|EE > 5|FF > create table if not exists TCHAR ( RNUM int , CCHAR char(32 ) ) > STORED AS orc ; > insert overwrite table TCHAR select * from T_TCHAR; > {code} -- This message was sent by Atlassian JIRA (v6.3.4#6332)