Github user amansinha100 commented on a diff in the pull request:
https://github.com/apache/drill/pull/462#discussion_r59941224
--- Diff:
exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/common/HashTableConfig.java
---
@@ -22,25 +22,36 @@
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeName;
+import org.apache.drill.exec.physical.impl.join.JoinUtils.JoinComparator;
@JsonTypeName("hashtable-config")
public class HashTableConfig {
- static final org.slf4j.Logger logger =
org.slf4j.LoggerFactory.getLogger(HashTableConfig.class);
-
private final int initialCapacity;
private final float loadFactor;
private final NamedExpression[] keyExprsBuild;
private final NamedExpression[] keyExprsProbe;
+ private final JoinComparator[] comparators;
@JsonCreator
public HashTableConfig(@JsonProperty("initialCapacity") int
initialCapacity, @JsonProperty("loadFactor") float loadFactor,
@JsonProperty("keyExprsBuild") NamedExpression[]
keyExprsBuild,
- @JsonProperty("keyExprsProbe") NamedExpression[]
keyExprsProbe) {
+ @JsonProperty("keyExprsProbe") NamedExpression[]
keyExprsProbe,
+ @JsonProperty("comparators") JoinComparator[]
comparators) {
this.initialCapacity = initialCapacity;
this.loadFactor = loadFactor;
this.keyExprsBuild = keyExprsBuild;
this.keyExprsProbe = keyExprsProbe;
+ if (comparators != null) {
+ this.comparators = comparators;
+ } else {
+ // default is nulls are equal
--- End diff --
It might seem confusing at first (it was to me) to consider the
nulls-are-equal as the default case since that's not true for joins; however it
is true for a group-by operation. Could you have the caller pass in explicit
comparator such that the HashTableConfig does not have to decide ? The
HashAggregate could instantiate the hash table with an IS_NOT_DISTINCT_FROM
comparator. What do you think ? (one minor point is that the 'JoinComparator'
is now being used for both Joins and Aggregates...we could call it Comparator
or something generic).
---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at [email protected] or file a JIRA ticket
with INFRA.
---