@Override public PartitionStatisticsQueryBuilder<R> newBuilder() { return new PartitionStatisticsQueryBuilder<>(this); } }
@Override protected String extendedId() { return composeId(indexName, partitionKey); }
@Override public InternalDataStatistics<T, NumericHistogram, PartitionStatisticsQueryBuilder<NumericHistogram>> duplicate() { final Pair<String, byte[]> pair = PartitionStatisticsQueryBuilder.decomposeIndexAndPartitionFromId(extendedId); return new RowRangeHistogramStatistics<>( adapterId, pair.getLeft(), // indexName pair.getRight()); }
public static <T> long cardinality( final Index index, final Map<StatisticsId, InternalDataStatistics<T, ?, ?>> stats, final QueryRanges queryRanges) { long count = 0; for (final SinglePartitionQueryRanges partitionRange : queryRanges.getPartitionQueryRanges()) { final RowRangeHistogramStatistics rangeStats = (RowRangeHistogramStatistics) stats.get( StatisticsQueryBuilder.newBuilder().factory().rowHistogram().indexName( index.getName()).partition(partitionRange.getPartitionKey()).build().getId()); if (rangeStats == null) { return Long.MAX_VALUE - 1; } for (final ByteArrayRange range : partitionRange.getSortKeyRanges()) { count += rangeStats.cardinality(range.getStart(), range.getEnd()); } } return count; }
private RowRangeHistogramStatistics<?> getRangeStats( final Index index, final List<Short> adapterIds, final TransientAdapterStore adapterStore, final DataStatisticsStore store, final ByteArray partitionKey, final String[] authorizations) { RowRangeHistogramStatistics<?> singleStats = null; final StatisticsQuery<NumericHistogram> statsQuery = StatisticsQueryBuilder.newBuilder().factory().rowHistogram().indexName( index.getName()).partition(partitionKey.getBytes()).build(); for (final Short adapterId : adapterIds) { try (final CloseableIterator<InternalDataStatistics<?, ?, ?>> it = store.getDataStatistics( adapterId, statsQuery.getExtendedId(), statsQuery.getStatsType(), authorizations)) { while (it.hasNext()) { final RowRangeHistogramStatistics<?> rowStat = (RowRangeHistogramStatistics<?>) it.next(); if (singleStats == null) { singleStats = rowStat; } else { singleStats.merge(rowStat); } } } } return singleStats; }
@Override public String toString() { final StringBuffer buffer = new StringBuffer(); final Pair<String, byte[]> indexAndPartition = PartitionStatisticsQueryBuilder.decomposeIndexAndPartitionFromId(extendedId); buffer.append("histogram[index=").append(indexAndPartition.getLeft()); if ((indexAndPartition.getRight() != null) && (indexAndPartition.getRight().length > 0)) { buffer.append(", partitionAsHex=").append( ByteArrayUtils.getHexString(indexAndPartition.getRight())); } if (histogram != null) { buffer.append(", quantiles={"); for (int i = 1; i < 10; i++) { buffer.append((i * 10) + "%: " + histogram.quantile(i * 0.1)); buffer.append(' '); } buffer.deleteCharAt(buffer.length() - 1); buffer.append("}]"); } buffer.append("]"); return buffer.toString(); }
public RowRangeHistogramStatistics( final Short internalDataAdapterId, final String indexName, final byte[] partitionKey) { super( internalDataAdapterId, STATS_TYPE, PartitionStatisticsQueryBuilder.composeId(indexName, partitionKey)); histogram = createHistogram(); }
@Override protected Object resultsValue() { final Pair<String, byte[]> indexAndPartition = PartitionStatisticsQueryBuilder.decomposeIndexAndPartitionFromId(extendedId); final Map<String, Object> retVal = new HashMap<>(); retVal.put("index", indexAndPartition.getLeft()); retVal.put("partitionAsHex", ByteArrayUtils.getHexString(indexAndPartition.getRight())); if (histogram != null) { final Map<String, Object> histogramMap = new HashMap<>(); histogramMap.put("min", Double.toString(histogram.getMinValue())); histogramMap.put("max", Double.toString(histogram.getMaxValue())); final Collection<String> quantilesArray = new ArrayList<>(); for (int i = 1; i < 10; i++) { quantilesArray.add((i * 10) + "%: " + histogram.quantile(i * 0.1)); } histogramMap.put("quantiles", quantilesArray); retVal.put("histogramValues", histogramMap); } else { retVal.put("histogram", "empty"); } return retVal; } }