This is an automated email from the ASF dual-hosted git repository.
zhangbutao pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hive.git
The following commit(s) were added to refs/heads/master by this push:
new 98d9d223983 HIVE-28291: Fix Partition spec is incorrect in
getPartitionsByFilter RPC (#5271)(cxzl25, reviewed by Wechar Yu, Butao Zhang)
98d9d223983 is described below
commit 98d9d22398370f817fe64449368671b978fff096
Author: cxzl25 <[email protected]>
AuthorDate: Thu Jun 6 22:55:15 2024 +0800
HIVE-28291: Fix Partition spec is incorrect in getPartitionsByFilter RPC
(#5271)(cxzl25, reviewed by Wechar Yu, Butao Zhang)
---
.../java/org/apache/hadoop/hive/metastore/MetaStoreDirectSql.java | 6 ++++--
.../java/org/apache/hadoop/hive/metastore/TestObjectStore.java | 8 ++++++++
2 files changed, 12 insertions(+), 2 deletions(-)
diff --git
a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/MetaStoreDirectSql.java
b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/MetaStoreDirectSql.java
index 272b388a40d..8c6701ae138 100644
---
a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/MetaStoreDirectSql.java
+++
b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/MetaStoreDirectSql.java
@@ -1551,9 +1551,11 @@ class MetaStoreDirectSql {
: tableValue + " " + node.operator.getSqlOp() + " " + nodeValue0;
// For equals and not-equals filter, we can add partition name filter to
improve performance.
boolean isOpEquals = Operator.isEqualOperator(node.operator);
- if (isOpEquals || Operator.isNotEqualOperator(node.operator)) {
+ boolean isOpNotEqual = Operator.isNotEqualOperator(node.operator);
+ String nodeValueStr = node.value.toString();
+ if (StringUtils.isNotEmpty(nodeValueStr) && (isOpEquals ||
isOpNotEqual)) {
Map<String, String> partKeyToVal = new HashMap<>();
- partKeyToVal.put(partCol.getName(), node.value.toString());
+ partKeyToVal.put(partCol.getName(), nodeValueStr);
String escapedNameFragment = Warehouse.makePartName(partKeyToVal,
false);
if (colType == FilterType.Date) {
// Some engines like Pig will record both date and time values, in
which case we need
diff --git
a/standalone-metastore/metastore-server/src/test/java/org/apache/hadoop/hive/metastore/TestObjectStore.java
b/standalone-metastore/metastore-server/src/test/java/org/apache/hadoop/hive/metastore/TestObjectStore.java
index 4ee768b163a..e308f94905c 100644
---
a/standalone-metastore/metastore-server/src/test/java/org/apache/hadoop/hive/metastore/TestObjectStore.java
+++
b/standalone-metastore/metastore-server/src/test/java/org/apache/hadoop/hive/metastore/TestObjectStore.java
@@ -566,6 +566,14 @@ public class TestObjectStore {
}
Assert.assertEquals(1, partNames.size());
Assert.assertEquals("country=US/state=MA", partNames.get(0));
+
+ try (AutoCloseable c = deadline()) {
+ partNames = objectStore.listPartitionNamesByFilter(DEFAULT_CATALOG_NAME,
DB1, TABLE1,
+ new GetPartitionsArgs.GetPartitionsArgsBuilder().filter("Country !=
''").build());
+ }
+ Assert.assertEquals(2, partNames.size());
+ Assert.assertEquals("country=US/state=CA", partNames.get(0));
+ Assert.assertEquals("country=US/state=MA", partNames.get(1));
}
@Test