use of org.apache.hadoop.hive.ql.plan.DynamicValue.NoDynamicValuesException in project hive by apache.
the class OrcInputFormat method isStripeSatisfyPredicate.
private static boolean isStripeSatisfyPredicate(StripeStatistics stripeStatistics, SearchArgument sarg, int[] filterColumns, final SchemaEvolution evolution) {
List<PredicateLeaf> predLeaves = sarg.getLeaves();
TruthValue[] truthValues = new TruthValue[predLeaves.size()];
for (int pred = 0; pred < truthValues.length; pred++) {
if (filterColumns[pred] != -1) {
if (evolution != null && !evolution.isPPDSafeConversion(filterColumns[pred])) {
truthValues[pred] = TruthValue.YES_NO_NULL;
} else {
// column statistics at index 0 contains only the number of rows
ColumnStatistics stats = stripeStatistics.getColumnStatistics()[filterColumns[pred]];
PredicateLeaf leaf = predLeaves.get(pred);
try {
truthValues[pred] = RecordReaderImpl.evaluatePredicate(stats, leaf, null);
} 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;
}
}
} else {
// parition column case.
// partition filter will be evaluated by partition pruner so
// we will not evaluate partition filter here.
truthValues[pred] = TruthValue.YES_NO_NULL;
}
}
return sarg.evaluate(truthValues).isNeeded();
}
Aggregations