public static <T> Set<T> findOperatorsUpstream(Collection<Operator<?>> starts, Class<T> clazz) { Set<T> found = new HashSet<T>(); for (Operator<?> start : starts) { findOperatorsUpstream(start, clazz, found); } return found; }
public static <T> Set<T> findOperatorsUpstream(Operator<?> start, Class<T> clazz) { return findOperatorsUpstream(start, clazz, new HashSet<T>()); }
public static <T> Set<T> findOperatorsUpstream(Collection<Operator<?>> starts, Class<T> clazz) { Set<T> found = new HashSet<T>(); for (Operator<?> start : starts) { findOperatorsUpstream(start, clazz, found); } return found; }
public static <T> Set<T> findOperatorsUpstream(Operator<?> start, Class<T> clazz) { return findOperatorsUpstream(start, clazz, new HashSet<T>()); }
public static <T> T findSingleOperatorUpstream(Operator<?> start, Class<T> clazz) { Set<T> found = findOperatorsUpstream(start, clazz, new HashSet<T>()); return found.size() == 1 ? found.iterator().next() : null; }
/** * Check whether the branch starting from 'op' is a potential big table branch. * This is true if the branch contains any operator that could potentially increase * output data size, such as JOIN and LATERAL_VIEW. If this is the case, we assume * the worst and mark the branch as big table branch in the MapJoin optimization. * * @return True if the branch starting at 'op' is a big table branch. False otherwise. */ private boolean isBigTableBranch(Operator<? extends OperatorDesc> op) { for (Class<? extends Operator<? extends OperatorDesc>> clazz : Sets.newHashSet(JoinOperator.class, LateralViewForwardOperator.class)) { Set<? extends Operator<? extends OperatorDesc>> parentSinks = OperatorUtils.findOperatorsUpstream(op, clazz); if (!parentSinks.isEmpty()) { return true; } } return false; }
public static <T> T findSingleOperatorUpstream(Operator<?> start, Class<T> clazz) { Set<T> found = findOperatorsUpstream(start, clazz, new HashSet<T>()); return found.size() == 1 ? found.iterator().next() : null; }
@SuppressWarnings("unchecked") private static <T> Set<T> findOperatorsUpstream(Operator<?> start, Class<T> clazz, Set<T> found) { if (clazz.isInstance(start)) { found.add((T) start); } if (start.getParentOperators() != null) { for (Operator<?> parent : start.getParentOperators()) { findOperatorsUpstream(parent, clazz, found); } } return found; }
@SuppressWarnings("unchecked") private static <T> Set<T> findOperatorsUpstream(Operator<?> start, Class<T> clazz, Set<T> found) { if (clazz.isInstance(start)) { found.add((T) start); } if (start.getParentOperators() != null) { for (Operator<?> parent : start.getParentOperators()) { findOperatorsUpstream(parent, clazz, found); } } return found; }
public static <T> Set<T> findOperatorsUpstreamJoinAccounted(Operator<?> start, Class<T> clazz, Set<T> found) { if (clazz.isInstance(start)) { found.add((T) start); } int onlyIncludeIndex = -1; if (start instanceof AbstractMapJoinOperator) { AbstractMapJoinOperator mapJoinOp = (AbstractMapJoinOperator) start; MapJoinDesc desc = (MapJoinDesc) mapJoinOp.getConf(); onlyIncludeIndex = desc.getPosBigTable(); } if (start.getParentOperators() != null) { int i = 0; for (Operator<?> parent : start.getParentOperators()) { if (onlyIncludeIndex >= 0) { if (onlyIncludeIndex == i) { findOperatorsUpstream(parent, clazz, found); } } else { findOperatorsUpstream(parent, clazz, found); } i++; } } return found; }
Set<TableScanOperator> tsOps = OperatorUtils.findOperatorsUpstream(parent, TableScanOperator.class); for (TableScanOperator parentTS : tsOps) {
Set<ReduceSinkOperator> rsOps = OperatorUtils.findOperatorsUpstream(parentOfFS, ReduceSinkOperator.class); if (rsOps.isEmpty()) { continue;
Set<TableScanOperator> tsOps = OperatorUtils.findOperatorsUpstream(parent, TableScanOperator.class); boolean found = false;
private boolean removeRSInsertedByEnforceBucketing(FileSinkOperator fsOp) { Set<ReduceSinkOperator> reduceSinks = OperatorUtils.findOperatorsUpstream(fsOp, ReduceSinkOperator.class); Operator<? extends OperatorDesc> rsToRemove = null;
private boolean removeRSInsertedByEnforceBucketing(FileSinkOperator fsOp) { Set<ReduceSinkOperator> reduceSinks = OperatorUtils.findOperatorsUpstream(fsOp, ReduceSinkOperator.class); Operator<? extends OperatorDesc> rsToRemove = null;
OperatorUtils.findOperatorsUpstream(parentOp.getParentOperators(), ReduceSinkOperator.class); if (size < 0) {
parentSinks = OperatorUtils.findOperatorsUpstream(sink, ReduceSinkOperator.class); parentSinks.remove(sink); if (!context.getVisitedReduceSinks().containsAll(parentSinks)) { : sink.getChildOperators().get(0).getParentOperators()) { Set<TableScanOperator> sources = OperatorUtils.findOperatorsUpstream(sibling, TableScanOperator.class); for (TableScanOperator source : sources) { if (source.getStatistics() != null) {
parentSinks = OperatorUtils.findOperatorsUpstream(sink, ReduceSinkOperator.class); parentSinks.remove(sink); if (!context.getVisitedReduceSinks().containsAll(parentSinks)) { : sink.getChildOperators().get(0).getParentOperators()) { Set<TableScanOperator> sources = OperatorUtils.findOperatorsUpstream(sibling, TableScanOperator.class); for (TableScanOperator source : sources) { if (source.getStatistics() != null) {
OperatorUtils.findOperatorsUpstream(parentOp.getParentOperators(), ReduceSinkOperator.class); if (size < 0) {
for (TableScanOperator root : OperatorUtils.findOperatorsUpstream(parentOp, TableScanOperator.class)) { if (currInputStat == null) { currInputStat = root.getStatistics().clone();