You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by jc...@apache.org on 2019/11/27 07:22:47 UTC
[hive] branch master updated: HIVE-22507: KeyWrapper comparator
create field comparator instances at every comparison (Krisztian Kasa,
reviewed by Jesus Camacho Rodriguez)
This is an automated email from the ASF dual-hosted git repository.
jcamacho 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 2ea050b HIVE-22507: KeyWrapper comparator create field comparator instances at every comparison (Krisztian Kasa, reviewed by Jesus Camacho Rodriguez)
2ea050b is described below
commit 2ea050b39e2e98712072ee2c3e63dcec23cdc1b0
Author: Krisztian Kasa <kk...@cloudera.com>
AuthorDate: Tue Nov 26 23:21:31 2019 -0800
HIVE-22507: KeyWrapper comparator create field comparator instances at every comparison (Krisztian Kasa, reviewed by Jesus Camacho Rodriguez)
---
.../apache/hadoop/hive/ql/exec/TopNKeyOperator.java | 21 ++++++++++-----------
.../objectinspector/ObjectInspectorUtils.java | 14 ++++++--------
2 files changed, 16 insertions(+), 19 deletions(-)
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/TopNKeyOperator.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/TopNKeyOperator.java
index b3ab701..4e35922 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/TopNKeyOperator.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/TopNKeyOperator.java
@@ -30,8 +30,10 @@ import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspectorUtils;
import java.io.Serializable;
import java.util.Comparator;
+import java.util.List;
import static org.apache.hadoop.hive.ql.plan.api.OperatorType.TOPNKEY;
+import static org.apache.hadoop.hive.serde2.objectinspector.ObjectInspectorUtils.NullValueOption;
/**
* TopNKeyOperator passes rows that contains top N keys only.
@@ -55,25 +57,22 @@ public class TopNKeyOperator extends Operator<TopNKeyDesc> implements Serializab
public static class KeyWrapperComparator implements Comparator<KeyWrapper> {
- private final ObjectInspector[] keyObjectInspectors;
- private final boolean[] columnSortOrderIsDesc;
- private final ObjectInspectorUtils.NullValueOption[] nullSortOrder;
+ private final List<Comparator<Object>> comparatorList;
KeyWrapperComparator(ObjectInspector[] keyObjectInspectors, String columnSortOrder, String nullSortOrder) {
- this.keyObjectInspectors = keyObjectInspectors;
- this.columnSortOrderIsDesc = new boolean[columnSortOrder.length()];
- this.nullSortOrder = new ObjectInspectorUtils.NullValueOption[nullSortOrder.length()];
+ boolean[] columnSortOrderIsDesc = new boolean[columnSortOrder.length()];
+ NullValueOption[] nullSortOrderArray = new NullValueOption[nullSortOrder.length()];
for (int i = 0; i < columnSortOrder.length(); ++i) {
- this.columnSortOrderIsDesc[i] = columnSortOrder.charAt(i) == '-';
- this.nullSortOrder[i] = NullOrdering.fromSign(nullSortOrder.charAt(i)).getNullValueOption();
+ columnSortOrderIsDesc[i] = columnSortOrder.charAt(i) == '-';
+ nullSortOrderArray[i] = NullOrdering.fromSign(nullSortOrder.charAt(i)).getNullValueOption();
}
+ comparatorList = ObjectInspectorUtils.getComparator(
+ keyObjectInspectors, keyObjectInspectors, columnSortOrderIsDesc, nullSortOrderArray);
}
@Override
public int compare(KeyWrapper key1, KeyWrapper key2) {
- return ObjectInspectorUtils.compare(
- key1.getKeyArray(), keyObjectInspectors, key2.getKeyArray(), keyObjectInspectors,
- columnSortOrderIsDesc, nullSortOrder);
+ return ObjectInspectorUtils.compare(comparatorList, key1.getKeyArray(), key2.getKeyArray());
}
}
diff --git a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/ObjectInspectorUtils.java b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/ObjectInspectorUtils.java
index ab1cfdc..1f3bbaf 100644
--- a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/ObjectInspectorUtils.java
+++ b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/ObjectInspectorUtils.java
@@ -948,14 +948,12 @@ public final class ObjectInspectorUtils {
return 0;
}
- public static int compare(
- Object[] objectArray1, ObjectInspector[] oi1, Object[] objectArray2, ObjectInspector[] oi2,
+ public static List<Comparator<Object>> getComparator(
+ ObjectInspector[] oi1, ObjectInspector[] oi2,
boolean[] columnSortOrderIsDesc, NullValueOption[] nullSortOrder) {
- assert (objectArray1.length == objectArray2.length);
- assert (objectArray1.length == oi1.length);
- assert (objectArray2.length == oi2.length);
- assert (columnSortOrderIsDesc.length == objectArray1.length);
- assert (nullSortOrder.length == objectArray1.length);
+ assert (oi1.length == oi2.length);
+ assert (columnSortOrderIsDesc.length == oi1.length);
+ assert (nullSortOrder.length == oi1.length);
List<Comparator<Object>> comparators = new ArrayList<>(oi1.length);
for (int i = 0; i < oi1.length; i++) {
@@ -975,7 +973,7 @@ public final class ObjectInspectorUtils {
}
}
- return compare(comparators, objectArray1, objectArray2);
+ return comparators;
}
public static <T> int compare(List<Comparator<T>> comparatorList, T[] o1, T[] o2) {