K
- the type of the Map entry keysV
- the type of the Map entry valuesT
- the type of the value to extract fromE
- the type of the extracted valueR
- the type of the group aggregator resultpublic class GroupAggregator<K,V,T,E,R> extends ExternalizableHelper implements InvocableMap.StreamingAggregator<K,V,Map<E,Object>,Map<E,R>>, ExternalizableLite, PortableObject
extract
call produces the same value or tuple (list of values). After the entries are split into the groups, the underlying aggregator is applied separately to each group. The result of the aggregation by the GroupAggregator is a Map that has distinct values (or tuples) as keys and results of the individual aggregation as values. Additionally, those results could be further reduced using an optional Filter object.
Informally speaking, this aggregator is analogous to the SQL "group by" and "having" clauses. Note that the "having" Filter is applied independently on each server against the partial aggregation results; this generally implies that data affinity is required to ensure that all required data used to generate a given result exists within a single cache partition. In other words, the "group by" predicate should not span multiple partitions if the "having" clause is used.
The GroupAggregator is somewhat similar to the DistinctValues
aggregator, which returns back a list of distinct values (tuples) without performing any additional aggregation work.
Unlike many other concrete EntryAggregator implementations that are constructed directly, instances of GroupAggregator should only be created using one of the factory methods: createInstance(extractor, aggregator)
, createInstance(extractor, aggregator, filter)
, createInstance(sMethod, aggregator)
createInstance(sMethod, aggregator, filter)
Modifier and Type | Class and Description |
---|---|
static class |
GroupAggregator.Parallel<K,V,T,E,R>
Deprecated.
As of Coherence 12.2.1. Use GroupAggregator instead.
|
ExternalizableHelper.DecoratedMultiBufferReadBuffer, ExternalizableHelper.DefaultObjectStreamFactory, ExternalizableHelper.FormatAwareCompressor, ExternalizableHelper.IntDecoratedObject, ExternalizableHelper.Shielded, ExternalizableHelper.ShieldedDataOutputStream, ExternalizableHelper.ShieldedInputStream, ExternalizableHelper.ShieldedObjectOutputStream, ExternalizableHelper.ShieldedOutputStream, ExternalizableHelper.SimpleXmlBeanClassCache, ExternalizableHelper.Stats, ExternalizableHelper.XmlBeanClassCache
Base.LoggingWriter, Base.StackFrame
Modifier and Type | Field and Description |
---|---|
protected InvocableMap.EntryAggregator<? super K,? super V,R> |
m_aggregator
The underlying EntryAggregator.
|
protected ValueExtractor<? super T,? extends E> |
m_extractor
The underlying ValueExtractor.
|
protected Filter |
m_filter
The Filter object representing the "having" clause of this "group by" aggregator.
|
protected boolean |
m_fInit
Flag specifying whether this aggregator has been initialized.
|
protected boolean |
m_fParallel
Flag specifying whether parallel optimizations can be used.
|
protected boolean |
m_fStreaming
Flag specifying whether streaming optimizations can be used.
|
protected Map<E,Object> |
m_mapResults
A map of partial results to aggregate.
|
CONVERTER_FROM_BINARY, CONVERTER_STRIP_INTDECO, CONVERTER_TO_BINARY, DECO_APP_1, DECO_APP_2, DECO_APP_3, DECO_CUSTOM, DECO_EXPIRY, DECO_ID_MAX, DECO_ID_MIN, DECO_JCACHE, DECO_JCACHE_SYNTHETIC, DECO_MEMCACHED, DECO_PUSHREP, DECO_RSVD_1, DECO_RSVD_2, DECO_STORE, DECO_TOPLINK, DECO_TX, DECO_VALUE, DECO_WLS, EMPTY_BINARY_ARRAY, FMT_B_ARRAY, FMT_BIN_DECO, FMT_BIN_EXT_DECO, FMT_BINARY, FMT_BOOLEAN, FMT_BYTE, FMT_DECIMAL, FMT_DOUBLE, FMT_EXT, FMT_FLOAT, FMT_IDO, FMT_INT, FMT_INTEGER, FMT_LONG, FMT_NONE, FMT_NULL, FMT_OBJ_EXT, FMT_OBJ_SER, FMT_OPT, FMT_OPT_DOUBLE, FMT_OPT_INT, FMT_OPT_LONG, FMT_SHORT, FMT_STRING, FMT_UNKNOWN, FMT_XML_BEAN, FMT_XML_SER, FORCE_RESOLVING_STREAMS, MAX_DECO_HEADER_BYTES, PROPERTY_CONFIG, s_streamfactory, TRINT_DOMAIN_SPAN, TRINT_MAX_VALUE, TRINT_MAX_VARIANCE, USE_POF_STREAMS, USE_XMLBEAN_CLASS_CACHE, XMLBEAN_CLASS_CACHE
LOG_ALWAYS, LOG_DEBUG, LOG_ERR, LOG_INFO, LOG_MAX, LOG_MIN, LOG_QUIET, LOG_WARN, POWER_0, POWER_G, POWER_K, POWER_M, POWER_T, UNIT_D, UNIT_H, UNIT_M, UNIT_MS, UNIT_NS, UNIT_S, UNIT_US
BY_MEMBER, BY_PARTITION, PARALLEL, PRESENT_ONLY, RETAINS_ENTRIES, SERIAL
Modifier | Constructor and Description |
---|---|
|
GroupAggregator()
Default constructor (necessary for the ExternalizableLite interface).
|
protected |
GroupAggregator(ValueExtractor<? super T,? extends E> extractor, InvocableMap.EntryAggregator<? super K,? super V,R> aggregator, Filter filter)
Construct a GroupAggregator based on a specified ValueExtractor and underlying EntryAggregator.
|
Modifier and Type | Method and Description |
---|---|
boolean |
accumulate(InvocableMap.Entry<? extends K,? extends V> entry)
Accumulate one entry into the result.
|
int |
characteristics()
A bit mask representing the set of characteristics of this aggregator.
|
boolean |
combine(Map<E,Object> partialResult)
Merge another partial result into the result.
|
static <K,V,R> GroupAggregator<K,V,Object,Object,R> |
createInstance(String sMethod, InvocableMap.EntryAggregator<K,V,R> aggregator)
Create an instance of GroupAggregator based on a specified method name(s) and an
EntryAggregator . |
static <K,V,R> GroupAggregator<K,V,Object,Object,R> |
createInstance(String sMethod, InvocableMap.EntryAggregator<K,V,R> aggregator, Filter filter)
Create an instance of GroupAggregator based on a specified method name(s), an
EntryAggregator and a result evaluation filter. |
static <K,V,T,E,R> |
createInstance(ValueExtractor<? super T,? extends E> extractor, InvocableMap.EntryAggregator<? super K,? super V,R> aggregator, Filter filter)
Create an instance of GroupAggregator based on a specified extractor and an
EntryAggregator and a result evaluation filter. |
static <K,V,T,E,R> |
createInstance(ValueExtractor<? super T,? extends E> extractor, InvocableMap.EntryAggregator<K,V,R> aggregator)
Create an instance of GroupAggregator based on a specified extractor and an
EntryAggregator . |
protected void |
ensureInitialized()
Ensure that this aggregator is initialized.
|
boolean |
equals(Object o)
Compare the GroupAggregator with another object to determine equality.
|
Map<E,R> |
finalizeResult()
Return the final result of the aggregation.
|
InvocableMap.EntryAggregator<? super K,? super V,R> |
getAggregator()
Obtain the underlying EntryAggregator.
|
ValueExtractor<?,? extends E> |
getExtractor()
Obtain the underlying ValueExtractor.
|
Map<E,Object> |
getPartialResult()
Return the partial result of the aggregation.
|
int |
hashCode()
Determine a hash value for the GroupAggregator object according to the general
Object.hashCode() contract. |
protected boolean |
isDelegateParallel()
Return <c>true</c> if the underlying aggregator is a ParallelAwareAggregator.
|
protected boolean |
isDelegateStreaming()
Return <c>true</c> if the underlying aggregator is a StreamingAggregator.
|
protected InvocableMap.ParallelAwareAggregator<? super K,? super V,Object,R> |
parallel(InvocableMap.EntryAggregator<? super K,? super V,R> aggregator)
Convert the specified aggregator to ParallelAwareAggregator.
|
void |
readExternal(DataInput in)
Restore the contents of this object by loading the object's state from the passed DataInput object.
|
void |
readExternal(PofReader in)
Restore the contents of a user type instance by reading its state using the specified PofReader object.
|
protected InvocableMap.StreamingAggregator<? super K,? super V,Object,R> |
streaming(InvocableMap.EntryAggregator<? super K,? super V,R> aggregator)
Convert the specified aggregator to StreamingAggregator.
|
InvocableMap.StreamingAggregator<K,V,Map<E,Object>,Map<E,R>> |
supply()
Create a new instance of this aggregator.
|
protected static <T> BinaryOperator<T> |
throwingMerger() |
String |
toString()
Return a human-readable description for this GroupAggregator.
|
void |
writeExternal(DataOutput out)
Save the contents of this object by storing the object's state into the passed DataOutput object.
|
void |
writeExternal(PofWriter out)
Save the contents of a POF user type instance by writing its state using the specified PofWriter object.
|
asBinary, calculatePackedLength, calculatePackedLength, convertUTF, decodeExpiry, decorate, decorate, decorate, decorate, decorate, decorateBinary, encodeExpiry, ensureSerializer, extractIntDecoration, fromBinary, fromBinary, fromBinary, fromByteArray, fromByteArray, getDecoration, getDecoration, getDecorations, getDeltaCompressor, getInputStream, getNewObjectInput, getObjectInput, getObjectOutput, getObjectStreamFactory, getOutputStream, getShieldedOutputStream, getStreamFormat, getUndecorated, getUndecorated, isDecorated, isDecorated, isIntDecorated, isIntDecorated, isResolving, isSerializable, isSerializerCompatible, loadClass, loadResource, main, makeTrint, readBigDecimal, readBigInteger, readBooleanArray, readByteArray, readCollection, readDate, readDoubleArray, readExternalizableLite, readExternalizableLite, readFloatArray, readInt, readInt, readIntArray2d, readLong, readLong, readMap, readMap, readObject, readObject, readSafeUTF, readSafeUTF, readSerializable, readSerializable, readStringArray, readTime, readTimestamp, readTrint, readUnsignedTrint, readUTF, readXmlBean, readXmlSerializable, readXmlSerializable, realize, removeIntDecoration, removeIntDecoration, replace, reportIncompatibleSerializers, setObjectStreamFactory, toBinary, toBinary, toByteArray, toByteArray, toByteArray, toLiteBinary, toLong, undecorate, undecorate, validateBufferSize, writeBigDecimal, writeBigInteger, writeBooleanArray, writeByteArray, writeCollection, writeDate, writeDoubleArray, writeExternalizableLite, writeFloatArray, writeInt, writeInt, writeIntArray2d, writeLong, writeLong, writeMap, writeObject, writeSafeUTF, writeSafeUTF, writeSerializable, writeStringArray, writeTime, writeTimestamp, writeTrint, writeTrint, writeUTF, writeXmlBean, writeXmlSerializable
countBits, countBits, countBits, indexOfLSB, indexOfLSB, indexOfLSB, indexOfMSB, indexOfMSB, indexOfMSB, rotateLeft, rotateLeft, rotateLeft, rotateRight, rotateRight, rotateRight, toBitString, toBitString, toBitString, toBytes, toBytes, toBytes, toBytes, toInt, toInt, toLong
azzert, azzert, azzert, azzertFailed, breakLines, breakLines, capitalize, checkNotEmpty, checkNotNull, checkRange, computeSafeWaitTime, decimalValue, dup, dup, ensureBigDecimal, ensureClassLoader, ensureRuntimeException, ensureRuntimeException, equals, equalsDeep, err, err, err, err, err, escape, formatDateTime, getCallerStackFrame, getCommonMonitor, getCommonMonitor, getCommonMonitor, getContextClassLoader, getContextClassLoader, getDeepMessage, getErr, getLastSafeTimeMillis, getLog, getMaxDecDigits, getMaxHexDigits, getOriginalException, getOut, getRandom, getRandomBinary, getRandomBinary, getRandomString, getSafeTimeMillis, getStackFrame, getStackFrames, getStackTrace, getStackTrace, getThreadFactory, getTimeZone, getUpTimeMillis, hashCode, hexValue, indentString, indentString, isDecimal, isHex, isLogEcho, isOctal, log, log, log, log, log, makeInteger, makeLong, makeThread, octalValue, out, out, out, out, out, pad, parseBandwidth, parseBandwidth, parseDelimitedString, parseHex, parseHex, parseMemorySize, parseMemorySize, parsePercentage, parseTime, parseTime, parseTimeNanos, parseTimeNanos, printStackTrace, randomize, randomize, randomize, read, read, read, read, read, read, read, replace, setErr, setLog, setLogEcho, setOut, sleep, toBandwidthString, toBandwidthString, toCharEscape, toCrc, toCrc, toCrc, toCrc, toCrc, toDecString, toDelimitedString, toDelimitedString, toDelimitedString, toDelimitedString, toHex, toHex, toHexDump, toHexEscape, toHexEscape, toHexEscape, toHexEscape, toHexString, toMemorySizeString, toMemorySizeString, toQuotedCharEscape, toQuotedStringEscape, toSqlString, toString, toString, toStringEscape, toUnicodeEscape, trace, trace, trace, trace, trace, trace, trace, trace, trace, truncateString, truncateString, wait
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
accumulate, aggregate, isByMember, isByPartition, isParallel, isPresentOnly, isRetainsEntries, isSerial
protected ValueExtractor<? super T,? extends E> m_extractor
protected InvocableMap.EntryAggregator<? super K,? super V,R> m_aggregator
protected Filter m_filter
protected transient boolean m_fInit
protected transient boolean m_fStreaming
protected transient boolean m_fParallel
public GroupAggregator()
protected GroupAggregator(ValueExtractor<? super T,? extends E> extractor, InvocableMap.EntryAggregator<? super K,? super V,R> aggregator, Filter filter)
extractor
- a ValueExtractor object that is used to split InvocableMap entries into non-intersecting subsets; may not be nullaggregator
- an EntryAggregator object; may not be nullfilter
- an optional Filter object used to filter out results of individual group aggregation resultspublic InvocableMap.StreamingAggregator<K,V,Map<E,Object>,Map<E,R>> supply()
InvocableMap.StreamingAggregator
public boolean accumulate(InvocableMap.Entry<? extends K,? extends V> entry)
InvocableMap.StreamingAggregator
accumulate
in interface InvocableMap.StreamingAggregator<K,V,Map<E,Object>,Map<E,R>>
entry
- the entry to accumulate into the aggregation resultpublic boolean combine(Map<E,Object> partialResult)
InvocableMap.StreamingAggregator
combine
in interface InvocableMap.StreamingAggregator<K,V,Map<E,Object>,Map<E,R>>
partialResult
- the partial result to mergepublic Map<E,Object> getPartialResult()
InvocableMap.StreamingAggregator
getPartialResult
in interface InvocableMap.StreamingAggregator<K,V,Map<E,Object>,Map<E,R>>
public Map<E,R> finalizeResult()
InvocableMap.StreamingAggregator
finalizeResult
in interface InvocableMap.StreamingAggregator<K,V,Map<E,Object>,Map<E,R>>
public int characteristics()
InvocableMap.StreamingAggregator
Be default, characteristics are a combination of InvocableMap.StreamingAggregator.PARALLEL
and InvocableMap.StreamingAggregator.RETAINS_ENTRIES
, which is sub-optimal and should be overridden by the aggregator implementation if the aggregator does not need to retain entries (which is often the case).
characteristics
in interface InvocableMap.StreamingAggregator<K,V,Map<E,Object>,Map<E,R>>
InvocableMap.StreamingAggregator.PARALLEL
, InvocableMap.StreamingAggregator.SERIAL
, InvocableMap.StreamingAggregator.BY_MEMBER
, InvocableMap.StreamingAggregator.BY_PARTITION
, InvocableMap.StreamingAggregator.RETAINS_ENTRIES
, InvocableMap.StreamingAggregator.PRESENT_ONLY
public ValueExtractor<?,? extends E> getExtractor()
public InvocableMap.EntryAggregator<? super K,? super V,R> getAggregator()
protected void ensureInitialized()
protected InvocableMap.StreamingAggregator<? super K,? super V,Object,R> streaming(InvocableMap.EntryAggregator<? super K,? super V,R> aggregator)
aggregator
- the aggregator to convertprotected InvocableMap.ParallelAwareAggregator<? super K,? super V,Object,R> parallel(InvocableMap.EntryAggregator<? super K,? super V,R> aggregator)
aggregator
- the aggregator to convertprotected boolean isDelegateStreaming()
protected boolean isDelegateParallel()
protected static <T> BinaryOperator<T> throwingMerger()
public void readExternal(DataInput in) throws IOException
ExternalizableLite
readExternal
in interface ExternalizableLite
in
- the DataInput stream to read data from in order to restore the state of this objectIOException
- if an I/O exception occursNotActiveException
- if the object is not in its initial state, and therefore cannot be deserialized intopublic void writeExternal(DataOutput out) throws IOException
ExternalizableLite
writeExternal
in interface ExternalizableLite
out
- the DataOutput stream to write the state of this object toIOException
- if an I/O exception occurspublic void readExternal(PofReader in) throws IOException
PortableObject
readExternal
in interface PortableObject
in
- the PofReader from which to read the object's stateIOException
- if an I/O error occurspublic void writeExternal(PofWriter out) throws IOException
PortableObject
writeExternal
in interface PortableObject
out
- the PofWriter to which to write the object's stateIOException
- if an I/O error occurspublic boolean equals(Object o)
public int hashCode()
Object.hashCode()
contract.public String toString()
public static <K,V,R> GroupAggregator<K,V,Object,Object,R> createInstance(String sMethod, InvocableMap.EntryAggregator<K,V,R> aggregator)
EntryAggregator
.ParallelAwareAggregator
, then a parallel-aware instance of the GroupAggregator will be created. Otherwise, the resulting GroupAggregator will not be parallel-aware and could be ill-suited for aggregations run against large partitioned caches.sMethod
- a method name or a comma-delimited sequence of names that results in a ReflectionExtractor
or a MultiExtractor
that will be used to split InvocableMap entries into distinct groupsaggregator
- an underlying EntryAggregatorpublic static <K,V,R> GroupAggregator<K,V,Object,Object,R> createInstance(String sMethod, InvocableMap.EntryAggregator<K,V,R> aggregator, Filter filter)
EntryAggregator
and a result evaluation filter.ParallelAwareAggregator
, then a parallel-aware instance of the GroupAggregator will be created. Otherwise, the resulting GroupAggregator will not be parallel-aware and could be ill-suited for aggregations run against large partitioned caches.sMethod
- a method name or a comma-delimited sequence of names that results in a ReflectionExtractor
or a MultiExtractor
that will be used to split InvocableMap entries into distinct groupsaggregator
- an underlying EntryAggregatorfilter
- an optional Filter object that will be used to evaluate results of each individual group aggregationpublic static <K,V,T,E,R> GroupAggregator<K,V,T,E,R> createInstance(ValueExtractor<? super T,? extends E> extractor, InvocableMap.EntryAggregator<K,V,R> aggregator)
EntryAggregator
.ParallelAwareAggregator
, then a parallel-aware instance of the GroupAggregator will be created. Otherwise, the resulting GroupAggregator will not be parallel-aware and could be ill-suited for aggregations run against large partitioned caches.extractor
- a ValueExtractor that will be used to split a set of InvocableMap entries into distinct groupsaggregator
- an underlying EntryAggregatorpublic static <K,V,T,E,R> GroupAggregator<K,V,T,E,R> createInstance(ValueExtractor<? super T,? extends E> extractor, InvocableMap.EntryAggregator<? super K,? super V,R> aggregator, Filter filter)
EntryAggregator
and a result evaluation filter.ParallelAwareAggregator
, then a parallel-aware instance of the GroupAggregator will be created. Otherwise, the resulting GroupAggregator will not be parallel-aware and could be ill-suited for aggregations run against large partitioned caches.extractor
- a ValueExtractor that will be used to split a set of InvocableMap entries into distinct groupsaggregator
- an underlying EntryAggregatorfilter
- an optional Filter object used to filter out results of individual group aggregation results