Class AggregationKeyColumnSource<T>
- All Implemented Interfaces:
ChunkSource<Values>,ChunkSource.WithPrev<Values>,ColumnSource<T>,ElementSource<T>,FillContextMaker,GetContextMaker,DefaultChunkSource<Values>,DefaultChunkSource.WithPrev<Values>,PushdownFilterMatcher,ConvertibleTimeSource,FillUnordered<Values>,InMemoryColumnSource,Releasable,TupleExporter<T>,TupleSource<T>
MatchFilter on this column is pushed down by probing the aggregation's hash table once per match
value, at a cost independent of the result's size.
The aggregation never moves or removes a key's state, so a key's row key is fixed once assigned, and a probe answers
for previous values as well as current ones. A refreshing aggregation changes its hash table only in its update
cycle, which it marks before the first
change. A probe on another thread reads the clock's step first, and is abandoned, so that the filter scans the
column, when a cycle at that step or later began changing the hash table, filtering previous values, or a later cycle
did, filtering current ones.
The key source's time conversions are delegated as well, so that a key column reinterprets as the column it was grouped from does, and the key column is in memory exactly when the key source is.
-
Nested Class Summary
Nested classes/interfaces inherited from class io.deephaven.engine.table.impl.AbstractColumnSource
AbstractColumnSource.DefaultedImmutable<DATA_TYPE>, AbstractColumnSource.DefaultedMutable<DATA_TYPE>Nested classes/interfaces inherited from interface io.deephaven.engine.table.ChunkSource
ChunkSource.FillContext, ChunkSource.GetContext, ChunkSource.WithPrev<ATTR extends Any>Nested classes/interfaces inherited from interface io.deephaven.engine.table.impl.sources.ConvertibleTimeSource
ConvertibleTimeSource.ZonedNested classes/interfaces inherited from interface io.deephaven.engine.table.impl.DefaultChunkSource
DefaultChunkSource.SupportsContiguousGet<ATTR extends Any>, DefaultChunkSource.WithPrev<ATTR extends Any>Nested classes/interfaces inherited from interface io.deephaven.engine.table.TupleExporter
TupleExporter.ExportElementFunction<TUPLE_TYPE> -
Field Summary
Fields inherited from class io.deephaven.engine.table.impl.AbstractColumnSource
componentType, type, USE_RANGES_AVERAGE_RUN_LENGTHFields inherited from interface io.deephaven.engine.table.ChunkSource
DEFAULT_FILL_INSTANCE, ZERO_LENGTH_CHUNK_SOURCE_ARRAYFields inherited from interface io.deephaven.engine.table.ChunkSource.WithPrev
ZERO_LENGTH_CHUNK_SOURCE_WITH_PREV_ARRAYFields inherited from interface io.deephaven.engine.table.ColumnSource
ZERO_LENGTH_COLUMN_SOURCE_ARRAYFields inherited from interface io.deephaven.engine.table.impl.sources.InMemoryColumnSource
TWO_DIMENSIONAL_COLUMN_SOURCE_THRESHOLD -
Method Summary
Modifier and TypeMethodDescriptionvoidestimatePushdownFilterCost(WhereFilter filter, RowSet selection, boolean usePrev, PushdownFilterContext context, JobScheduler jobScheduler, LongConsumer onComplete, Consumer<Exception> onError) Estimate the cost of pushing down the next pushdown filter.booleanvoidpushdownFilter(WhereFilter filter, RowSet selection, boolean usePrev, PushdownFilterContext context, long costCeiling, JobScheduler jobScheduler, Consumer<PushdownResult> onComplete, Consumer<Exception> onError) Push down the given filter to the underlying table and pass the result to the consumer.booleanCheck if this class supports time conversion.Convert this source to alongsource of nanoseconds of epoch.Convert this source to anInstantsource.toLocalDate(@NotNull ZoneId zone) toLocalTime(@NotNull ZoneId zone) toZonedDateTime(@NotNull ZoneId zone) Convert this source to aZonedDateTimesource at the specifiedzone.Methods inherited from class io.deephaven.engine.table.impl.sources.DelegatingColumnSource
allowsReinterpret, doReinterpret, fillChunk, fillChunkUnordered, fillPrevChunk, fillPrevChunkUnordered, get, getBoolean, getByte, getChar, getChunk, getChunk, getDouble, getFloat, getInt, getLong, getPrev, getPrevBoolean, getPrevByte, getPrevChar, getPrevChunk, getPrevChunk, getPrevDouble, getPrevFloat, getPrevInt, getPrevLong, getPrevShort, getShort, isImmutable, isStateless, makeFillContext, makeGetContext, match, providesFillUnordered, releaseCachedResources, startTrackingPrevValuesMethods inherited from class io.deephaven.engine.table.impl.AbstractColumnSource
defaultFillChunk, defaultFillPrevChunk, getComponentType, getPrevSource, getType, makePushdownFilterContext, pushdownManager, reinterpretMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface io.deephaven.engine.table.ColumnSource
cast, cast, cast, cast, createPreviousTuple, createTuple, createTupleFromValues, exportAllTo, exportElement, exportElement, getChunkType, tupleLengthMethods inherited from interface io.deephaven.engine.table.impl.DefaultChunkSource
getChunkByFillingMethods inherited from interface io.deephaven.engine.table.impl.DefaultChunkSource.WithPrev
getPrevChunkByFillingMethods inherited from interface io.deephaven.engine.table.FillContextMaker
makeFillContextMethods inherited from interface io.deephaven.engine.table.GetContextMaker
makeGetContextMethods inherited from interface io.deephaven.engine.table.TupleExporter
exportAllReinterpretedTo, exportAllReinterpretedTo, exportAllTo, exportElementReinterpretedMethods inherited from interface io.deephaven.engine.table.TupleSource
createTupleFromReinterpretedValues
-
Method Details
-
getKeySource
- Returns:
- the aggregation's key source, which this column reads
-
isInMemory
public boolean isInMemory()- Specified by:
isInMemoryin interfaceInMemoryColumnSource- Returns:
- true if this column source is entirely in memory.
-
supportsTimeConversion
public boolean supportsTimeConversion()Description copied from interface:ConvertibleTimeSourceCheck if this class supports time conversion. If false, all other methods will fail.- Specified by:
supportsTimeConversionin interfaceConvertibleTimeSource- Returns:
- true if time conversion is supported.
-
toZonedDateTime
Description copied from interface:ConvertibleTimeSourceConvert this source to aZonedDateTimesource at the specifiedzone.- Specified by:
toZonedDateTimein interfaceConvertibleTimeSource- Parameters:
zone- the time zone- Returns:
- a view of this source as a
ZonedDateTime
-
toLocalDate
Description copied from interface:ConvertibleTimeSource- Specified by:
toLocalDatein interfaceConvertibleTimeSource- Parameters:
zone- the time zone- Returns:
- a view of this source as a
LocalDate
-
toLocalTime
Description copied from interface:ConvertibleTimeSource- Specified by:
toLocalTimein interfaceConvertibleTimeSource- Parameters:
zone- the time zone- Returns:
- a view of this source as a
LocalTime
-
toInstant
Description copied from interface:ConvertibleTimeSourceConvert this source to anInstantsource.- Specified by:
toInstantin interfaceConvertibleTimeSource- Returns:
- a view of this source asan
Instant
-
toEpochNano
Description copied from interface:ConvertibleTimeSourceConvert this source to alongsource of nanoseconds of epoch.- Specified by:
toEpochNanoin interfaceConvertibleTimeSource- Returns:
- a view of this source as a
ZonedDateTime
-
estimatePushdownFilterCost
public void estimatePushdownFilterCost(WhereFilter filter, RowSet selection, boolean usePrev, PushdownFilterContext context, JobScheduler jobScheduler, LongConsumer onComplete, Consumer<Exception> onError) Description copied from interface:PushdownFilterMatcherEstimate the cost of pushing down the next pushdown filter. This returns a unitless value to compare the cost of executing different filters. Common costs are listed inPushdownResult(such asPushdownResult.REGION_METADATA_STATS_COST) and should be used as a baseline for estimating the cost of newly implemented pushdown operations.A no-op implementation should simply complete with
Long.MAX_VALUE.- Specified by:
estimatePushdownFilterCostin interfacePushdownFilterMatcher- Overrides:
estimatePushdownFilterCostin classAbstractColumnSource<T>- Parameters:
filter- Thefilterto test.selection- The set of rows to tests.usePrev- Whether to use the previous resultcontext- ThePushdownFilterContextto use for the pushdown operation.jobScheduler- The job scheduler to use for scheduling child jobsonComplete- Consumer of the estimated cost of the pushdown operation. 9223372036854775807L indicates that the filter cannot be pushed down.onError- Consumer of any exceptions that occur during the estimate operation
-
pushdownFilter
public void pushdownFilter(WhereFilter filter, RowSet selection, boolean usePrev, PushdownFilterContext context, long costCeiling, JobScheduler jobScheduler, Consumer<PushdownResult> onComplete, Consumer<Exception> onError) Description copied from interface:PushdownFilterMatcherPush down the given filter to the underlying table and pass the result to the consumer. This method is expected to execute all pushdown filter steps that are greater thanPushdownFilterContext.executedFilterCost()and less than or equal tocostCeiling.The resulting
PushdownResult(toonComplete) must only contain rows fromselection. Thematch row setare rows that are guaranteed to match. The implicitly "missing" rowsselection - match - maybeMatchare rows that are guaranteed to not match. The remainingmaybe match row setare rows that may, or may not, match. The pushdown result ownership passes toonComplete.A no-op implementation should simply complete with
PushdownResult.maybeMatch(selection).- Specified by:
pushdownFilterin interfacePushdownFilterMatcher- Overrides:
pushdownFilterin classAbstractColumnSource<T>- Parameters:
filter- Thefilterto apply.selection- The set of rows to test.usePrev- Whether to use the previous resultcontext- ThePushdownFilterContextto use for the pushdown operation.costCeiling- Execute all possible filters with a cost less than or equal this value.jobScheduler- The job scheduler to use for scheduling child jobsonComplete- Consumer of the output rowsets for added and modified rows that pass the filteronError- Consumer of any exceptions that occur during the pushdown operation
-