Search in sources :

Example 1 with UnreadFieldDataList

use of org.locationtech.geowave.core.store.data.UnreadFieldDataList in project geowave by locationtech.

the class WholeRowAggregationIterator method filter.

@Override
protected boolean filter(final Text currentRow, final List<Key> keys, final List<Value> values) {
    if ((aggregationIterator != null) && (aggregationIterator.queryFilterIterator != null)) {
        final PersistentDataset<Object> commonData = new MultiFieldPersistentDataset<>();
        final List<FlattenedUnreadData> unreadData = new ArrayList<>();
        for (int i = 0; (i < keys.size()) && (i < values.size()); i++) {
            final Key key = keys.get(i);
            final Value value = values.get(i);
            final FlattenedUnreadData singleRow = aggregationIterator.queryFilterIterator.aggregateFieldData(key, value, commonData);
            if (singleRow != null) {
                unreadData.add(singleRow);
            }
        }
        final CommonIndexedPersistenceEncoding encoding = QueryFilterIterator.getEncoding(currentRow, queryFilterIterator.partitionKeyLength, commonData, unreadData.isEmpty() ? null : new UnreadFieldDataList(unreadData));
        boolean queryFilterResult = true;
        if (aggregationIterator.queryFilterIterator.isSet()) {
            queryFilterResult = aggregationIterator.queryFilterIterator.applyRowFilter(encoding);
        }
        if (queryFilterResult) {
            aggregationIterator.aggregateRow(currentRow, queryFilterIterator.model, encoding);
        }
    }
    // we don't want to return anything but the aggregation result
    return false;
}
Also used : MultiFieldPersistentDataset(org.locationtech.geowave.core.store.data.MultiFieldPersistentDataset) CommonIndexedPersistenceEncoding(org.locationtech.geowave.core.store.data.CommonIndexedPersistenceEncoding) FlattenedUnreadData(org.locationtech.geowave.core.store.flatten.FlattenedUnreadData) UnreadFieldDataList(org.locationtech.geowave.core.store.data.UnreadFieldDataList) ArrayList(java.util.ArrayList) Value(org.apache.accumulo.core.data.Value) Key(org.apache.accumulo.core.data.Key)

Example 2 with UnreadFieldDataList

use of org.locationtech.geowave.core.store.data.UnreadFieldDataList in project geowave by locationtech.

the class MemoryDataStoreOperations method createReader.

@Override
public <T> RowReader<T> createReader(final ReaderParams<T> readerParams) {
    final SortedSet<MemoryStoreEntry> internalData = storeData.get(readerParams.getIndex().getName());
    int counter = 0;
    List<MemoryStoreEntry> retVal = new ArrayList<>();
    final Collection<SinglePartitionQueryRanges> partitionRanges = readerParams.getQueryRanges().getPartitionQueryRanges();
    if ((partitionRanges == null) || partitionRanges.isEmpty()) {
        retVal.addAll(internalData);
        // remove unauthorized
        final Iterator<MemoryStoreEntry> it = retVal.iterator();
        while (it.hasNext()) {
            if (!isAuthorized(it.next(), readerParams.getAdditionalAuthorizations())) {
                it.remove();
            }
        }
        if ((readerParams.getLimit() != null) && (readerParams.getLimit() > 0) && (retVal.size() > readerParams.getLimit())) {
            retVal = retVal.subList(0, readerParams.getLimit());
        }
    } else {
        for (final SinglePartitionQueryRanges p : partitionRanges) {
            for (final ByteArrayRange r : p.getSortKeyRanges()) {
                final SortedSet<MemoryStoreEntry> set;
                if (r.isSingleValue()) {
                    set = Sets.newTreeSet(internalData.subSet(new MemoryStoreEntry(p.getPartitionKey(), r.getStart()), new MemoryStoreEntry(p.getPartitionKey(), ByteArrayUtils.getNextPrefix(r.getStart()))));
                } else {
                    set = Sets.newTreeSet(internalData.tailSet(new MemoryStoreEntry(p.getPartitionKey(), r.getStart())).headSet(new MemoryStoreEntry(p.getPartitionKey(), r.getEndAsNextPrefix())));
                }
                // remove unauthorized
                final Iterator<MemoryStoreEntry> it = set.iterator();
                while (it.hasNext()) {
                    final MemoryStoreEntry entry = it.next();
                    if (!isAuthorized(entry, readerParams.getAdditionalAuthorizations())) {
                        it.remove();
                    } else if (!ArrayUtils.contains(readerParams.getAdapterIds(), entry.row.getAdapterId())) {
                        it.remove();
                    }
                }
                if ((readerParams.getLimit() != null) && (readerParams.getLimit() > 0) && ((counter + set.size()) > readerParams.getLimit())) {
                    final List<MemoryStoreEntry> subset = new ArrayList<>(set);
                    retVal.addAll(subset.subList(0, readerParams.getLimit() - counter));
                    break;
                } else {
                    retVal.addAll(set);
                    counter += set.size();
                    if ((readerParams.getLimit() != null) && (readerParams.getLimit() > 0) && (counter >= readerParams.getLimit())) {
                        break;
                    }
                }
            }
        }
    }
    return new MyIndexReader<>(Iterators.filter(retVal.iterator(), new Predicate<MemoryStoreEntry>() {

        @Override
        public boolean apply(final MemoryStoreEntry input) {
            if ((readerParams.getFilter() != null) && options.isServerSideLibraryEnabled()) {
                final PersistentDataset<Object> commonData = new MultiFieldPersistentDataset<>();
                final List<FlattenedUnreadData> unreadData = new ArrayList<>();
                final List<String> commonIndexFieldNames = DataStoreUtils.getUniqueDimensionFields(readerParams.getIndex().getIndexModel());
                for (final GeoWaveValue v : input.getRow().getFieldValues()) {
                    unreadData.add(DataStoreUtils.aggregateFieldData(input.getRow(), v, commonData, readerParams.getIndex().getIndexModel(), commonIndexFieldNames));
                }
                return readerParams.getFilter().accept(readerParams.getIndex().getIndexModel(), new DeferredReadCommonIndexedPersistenceEncoding(input.getRow().getAdapterId(), input.getRow().getDataId(), input.getRow().getPartitionKey(), input.getRow().getSortKey(), input.getRow().getNumberOfDuplicates(), commonData, unreadData.isEmpty() ? null : new UnreadFieldDataList(unreadData)));
            }
            return true;
        }
    }), readerParams.getRowTransformer());
}
Also used : DeferredReadCommonIndexedPersistenceEncoding(org.locationtech.geowave.core.store.data.DeferredReadCommonIndexedPersistenceEncoding) UnreadFieldDataList(org.locationtech.geowave.core.store.data.UnreadFieldDataList) ArrayList(java.util.ArrayList) SinglePartitionQueryRanges(org.locationtech.geowave.core.index.SinglePartitionQueryRanges) GeoWaveValue(org.locationtech.geowave.core.store.entities.GeoWaveValue) ByteArrayRange(org.locationtech.geowave.core.index.ByteArrayRange) Predicate(com.google.common.base.Predicate) MultiFieldPersistentDataset(org.locationtech.geowave.core.store.data.MultiFieldPersistentDataset) FlattenedUnreadData(org.locationtech.geowave.core.store.flatten.FlattenedUnreadData)

Example 3 with UnreadFieldDataList

use of org.locationtech.geowave.core.store.data.UnreadFieldDataList in project geowave by locationtech.

the class WholeRowQueryFilterIterator method filter.

@Override
protected boolean filter(final Text currentRow, final List<Key> keys, final List<Value> values) {
    if ((queryFilterIterator != null) && queryFilterIterator.isSet()) {
        final PersistentDataset<Object> commonData = new MultiFieldPersistentDataset<>();
        final List<FlattenedUnreadData> unreadData = new ArrayList<>();
        for (int i = 0; (i < keys.size()) && (i < values.size()); i++) {
            final Key key = keys.get(i);
            final Value value = values.get(i);
            unreadData.add(queryFilterIterator.aggregateFieldData(key, value, commonData));
        }
        return queryFilterIterator.applyRowFilter(currentRow, commonData, unreadData.isEmpty() ? null : new UnreadFieldDataList(unreadData));
    }
    // it'll just have to accept everything
    return true;
}
Also used : MultiFieldPersistentDataset(org.locationtech.geowave.core.store.data.MultiFieldPersistentDataset) FlattenedUnreadData(org.locationtech.geowave.core.store.flatten.FlattenedUnreadData) UnreadFieldDataList(org.locationtech.geowave.core.store.data.UnreadFieldDataList) ArrayList(java.util.ArrayList) Value(org.apache.accumulo.core.data.Value) Key(org.apache.accumulo.core.data.Key)

Aggregations

ArrayList (java.util.ArrayList)3 MultiFieldPersistentDataset (org.locationtech.geowave.core.store.data.MultiFieldPersistentDataset)3 UnreadFieldDataList (org.locationtech.geowave.core.store.data.UnreadFieldDataList)3 FlattenedUnreadData (org.locationtech.geowave.core.store.flatten.FlattenedUnreadData)3 Key (org.apache.accumulo.core.data.Key)2 Value (org.apache.accumulo.core.data.Value)2 Predicate (com.google.common.base.Predicate)1 ByteArrayRange (org.locationtech.geowave.core.index.ByteArrayRange)1 SinglePartitionQueryRanges (org.locationtech.geowave.core.index.SinglePartitionQueryRanges)1 CommonIndexedPersistenceEncoding (org.locationtech.geowave.core.store.data.CommonIndexedPersistenceEncoding)1 DeferredReadCommonIndexedPersistenceEncoding (org.locationtech.geowave.core.store.data.DeferredReadCommonIndexedPersistenceEncoding)1 GeoWaveValue (org.locationtech.geowave.core.store.entities.GeoWaveValue)1