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_QUEUE_METADATA, DECO_RSVD_1, DECO_RSVD_2, DECO_STORE, 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
ALLOW_INCONSISTENCIES, 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
true if the underlying aggregator is a ParallelAwareAggregator. |
protected boolean |
isDelegateStreaming()
Return
true 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, checkObjectInputFilter, convertUTF, decodeExpiry, decorate, decorate, decorate, decorate, decorate, decorateBinary, encodeExpiry, ensureSerializer, extractIntDecoration, fromBinary, fromBinary, fromBinary, fromBinary, fromBinary, fromBinary, fromByteArray, fromByteArray, getClass, 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, 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, getProcessRandom, 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, 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, isAllowInconsistencies, 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 resulttrue
to continue the aggregation, and false
to
signal to the caller that the result is ready and the
aggregation can be short-circuitedpublic boolean combine(Map<E,Object> partialResult)
InvocableMap.StreamingAggregator
public 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()
true
if the underlying aggregator is a StreamingAggregator.true
if the underlying aggregator is a StreamingAggregatorprotected boolean isDelegateParallel()
true
if the underlying aggregator is a ParallelAwareAggregator.true
if the underlying aggregator is a ParallelAwareAggregatorprotected 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