protected PhysicalRequirements emptyUnaryRequirements(int numberOfChildren) { StructuralPropertiesVector[] req = new StructuralPropertiesVector[numberOfChildren]; for (int i = 0; i < numberOfChildren; i++) { req[i] = StructuralPropertiesVector.EMPTY_PROPERTIES_VECTOR; } return new PhysicalRequirements(req, IPartitioningRequirementsCoordinator.NO_COORDINATION); }
protected PhysicalRequirements emptyUnaryRequirements() { StructuralPropertiesVector[] req = new StructuralPropertiesVector[] { StructuralPropertiesVector.EMPTY_PROPERTIES_VECTOR }; return new PhysicalRequirements(req, IPartitioningRequirementsCoordinator.NO_COORDINATION); }
@Override public PhysicalRequirements getRequiredPropertiesForChildren(ILogicalOperator op, IPhysicalPropertiesVector reqdByParent, IOptimizationContext context) { List<ILocalStructuralProperty> localProps = new ArrayList<ILocalStructuralProperty>(sortColumns.length); localProps.add(new LocalOrderProperty(Arrays.asList(sortColumns))); StructuralPropertiesVector[] r = new StructuralPropertiesVector[] { new StructuralPropertiesVector(null, localProps) }; return new PhysicalRequirements(r, IPartitioningRequirementsCoordinator.NO_COORDINATION); }
@Override public PhysicalRequirements getRequiredPropertiesForChildren(ILogicalOperator op, IPhysicalPropertiesVector reqdByParent, IOptimizationContext context) { List<LogicalVariable> scanVariables = new ArrayList<LogicalVariable>(); scanVariables.addAll(keys); scanVariables.add(payload); if (additionalNonFilteringFields != null) { scanVariables.addAll(additionalNonFilteringFields); } IPhysicalPropertiesVector r = dataSource.getPropertiesProvider().computePropertiesVector(scanVariables); r.getLocalProperties().clear(); IPhysicalPropertiesVector[] requirements = new IPhysicalPropertiesVector[1]; requirements[0] = r; return new PhysicalRequirements(requirements, IPartitioningRequirementsCoordinator.NO_COORDINATION); }
@Override public PhysicalRequirements getRequiredPropertiesForChildren(ILogicalOperator op, IPhysicalPropertiesVector reqdByParent, IOptimizationContext context) { List<LogicalVariable> scanVariables = new ArrayList<LogicalVariable>(); scanVariables.addAll(keys); scanVariables.add(new LogicalVariable(-1)); IPhysicalPropertiesVector r = dataSource.getPropertiesProvider().computePropertiesVector(scanVariables); IPhysicalPropertiesVector[] requirements = new IPhysicalPropertiesVector[1]; requirements[0] = r; return new PhysicalRequirements(requirements, IPartitioningRequirementsCoordinator.NO_COORDINATION); }
@Override public PhysicalRequirements getRequiredPropertiesForChildren(ILogicalOperator op, IPhysicalPropertiesVector reqdByParent, IOptimizationContext context) { List<ILocalStructuralProperty> orderProps = new LinkedList<ILocalStructuralProperty>(); List<OrderColumn> columns = new ArrayList<OrderColumn>(); for (OrderColumn oc : partitioningFields) { LogicalVariable var = oc.getColumn(); columns.add(new OrderColumn(var, oc.getOrder())); } orderProps.add(new LocalOrderProperty(columns)); StructuralPropertiesVector[] r = new StructuralPropertiesVector[] { new StructuralPropertiesVector(null, orderProps) }; return new PhysicalRequirements(r, IPartitioningRequirementsCoordinator.NO_COORDINATION); }
@Override public PhysicalRequirements getRequiredPropertiesForChildren(ILogicalOperator op, IPhysicalPropertiesVector reqdByParent, IOptimizationContext context) { List<ILocalStructuralProperty> orderProps = new LinkedList<ILocalStructuralProperty>(); List<OrderColumn> columns = new ArrayList<OrderColumn>(); for (OrderColumn oc : orderColumns) { LogicalVariable var = oc.getColumn(); columns.add(new OrderColumn(var, oc.getOrder())); } orderProps.add(new LocalOrderProperty(columns)); StructuralPropertiesVector[] r = new StructuralPropertiesVector[] { new StructuralPropertiesVector(null, orderProps) }; return new PhysicalRequirements(r, IPartitioningRequirementsCoordinator.NO_COORDINATION); }
@Override public PhysicalRequirements getRequiredPropertiesForChildren(ILogicalOperator op, IPhysicalPropertiesVector reqdByParent, IOptimizationContext context) { DistributeResultOperator write = (DistributeResultOperator) op; IDataSink sink = write.getDataSink(); IPartitioningProperty pp = sink.getPartitioningProperty(); StructuralPropertiesVector[] r = new StructuralPropertiesVector[] { new StructuralPropertiesVector(pp, null) }; return new PhysicalRequirements(r, IPartitioningRequirementsCoordinator.NO_COORDINATION); }
@Override public PhysicalRequirements getRequiredPropertiesForChildren(ILogicalOperator op, IPhysicalPropertiesVector reqdByParent, IOptimizationContext context) { List<LogicalVariable> scanVariables = new ArrayList<LogicalVariable>(); scanVariables.addAll(primaryKeys); scanVariables.add(new LogicalVariable(-1)); for (int i = 0; i < numOfAdditionalNonFilteringFields; i++) { scanVariables.add(new LogicalVariable(-1)); } IPhysicalPropertiesVector r = dataSourceIndex.getDataSource().getPropertiesProvider().computePropertiesVector(scanVariables); r.getLocalProperties().clear(); IPhysicalPropertiesVector[] requirements = new IPhysicalPropertiesVector[1]; requirements[0] = r; return new PhysicalRequirements(requirements, IPartitioningRequirementsCoordinator.NO_COORDINATION); }
@Override public PhysicalRequirements getRequiredPropertiesForChildren(ILogicalOperator op, IPhysicalPropertiesVector reqdByParent, IOptimizationContext context) { WriteOperator write = (WriteOperator) op; IDataSink sink = write.getDataSink(); IPartitioningProperty pp = sink.getPartitioningProperty(); StructuralPropertiesVector[] r = new StructuralPropertiesVector[] { new StructuralPropertiesVector(pp, null) }; return new PhysicalRequirements(r, IPartitioningRequirementsCoordinator.NO_COORDINATION); }
@Override public PhysicalRequirements getRequiredPropertiesForChildren(ILogicalOperator op, IPhysicalPropertiesVector reqdByParent, IOptimizationContext context) { AbstractLogicalOperator limitOp = (AbstractLogicalOperator) op; if (limitOp.getExecutionMode() == AbstractLogicalOperator.ExecutionMode.UNPARTITIONED) { StructuralPropertiesVector[] pv = new StructuralPropertiesVector[1]; pv[0] = new StructuralPropertiesVector(IPartitioningProperty.UNPARTITIONED, null); return new PhysicalRequirements(pv, IPartitioningRequirementsCoordinator.NO_COORDINATION); } else { return emptyUnaryRequirements(); } }
@Override public PhysicalRequirements getRequiredPropertiesForChildren(ILogicalOperator op, IPhysicalPropertiesVector reqdByParent, IOptimizationContext context) { List<LogicalVariable> scanVariables = new ArrayList<>(); scanVariables.addAll(primaryKeys); scanVariables.add(new LogicalVariable(-1)); IPhysicalPropertiesVector physicalProps = dataSource.getPropertiesProvider().computePropertiesVector(scanVariables); StructuralPropertiesVector spv = new StructuralPropertiesVector(physicalProps.getPartitioningProperty(), physicalProps.getLocalProperties()); return new PhysicalRequirements(new IPhysicalPropertiesVector[] { spv }, IPartitioningRequirementsCoordinator.NO_COORDINATION); }
@Override public PhysicalRequirements getRequiredPropertiesForChildren(ILogicalOperator op, IPhysicalPropertiesVector reqdByParent, IOptimizationContext context) { if (requiresBroadcast) { StructuralPropertiesVector[] pv = new StructuralPropertiesVector[1]; pv[0] = new StructuralPropertiesVector(new BroadcastPartitioningProperty(null), null); return new PhysicalRequirements(pv, IPartitioningRequirementsCoordinator.NO_COORDINATION); } else { return super.getRequiredPropertiesForChildren(op, reqdByParent, context); } }
@Override public PhysicalRequirements getRequiredPropertiesForChildren(ILogicalOperator op, IPhysicalPropertiesVector reqdByParent, IOptimizationContext context) { StructuralPropertiesVector[] pv = new StructuralPropertiesVector[1]; List<ILocalStructuralProperty> localProps = new ArrayList<>(); List<OrderColumn> orderColumns = new ArrayList<>(); for (LogicalVariable column : columnList) { orderColumns.add(new OrderColumn(column, OrderOperator.IOrder.OrderKind.ASC)); } localProps.add(new LocalOrderProperty(orderColumns)); IPartitioningProperty pp = null; AbstractLogicalOperator aop = (AbstractLogicalOperator) op; if (aop.getExecutionMode() == AbstractLogicalOperator.ExecutionMode.PARTITIONED) { pp = new UnorderedPartitionedProperty(new ListSet<>(columnList), context.getComputationNodeDomain()); } pv[0] = new StructuralPropertiesVector(pp, localProps); return new PhysicalRequirements(pv, IPartitioningRequirementsCoordinator.NO_COORDINATION); }
@Override public PhysicalRequirements getRequiredPropertiesForChildren(ILogicalOperator op, IPhysicalPropertiesVector reqdByParent, IOptimizationContext context) { if (requiresBroadcast) { StructuralPropertiesVector[] pv = new StructuralPropertiesVector[1]; pv[0] = new StructuralPropertiesVector(new BroadcastPartitioningProperty(domain), null); return new PhysicalRequirements(pv, IPartitioningRequirementsCoordinator.NO_COORDINATION); } else { return super.getRequiredPropertiesForChildren(op, reqdByParent, context); } }
@Override public PhysicalRequirements getRequiredPropertiesForChildren(ILogicalOperator op, IPhysicalPropertiesVector reqdByParent, IOptimizationContext context) { AggregateOperator aggOp = (AggregateOperator) op; StructuralPropertiesVector[] pv = new StructuralPropertiesVector[1]; if (aggOp.isGlobal() && aggOp.getExecutionMode() == AbstractLogicalOperator.ExecutionMode.UNPARTITIONED) { pv[0] = new StructuralPropertiesVector(IPartitioningProperty.UNPARTITIONED, null); return new PhysicalRequirements(pv, IPartitioningRequirementsCoordinator.NO_COORDINATION); } else { return emptyUnaryRequirements(); } }
@Override public PhysicalRequirements getRequiredPropertiesForChildren(ILogicalOperator op, IPhysicalPropertiesVector reqdByParent, IOptimizationContext context) { if (op.getInputs().isEmpty()) { return emptyUnaryRequirements(); } ILogicalOperator childOp = op.getInputs().get(0).getValue(); // Empty tuple source is a special case that can be partitioned in the same way as the data scan. if (childOp.getOperatorTag() == LogicalOperatorTag.EMPTYTUPLESOURCE) { return emptyUnaryRequirements(); } INodeDomain domain = dataSource.getDomain(); return new PhysicalRequirements( new StructuralPropertiesVector[] { new StructuralPropertiesVector(new BroadcastPartitioningProperty(domain), null) }, IPartitioningRequirementsCoordinator.NO_COORDINATION); }
@Override public PhysicalRequirements getRequiredPropertiesForChildren(ILogicalOperator op, IPhysicalPropertiesVector reqdByParent, IOptimizationContext context) { AbstractLogicalOperator aop = (AbstractLogicalOperator) op; if (aop.getExecutionMode() == ExecutionMode.PARTITIONED) { StructuralPropertiesVector[] pv = new StructuralPropertiesVector[1]; pv[0] = new StructuralPropertiesVector(new UnorderedPartitionedProperty( new ListSet<LogicalVariable>(columnSet), context.getComputationNodeDomain()), null); return new PhysicalRequirements(pv, IPartitioningRequirementsCoordinator.NO_COORDINATION); } else { return emptyUnaryRequirements(); } }
@Override public PhysicalRequirements getRequiredPropertiesForChildren(ILogicalOperator op, IPhysicalPropertiesVector reqdByParent, IOptimizationContext context) { StructuralPropertiesVector pv0 = OperatorPropertiesUtil.checkUnpartitionedAndGetPropertiesVector(op, new StructuralPropertiesVector( new RandomPartitioningProperty(context.getComputationNodeDomain()), null)); StructuralPropertiesVector pv1 = OperatorPropertiesUtil.checkUnpartitionedAndGetPropertiesVector(op, new StructuralPropertiesVector( new RandomPartitioningProperty(context.getComputationNodeDomain()), null)); return new PhysicalRequirements(new StructuralPropertiesVector[] { pv0, pv1 }, IPartitioningRequirementsCoordinator.NO_COORDINATION); }
@Override public PhysicalRequirements getRequiredPropertiesForChildren(ILogicalOperator op, IPhysicalPropertiesVector reqdByParent, IOptimizationContext context) { if (partitioningType != JoinPartitioningType.BROADCAST) { throw new NotImplementedException(partitioningType + " nested loop joins are not implemented."); } StructuralPropertiesVector[] pv = new StructuralPropertiesVector[2]; // TODO: leverage statistics to make better decisions. pv[0] = OperatorPropertiesUtil.checkUnpartitionedAndGetPropertiesVector(op, new StructuralPropertiesVector( new RandomPartitioningProperty(context.getComputationNodeDomain()), null)); pv[1] = OperatorPropertiesUtil.checkUnpartitionedAndGetPropertiesVector(op, new StructuralPropertiesVector( new BroadcastPartitioningProperty(context.getComputationNodeDomain()), null)); return new PhysicalRequirements(pv, IPartitioningRequirementsCoordinator.NO_COORDINATION); }