/** * Create a constrained copy of this table. * * @param constraint The dataSourceConstraint which narrows the view of the underlying availability * * @return a constrained table whose availability and serialization are narrowed by this constraint */ @Override public ConstrainedTable withConstraint(DataSourceConstraint constraint) { validateConstraintSchema(constraint); return new ConstrainedTable(this, new PhysicalDataSourceConstraint(constraint, getSchema())); }
/** * Create a new <tt>PhysicalDataSourceConstraint</tt> instance with a new subset of metric names. * <p> * The new set of metric names will be an intersection between old metric names and * a user provided set of metric names * * @param metricNames The set of metric columns that are to be intersected with metric names in * <tt>this DataSourceConstraint</tt> * * @return the new <tt>PhysicalDataSourceConstraint</tt> instance with a new subset of metric names */ @Override public PhysicalDataSourceConstraint withMetricIntersection(Set<String> metricNames) { Set<String> nonIntersectingMetric = getMetricNames().stream() .filter(metricName -> !metricNames.contains(metricName)) .collect(Collectors.toSet()); Set<String> resultColumnNames = this.allColumnPhysicalNames.stream() .filter(name -> !nonIntersectingMetric.contains(name)) .collect(Collectors.toSet()); return new PhysicalDataSourceConstraint(super.withMetricIntersection(metricNames), resultColumnNames); } }
@Override public SimplifiedIntervalList getAvailableIntervals(DataSourceConstraint constraint) { validateConstraintSchema(constraint); return getAvailability().getAvailableIntervals(new PhysicalDataSourceConstraint(constraint, getSchema())); }
/** * Constructor. * * @param sourceTable The table being constrained * @param constraint The constraint being applied */ public ConstrainedTable(ConfigPhysicalTable sourceTable, DataSourceConstraint constraint) { this.constraint = constraint; this.sourceTable = sourceTable; Availability sourceAvailability = sourceTable.getAvailability(); PhysicalDataSourceConstraint physicalDataSourceConstraint = new PhysicalDataSourceConstraint( constraint, sourceTable.getSchema() ); availableIntervals = new SimplifiedIntervalList( sourceAvailability.getAvailableIntervals(physicalDataSourceConstraint) ); allAvailableIntervals = Collections.unmodifiableMap( mapToSchemaAvailability( sourceAvailability.getAllAvailableIntervals(), getSchema() ) ); dataSourceNames = Collections.unmodifiableSet( sourceAvailability.getDataSourceNames(physicalDataSourceConstraint) ); }