protected void pushProjectionsAndFiltersAndAsOf(JobConf jobConf, Path splitPath) {
    Path splitPathWithNoSchema = Path.getPathWithoutSchemeAndAuthority(splitPath);
    if (this.mrwork == null) {
      init(job);
    }

    if(this.mrwork.getPathToAliases() == null) {
      return;
    }

    ArrayList<String> aliases = new ArrayList<String>();
    Iterator<Entry<Path, List<String>>> iterator = this.mrwork.getPathToAliases().entrySet().iterator();

    Set<Path> splitParentPaths = null;
    int pathsSize = this.mrwork.getPathToAliases().entrySet().size();
    while (iterator.hasNext()) {
      Entry<Path, List<String>> entry = iterator.next();
      Path key = entry.getKey();
      // Note for HIVE-1903: for non-native tables we might only see a table location provided as path in splitPath.
      // In this case the code part below should still work, as the "key" will be an exact match for splitPath.
      // Also: we should not anticipate table paths to be under other tables' locations.
      boolean match;
      if (pathsSize > 1) {
        // Comparing paths multiple times creates lots of objects &
        // creates GC pressure for tables having large number of partitions.
        // In such cases, use pre-computed paths for comparison
        if (splitParentPaths == null) {
          splitParentPaths = new HashSet<>();
          FileUtils.populateParentPaths(splitParentPaths, splitPath);
          FileUtils.populateParentPaths(splitParentPaths, splitPathWithNoSchema);
        }
        match = splitParentPaths.contains(key);
      } else {
        match = FileUtils.isPathWithinSubtree(splitPath, key)
            || FileUtils.isPathWithinSubtree(splitPathWithNoSchema, key);
      }
      if (match) {
        List<String> list = entry.getValue();
        for (String val : list) {
          aliases.add(val);
        }
      }
    }

    for (String alias : aliases) {
      Operator<? extends OperatorDesc> op = this.mrwork.getAliasToWork().get(
        alias);
      if (op instanceof TableScanOperator) {
        TableScanOperator ts = (TableScanOperator) op;
        // push down projections.
        ColumnProjectionUtils.appendReadColumns(
                jobConf,
                ts.getNeededColumnIDs(),
                ts.getNeededColumns(),
                ts.getNeededNestedColumnPaths(),
                ts.getConf().hasVirtualCols());
        // push down filters and as of information
        pushFiltersAndAsOf(jobConf, ts, this.mrwork);

        AcidUtils.setAcidOperationalProperties(job, ts.getConf().isTranscationalTable(),
            ts.getConf().getAcidOperationalProperties());
        AcidUtils.setValidWriteIdList(job, ts.getConf());
      }
    }
  }
NOTE: this no longer wraps the IF for LLAP. Call wrapForLlap manually if needed.
ql/src/java/org/apache/hadoop/hive/ql/io/HiveInputFormat.java