Zhihua Deng created HIVE-24632: ---------------------------------- Summary: Replace with null when GenericUDFBaseCompare has a non-interpretable val Key: HIVE-24632 URL: https://issues.apache.org/jira/browse/HIVE-24632 Project: Hive Issue Type: Improvement Components: Parser Affects Versions: 4.0.0 Reporter: Zhihua Deng
The query {code:java} create table ccn_table(key int, value string); set hive.cbo.enable=false; select * from ccn_table where key > '123a' ; {code} will scan all records(partitions) compared to older version, as the plan tells: {noformat} STAGE PLANS: Stage: Stage-0 Fetch Operator limit: -1 Processor Tree: TableScan alias: ccn_table filterExpr: (key > '123a') (type: boolean) Statistics: Num rows: 2 Data size: 180 Basic stats: COMPLETE Column stats: COMPLETE GatherStats: false Filter Operator isSamplingPred: false predicate: (key > '123a') (type: boolean) Statistics: Num rows: 1 Data size: 90 Basic stats: COMPLETE Column stats: COMPLETE Select Operator expressions: key (type: int), value (type: string) outputColumnNames: _col0, _col1 Statistics: Num rows: 1 Data size: 90 Basic stats: COMPLETE Column stats: COMPLETE ListSink{noformat} When the TypeCheckProcFactory#getXpathOrFuncExprNodeDesc validates the expr: +key > '123a',+ the operator(>) is not an equal operator(=), so the factory returns +key > '123a'+ as it is. However all the subclass of GenericUDFBaseCompare(except GenericUDFOPEqualNS and GenericUDFOPNotEqualNS) would return null if either side of the function children is null, so it's safe to return constant null when processing the expr +`key > '123a'`+. This will benifit some queries when the cbo is disabled. -- This message was sent by Atlassian Jira (v8.3.4#803005)