/** * Use a default function with overrides for particular tables. * * @param defaultIntervalsFunction The volatile intervals function to apply to physical tables * @param intervalsFunctions A map of functions to provide volatile intervals for physical tables */ public DefaultingVolatileIntervalsService( VolatileIntervalsFunction defaultIntervalsFunction, Map<PhysicalTable, VolatileIntervalsFunction> intervalsFunctions ) { this.defaultIntervals = defaultIntervalsFunction; this.intervalsFunctions = Collections.unmodifiableMap( intervalsFunctions.entrySet().stream() .collect(Collectors.toMap(entry -> entry.getKey().getName(), Map.Entry::getValue)) ); }
@Override public String getName() { return getSourceTable().getName(); }
@Override public SimplifiedIntervalList getVolatileIntervals( Granularity granularity, List<Interval> intervals, PhysicalTable factSource ) { SimplifiedIntervalList simplifiedIntervals = new SimplifiedIntervalList(intervals); SimplifiedIntervalList volatileIntervals = IntervalUtils.collectBucketedIntervalsIntersectingIntervalList( intervalsFunctions.getOrDefault(factSource.getName(), defaultIntervals).getVolatileIntervals(), simplifiedIntervals, granularity ); if (granularity instanceof AllGranularity && !volatileIntervals.isEmpty()) { volatileIntervals = simplifiedIntervals; } LOG.trace("Volatile intervals: {} for grain {}", volatileIntervals, granularity); return volatileIntervals; } }
"request.physical.table." + bestTable.getName() + "." + bestTable.getSchema().getTimeGrain() ).mark(); LOG.trace("Found best Table: {}", bestTable);