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.XmlBeanClassCacheBase.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_QUEUE_METADATA, 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_CACHELOG_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_USBY_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, isVersionCompatible, isVersionCompatible, 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, writeXmlSerializablecountBits, countBits, countBits, indexOfLSB, indexOfLSB, indexOfLSB, indexOfMSB, indexOfMSB, indexOfMSB, rotateLeft, rotateLeft, rotateLeft, rotateRight, rotateRight, rotateRight, toBitString, toBitString, toBitString, toBytes, toBytes, toBytes, toBytes, toInt, toInt, toLongazzert, 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, mod, mod, 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, waitclone, finalize, getClass, notify, notifyAll, wait, wait, waitaccumulate, aggregate, isByMember, isByPartition, isParallel, isPresentOnly, isRetainsEntries, isSerialprotected 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.StreamingAggregatorpublic boolean accumulate(InvocableMap.Entry<? extends K,? extends V> entry)
InvocableMap.StreamingAggregatoraccumulate 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.StreamingAggregatorcombine in interface InvocableMap.StreamingAggregator<K,V,Map<E,Object>,Map<E,R>>partialResult - the partial result to mergepublic Map<E,Object> getPartialResult()
InvocableMap.StreamingAggregatorgetPartialResult in interface InvocableMap.StreamingAggregator<K,V,Map<E,Object>,Map<E,R>>public Map<E,R> finalizeResult()
InvocableMap.StreamingAggregatorfinalizeResult in interface InvocableMap.StreamingAggregator<K,V,Map<E,Object>,Map<E,R>>public int characteristics()
InvocableMap.StreamingAggregatorBe 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_ONLYpublic 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
ExternalizableLitereadExternal in interface ExternalizableLitein - 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
ExternalizableLitewriteExternal in interface ExternalizableLiteout - the DataOutput stream to write the state of this object toIOException - if an I/O exception occurspublic void readExternal(PofReader in) throws IOException
PortableObjectreadExternal in interface PortableObjectin - the PofReader from which to read the object's stateIOException - if an I/O error occurspublic void writeExternal(PofWriter out) throws IOException
PortableObjectwriteExternal in interface PortableObjectout - 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