public class BufferArrayGrouper extends Object implements IntGrouper
The buffer is divided into 2 separate regions, i.e., used flag buffer and value buffer. The used flag buffer is a
bit set to represent which keys are valid. If a bit of an index is set, that key is valid. Finally, the value
buffer is used to store aggregated values. The first index is reserved for
GroupByColumnSelectorStrategy.GROUP_BY_MISSING_VALUE.
This grouper is available only when the grouping key is a single indexed dimension of a known cardinality because it directly uses the dimension value as the index for array access. Since the cardinality for the grouping key across different segments cannot be currently retrieved, this grouper can be used only when performing per-segment query execution.
IntGrouper.IntGrouperHashFunctionGrouper.BufferComparator, Grouper.Entry<T>, Grouper.KeySerde<T>, Grouper.KeySerdeFactory<T>| Constructor and Description |
|---|
BufferArrayGrouper(com.google.common.base.Supplier<ByteBuffer> bufferSupplier,
ColumnSelectorFactory columnSelectorFactory,
AggregatorFactory[] aggregatorFactories,
int cardinality) |
| Modifier and Type | Method and Description |
|---|---|
AggregateResult |
aggregate(int key,
int dimIndex) |
void |
close()
Close the grouper and release associated resources.
|
IntGrouper.IntGrouperHashFunction |
hashFunction() |
void |
init()
Initialize the grouper.
|
boolean |
isInitialized()
Check this grouper is initialized or not.
|
Iterator<Grouper.Entry<Integer>> |
iterator(boolean sorted)
Iterate through entries.
|
void |
reset()
Reset the grouper to its initial state.
|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitaggregate, aggregate, aggregatepublic BufferArrayGrouper(com.google.common.base.Supplier<ByteBuffer> bufferSupplier, ColumnSelectorFactory columnSelectorFactory, AggregatorFactory[] aggregatorFactories, int cardinality)
public void init()
GrouperGrouper.aggregate(Object) and Grouper.aggregate(Object, int).public boolean isInitialized()
GrouperisInitialized in interface Grouper<Integer>public AggregateResult aggregate(int key, int dimIndex)
aggregate in interface IntGrouperpublic void reset()
Grouperpublic IntGrouper.IntGrouperHashFunction hashFunction()
hashFunction in interface Grouper<Integer>hashFunction in interface IntGrouperpublic void close()
Grouperpublic Iterator<Grouper.Entry<Integer>> iterator(boolean sorted)
Grouper
Once this method is called, writes are no longer safe. After you are done with the iterator returned by this
method, you should either call Grouper.close() (if you are done with the Grouper), Grouper.reset() (if you
want to reuse it), or Grouper.iterator(boolean) again if you want another iterator. This method is not thread-safe
and must not be called by multiple threads concurrently.
If "sorted" is true then the iterator will return sorted results. It will use KeyType's natural ordering on
deserialized objects, and will use the KeySerde#comparator() on serialized objects. Woe be unto you
if these comparators are not equivalent.
Callers must process and discard the returned Grouper.Entrys immediately because some implementations can reuse the
key objects.
Copyright © 2011–2017. All rights reserved.