diff --git hbase-handler/src/java/org/apache/hadoop/hive/hbase/CompositeHBaseKeyFactory.java hbase-handler/src/java/org/apache/hadoop/hive/hbase/CompositeHBaseKeyFactory.java index 53fa995..da53f72 100644 --- hbase-handler/src/java/org/apache/hadoop/hive/hbase/CompositeHBaseKeyFactory.java +++ hbase-handler/src/java/org/apache/hadoop/hive/hbase/CompositeHBaseKeyFactory.java @@ -18,13 +18,17 @@ package org.apache.hadoop.hive.hbase; +import java.io.IOException; +import java.io.Serializable; +import java.lang.reflect.Constructor; +import java.util.ArrayList; +import java.util.List; +import java.util.Properties; + import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.hadoop.conf.Configurable; import org.apache.hadoop.conf.Configuration; -import org.apache.hadoop.hbase.filter.BinaryComparator; -import org.apache.hadoop.hbase.filter.CompareFilter; -import org.apache.hadoop.hbase.filter.FamilyFilter; import org.apache.hadoop.hbase.mapreduce.TableMapReduceUtil; import org.apache.hadoop.hive.ql.index.IndexPredicateAnalyzer; import org.apache.hadoop.hive.ql.index.IndexSearchCondition; @@ -40,13 +44,6 @@ import org.apache.hadoop.hive.serde2.typeinfo.TypeInfo; import org.apache.hadoop.mapred.JobConf; -import java.io.IOException; -import java.io.Serializable; -import java.lang.reflect.Constructor; -import java.util.ArrayList; -import java.util.List; -import java.util.Properties; - public class CompositeHBaseKeyFactory extends DefaultHBaseKeyFactory implements Configurable { @@ -116,18 +113,14 @@ public DecomposedPredicate decomposePredicate(JobConf jobConf, Deserializer dese return decomposed; } + /** + * Setup the scan filter for the composite key. By default, this is pretty much a no-op. However, + * consumers can choose to override this method and exploit the {@link IndexSearchCondition push + * down conditions} to build up a filter accordingly + * */ protected Serializable setupFilter(String keyColName, List conditions) throws Exception { HBaseScanRange scanRange = new HBaseScanRange(); - for (IndexSearchCondition condition : conditions) { - if (condition.getFields() == null) { - continue; - } - String field = condition.getFields()[0]; - Object value = condition.getConstantDesc().getValue(); - scanRange.addFilter(new FamilyFilter( - CompareFilter.CompareOp.EQUAL, new BinaryComparator(field.getBytes()))); - } return scanRange; }