private boolean addLiteral(List<Object> literals, PredicateLeaf leaf) { switch (leaf.getOperator()) { case EQUALS: return literals.add( convertLiteral(leaf.getLiteral())); case IN: return literals.addAll( leaf.getLiteralList().stream().map(l -> convertLiteral(l)).collect(Collectors.toList())); default: return false; } }
private boolean addLiteral(List<Object> literals, PredicateLeaf leaf) { switch (leaf.getOperator()) { case EQUALS: return literals.add(leaf.getLiteral()); case IN: return literals.addAll(leaf.getLiteralList()); default: return false; } } }
private static FilterPredicate buildFilterPredicateFromPredicateLeaf (PredicateLeaf leaf, Type parquetType) throws Exception { LeafFilterFactory leafFilterFactory = new LeafFilterFactory(); FilterPredicateLeafBuilder builder; try { builder = leafFilterFactory .getLeafFilterBuilderByType(leaf.getType(), parquetType); if (isMultiLiteralsOperator(leaf.getOperator())) { return builder.buildPredicate(leaf.getOperator(), leaf.getLiteralList(), leaf.getColumnName()); } else { return builder .buildPredict(leaf.getOperator(), leaf.getLiteral(), leaf.getColumnName()); } } catch (Exception e) { LOG.error("fail to build predicate filter leaf with errors" + e, e); throw e; } }
private static FilterPredicate buildFilterPredicateFromPredicateLeaf (PredicateLeaf leaf, Type parquetType) throws Exception { LeafFilterFactory leafFilterFactory = new LeafFilterFactory(); FilterPredicateLeafBuilder builder; try { builder = leafFilterFactory .getLeafFilterBuilderByType(leaf.getType(), parquetType); if (isMultiLiteralsOperator(leaf.getOperator())) { return builder.buildPredicate(leaf.getOperator(), leaf.getLiteralList(), leaf.getColumnName()); } else { return builder .buildPredict(leaf.getOperator(), leaf.getLiteral(), leaf.getColumnName()); } } catch (Exception e) { LOG.error("fail to build predicate filter leaf with errors" + e, e); throw e; } }
} catch (NoDynamicValuesException dve) { LOG.debug("Dynamic values are not available here {}", dve.getMessage()); boolean hasNulls = stats.hasNull() || leaf.getOperator() != Operator.NULL_SAFE_EQUALS; truthValues[pred] = hasNulls ? TruthValue.YES_NO_NULL : TruthValue.YES_NO;
for (PredicateLeaf l : leaves) { if (bucketCol.equals(l.getColumnName())) { switch (l.getOperator()) { case EQUALS: case IN:
for (PredicateLeaf l : leaves) { if (bucketCol.equals(l.getColumnName())) { switch (l.getOperator()) { case EQUALS: case IN:
assertEquals(PredicateLeaf.Operator.EQUALS, leaf.getOperator()); assertEquals("first_name", leaf.getColumnName()); assertEquals("john", leaf.getLiteral()); assertEquals(PredicateLeaf.Operator.LESS_THAN_EQUALS, leaf.getOperator()); assertEquals("first_name", leaf.getColumnName()); assertEquals("greg", leaf.getLiteral()); assertEquals(PredicateLeaf.Operator.LESS_THAN, leaf.getOperator()); assertEquals("first_name", leaf.getColumnName()); assertEquals("alan", leaf.getLiteral()); assertEquals(PredicateLeaf.Operator.LESS_THAN_EQUALS, leaf.getOperator()); assertEquals("id", leaf.getColumnName()); assertEquals(12L, leaf.getLiteral()); assertEquals(PredicateLeaf.Operator.LESS_THAN_EQUALS, leaf.getOperator()); assertEquals("id", leaf.getColumnName()); assertEquals(13L, leaf.getLiteral()); assertEquals(PredicateLeaf.Operator.LESS_THAN, leaf.getOperator()); assertEquals("id", leaf.getColumnName()); assertEquals(15L, leaf.getLiteral()); assertEquals(PredicateLeaf.Operator.LESS_THAN, leaf.getOperator()); assertEquals("id", leaf.getColumnName()); assertEquals(16L, leaf.getLiteral()); assertEquals(PredicateLeaf.Operator.NULL_SAFE_EQUALS, leaf.getOperator());
assertEquals(PredicateLeaf.Operator.LESS_THAN, leaf.getOperator()); assertEquals("id", leaf.getColumnName()); assertEquals(18L, leaf.getLiteral()); assertEquals(PredicateLeaf.Operator.LESS_THAN, leaf.getOperator()); assertEquals("id", leaf.getColumnName()); assertEquals(10L, leaf.getLiteral()); assertEquals(PredicateLeaf.Operator.LESS_THAN, leaf.getOperator()); assertEquals("id", leaf.getColumnName()); assertEquals(13L, leaf.getLiteral()); assertEquals(PredicateLeaf.Operator.LESS_THAN, leaf.getOperator()); assertEquals("id", leaf.getColumnName()); assertEquals(16L, leaf.getLiteral()); assertEquals(PredicateLeaf.Operator.LESS_THAN, leaf.getOperator()); assertEquals("id", leaf.getColumnName()); assertEquals(11L, leaf.getLiteral()); assertEquals(PredicateLeaf.Operator.LESS_THAN, leaf.getOperator()); assertEquals("id", leaf.getColumnName()); assertEquals(12L, leaf.getLiteral()); assertEquals(PredicateLeaf.Operator.LESS_THAN, leaf.getOperator()); assertEquals("id", leaf.getColumnName()); assertEquals(14L, leaf.getLiteral()); assertEquals(PredicateLeaf.Operator.LESS_THAN, leaf.getOperator());
assertEquals(PredicateLeaf.Operator.BETWEEN, leaf.getOperator()); assertEquals("id", leaf.getColumnName()); assertEquals(null, leaf.getLiteral()); assertEquals(PredicateLeaf.Operator.EQUALS, leaf.getOperator()); assertEquals("first_name", leaf.getColumnName()); assertEquals("alan", leaf.getLiteral()); assertEquals(PredicateLeaf.Operator.EQUALS, leaf.getOperator()); assertEquals("last_name", leaf.getColumnName()); assertEquals("smith", leaf.getLiteral());
assertEquals(PredicateLeaf.Operator.EQUALS, leaf.getOperator()); assertEquals("id", leaf.getColumnName()); assertEquals(12L, leaf.getLiteral()); assertEquals(PredicateLeaf.Operator.IN, leaf.getOperator()); assertEquals("first_name", leaf.getColumnName()); assertEquals("john", leaf.getLiteralList().get(0)); assertEquals(PredicateLeaf.Operator.IN, leaf.getOperator()); assertEquals("id", leaf.getColumnName()); assertEquals(34L, leaf.getLiteralList().get(0));
leaves.get(0).getOperator()); assertEquals("first_name", leaves.get(0).getColumnName());
assertEquals(PredicateLeaf.Operator.IS_NULL, leaf.getOperator()); assertEquals("first_name", leaf.getColumnName()); assertEquals(null, leaf.getLiteral()); assertEquals(PredicateLeaf.Operator.EQUALS, leaf.getOperator()); assertEquals("first_name", leaf.getColumnName()); assertEquals("sue", leaf.getLiteral()); assertEquals(PredicateLeaf.Operator.LESS_THAN, leaf.getOperator()); assertEquals("id", leaf.getColumnName()); assertEquals(12L, leaf.getLiteral()); assertEquals(PredicateLeaf.Operator.LESS_THAN_EQUALS, leaf.getOperator()); assertEquals("id", leaf.getColumnName()); assertEquals(4L, leaf.getLiteral());
List<PredicateLeaf> leaves = arg.getLeaves(); assertEquals("cost", leaves.get(0).getColumnName()); assertEquals(PredicateLeaf.Operator.IS_NULL, leaves.get(0).getOperator());
leaves.get(0).getOperator()); assertEquals("id", leaves.get(0).getColumnName()); assertEquals(10L, leaves.get(0).getLiteral());
private static boolean shouldEvaluateBloomFilter(PredicateLeaf predicate, TruthValue result, BloomFilterIO bloomFilter) { // evaluate bloom filter only when // 1) Bloom filter is available // 2) Min/Max evaluation yield YES or MAYBE // 3) Predicate is EQUALS or IN list if (bloomFilter != null && result != TruthValue.NO_NULL && result != TruthValue.NO && (predicate.getOperator().equals(PredicateLeaf.Operator.EQUALS) || predicate.getOperator().equals(PredicateLeaf.Operator.NULL_SAFE_EQUALS) || predicate.getOperator().equals(PredicateLeaf.Operator.IN))) { return true; } return false; }
private static boolean shouldEvaluateBloomFilter(PredicateLeaf predicate, TruthValue result, BloomFilter bloomFilter) { // evaluate bloom filter only when // 1) Bloom filter is available // 2) Min/Max evaluation yield YES or MAYBE // 3) Predicate is EQUALS or IN list if (bloomFilter != null && result != TruthValue.NO_NULL && result != TruthValue.NO && (predicate.getOperator().equals(PredicateLeaf.Operator.EQUALS) || predicate.getOperator().equals(PredicateLeaf.Operator.NULL_SAFE_EQUALS) || predicate.getOperator().equals(PredicateLeaf.Operator.IN))) { return true; } return false; }
@SuppressWarnings({ "rawtypes", "unchecked" }) private Evaluator<?> lessThanEvaluator(PredicateLeaf predicateLeaf, PrimitiveCategory category) { Comparable<?> literal = toComparable(category, predicateLeaf.getLiteral()); return new LessThanEvaluator(predicateLeaf.getColumnName(), literal, predicateLeaf.getOperator()); }
private static TruthValue evaluatePredicateBloomFilter(PredicateLeaf predicate, final Object predObj, BloomFilterIO bloomFilter, boolean hasNull) { switch (predicate.getOperator()) { case NULL_SAFE_EQUALS: // null safe equals does not return *_NULL variant. So set hasNull to false return checkInBloomFilter(bloomFilter, predObj, false); case EQUALS: return checkInBloomFilter(bloomFilter, predObj, hasNull); case IN: for (Object arg : predicate.getLiteralList()) { // if atleast one value in IN list exist in bloom filter, qualify the row group/stripe Object predObjItem = getBaseObjectForComparison(predicate.getType(), arg); TruthValue result = checkInBloomFilter(bloomFilter, predObjItem, hasNull); if (result == TruthValue.YES_NO_NULL || result == TruthValue.YES_NO) { return result; } } return hasNull ? TruthValue.NO_NULL : TruthValue.NO; default: return hasNull ? TruthValue.YES_NO_NULL : TruthValue.YES_NO; } }
private static TruthValue evaluatePredicateBloomFilter(PredicateLeaf predicate, final Object predObj, BloomFilterIO bloomFilter, boolean hasNull) { switch (predicate.getOperator()) { case NULL_SAFE_EQUALS: // null safe equals does not return *_NULL variant. So set hasNull to false return checkInBloomFilter(bloomFilter, predObj, false); case EQUALS: return checkInBloomFilter(bloomFilter, predObj, hasNull); case IN: for (Object arg : predicate.getLiteralList()) { // if atleast one value in IN list exist in bloom filter, qualify the row group/stripe Object predObjItem = getBaseObjectForComparison(predicate.getType(), arg); TruthValue result = checkInBloomFilter(bloomFilter, predObjItem, hasNull); if (result == TruthValue.YES_NO_NULL || result == TruthValue.YES_NO) { return result; } } return hasNull ? TruthValue.NO_NULL : TruthValue.NO; default: return hasNull ? TruthValue.YES_NO_NULL : TruthValue.YES_NO; } }