public static DecomposedPredicate decompose(ExprNodeDesc predicateExpr, Schema schema) {
    IndexPredicateAnalyzer analyzer = newAnalyzer(schema);
    List<IndexSearchCondition> sConditions = new ArrayList<>();
    ExprNodeDesc residualPredicate = analyzer.analyzePredicate(predicateExpr, sConditions);

    // Nothing to decompose.
    if (sConditions.size() == 0) {
      return null;
    }

    DecomposedPredicate decomposedPredicate = new DecomposedPredicate();
    decomposedPredicate.pushedPredicate = analyzer.translateSearchConditions(sConditions);
    decomposedPredicate.residualPredicate = (ExprNodeGenericFuncDesc) residualPredicate;
    return decomposedPredicate;
  }
Analyzes the predicates and return the portion of it which
cannot be evaluated by Kudu during table access.

@param predicateExpr predicate to be decomposed
@param schema the schema of the Kudu table
@return decomposed form of predicate, or null if no pushdown is possible at all
kudu-handler/src/java/org/apache/hadoop/hive/kudu/KuduPredicateHandler.java