Ejemplo n.º 1
0
  private void validateFilterPushDown(GTInfo info) {
    if (!hasFilterPushDown()) return;

    Set<TblColRef> filterColumns = Sets.newHashSet();
    TupleFilter.collectColumns(filterPushDown, filterColumns);

    for (TblColRef col : filterColumns) {
      // filter columns must belong to the table
      info.validateColRef(col);
      // filter columns must be returned to satisfy upper layer evaluation (calcite)
      columns = columns.set(col.getColumnDesc().getZeroBasedIndex());
    }

    // un-evaluatable filter must be removed
    if (!TupleFilter.isEvaluableRecursively(filterPushDown)) {
      Set<TblColRef> unevaluableColumns = Sets.newHashSet();
      filterPushDown = GTUtil.convertFilterUnevaluatable(filterPushDown, info, unevaluableColumns);

      // columns in un-evaluatable filter must be returned without loss so upper layer can do final
      // evaluation
      if (hasAggregation()) {
        for (TblColRef col : unevaluableColumns) {
          aggrGroupBy = aggrGroupBy.set(col.getColumnDesc().getZeroBasedIndex());
        }
      }
    }
  }
Ejemplo n.º 2
0
        @Override
        public void serialize(GTScanRequest value, ByteBuffer out) {
          GTInfo.serializer.serialize(value.info, out);

          BytesUtil.writeVInt(value.ranges.size(), out);
          for (GTScanRange range : value.ranges) {
            serializeGTRecord(range.pkStart, out);
            serializeGTRecord(range.pkEnd, out);
            BytesUtil.writeVInt(range.fuzzyKeys.size(), out);
            for (GTRecord f : range.fuzzyKeys) {
              serializeGTRecord(f, out);
            }
          }

          ImmutableBitSet.serializer.serialize(value.columns, out);
          BytesUtil.writeByteArray(GTUtil.serializeGTFilter(value.filterPushDown, value.info), out);

          ImmutableBitSet.serializer.serialize(value.aggrGroupBy, out);
          ImmutableBitSet.serializer.serialize(value.aggrMetrics, out);
          BytesUtil.writeAsciiStringArray(value.aggrMetricsFuncs, out);
          BytesUtil.writeVInt(value.allowStorageAggregation ? 1 : 0, out);
          out.putDouble(value.aggCacheMemThreshold);
          BytesUtil.writeVInt(value.storageScanRowNumThreshold, out);
          BytesUtil.writeVInt(value.storagePushDownLimit, out);
          BytesUtil.writeVLong(value.startTime, out);
          BytesUtil.writeVLong(value.timeout, out);
          BytesUtil.writeUTFString(value.storageBehavior, out);
        }
Ejemplo n.º 3
0
        @Override
        public GTScanRequest deserialize(ByteBuffer in) {
          GTInfo sInfo = GTInfo.serializer.deserialize(in);

          List<GTScanRange> sRanges = Lists.newArrayList();
          int sRangesCount = BytesUtil.readVInt(in);
          for (int rangeIdx = 0; rangeIdx < sRangesCount; rangeIdx++) {
            GTRecord sPkStart = deserializeGTRecord(in, sInfo);
            GTRecord sPkEnd = deserializeGTRecord(in, sInfo);
            List<GTRecord> sFuzzyKeys = Lists.newArrayList();
            int sFuzzyKeySize = BytesUtil.readVInt(in);
            for (int i = 0; i < sFuzzyKeySize; i++) {
              sFuzzyKeys.add(deserializeGTRecord(in, sInfo));
            }
            GTScanRange sRange = new GTScanRange(sPkStart, sPkEnd, sFuzzyKeys);
            sRanges.add(sRange);
          }

          ImmutableBitSet sColumns = ImmutableBitSet.serializer.deserialize(in);
          TupleFilter sGTFilter = GTUtil.deserializeGTFilter(BytesUtil.readByteArray(in), sInfo);

          ImmutableBitSet sAggGroupBy = ImmutableBitSet.serializer.deserialize(in);
          ImmutableBitSet sAggrMetrics = ImmutableBitSet.serializer.deserialize(in);
          String[] sAggrMetricFuncs = BytesUtil.readAsciiStringArray(in);
          boolean sAllowPreAggr = (BytesUtil.readVInt(in) == 1);
          double sAggrCacheGB = in.getDouble();
          int storageScanRowNumThreshold = BytesUtil.readVInt(in);
          int storagePushDownLimit = BytesUtil.readVInt(in);
          long startTime = BytesUtil.readVLong(in);
          long timeout = BytesUtil.readVLong(in);
          String storageBehavior = BytesUtil.readUTFString(in);

          return new GTScanRequestBuilder()
              .setInfo(sInfo)
              .setRanges(sRanges)
              .setDimensions(sColumns)
              . //
              setAggrGroupBy(sAggGroupBy)
              .setAggrMetrics(sAggrMetrics)
              .setAggrMetricsFuncs(sAggrMetricFuncs)
              . //
              setFilterPushDown(sGTFilter)
              .setAllowStorageAggregation(sAllowPreAggr)
              .setAggCacheMemThreshold(sAggrCacheGB)
              . //
              setStorageScanRowNumThreshold(storageScanRowNumThreshold)
              .setStoragePushDownLimit(storagePushDownLimit)
              . //
              setStartTime(startTime)
              .setTimeout(timeout)
              .setStorageBehavior(storageBehavior)
              .createGTScanRequest();
        }
Ejemplo n.º 4
0
        @Override
        public GTScanRequest deserialize(ByteBuffer in) {
          GTInfo sInfo = GTInfo.serializer.deserialize(in);

          List<GTScanRange> sRanges = Lists.newArrayList();
          int sRangesCount = BytesUtil.readVInt(in);
          for (int rangeIdx = 0; rangeIdx < sRangesCount; rangeIdx++) {
            GTRecord sPkStart = deserializeGTRecord(in, sInfo);
            GTRecord sPkEnd = deserializeGTRecord(in, sInfo);
            List<GTRecord> sFuzzyKeys = Lists.newArrayList();
            int sFuzzyKeySize = BytesUtil.readVInt(in);
            for (int i = 0; i < sFuzzyKeySize; i++) {
              sFuzzyKeys.add(deserializeGTRecord(in, sInfo));
            }
            GTScanRange sRange = new GTScanRange(sPkStart, sPkEnd, sFuzzyKeys);
            sRanges.add(sRange);
          }

          ImmutableBitSet sColumns = ImmutableBitSet.serializer.deserialize(in);
          TupleFilter sGTFilter = GTUtil.deserializeGTFilter(BytesUtil.readByteArray(in), sInfo);

          ImmutableBitSet sAggGroupBy = ImmutableBitSet.serializer.deserialize(in);
          ImmutableBitSet sAggrMetrics = ImmutableBitSet.serializer.deserialize(in);
          String[] sAggrMetricFuncs = BytesUtil.readAsciiStringArray(in);
          boolean sAllowPreAggr = (BytesUtil.readVInt(in) == 1);
          double sAggrCacheGB = in.getDouble();

          return new GTScanRequest(
              sInfo,
              sRanges,
              sColumns,
              sAggGroupBy,
              sAggrMetrics,
              sAggrMetricFuncs,
              sGTFilter,
              sAllowPreAggr,
              sAggrCacheGB);
        }
Ejemplo n.º 5
0
        @Override
        public void serialize(GTScanRequest value, ByteBuffer out) {
          GTInfo.serializer.serialize(value.info, out);

          BytesUtil.writeVInt(value.ranges.size(), out);
          for (GTScanRange range : value.ranges) {
            serializeGTRecord(range.pkStart, out);
            serializeGTRecord(range.pkEnd, out);
            BytesUtil.writeVInt(range.fuzzyKeys.size(), out);
            for (GTRecord f : range.fuzzyKeys) {
              serializeGTRecord(f, out);
            }
          }

          ImmutableBitSet.serializer.serialize(value.columns, out);
          BytesUtil.writeByteArray(GTUtil.serializeGTFilter(value.filterPushDown, value.info), out);

          ImmutableBitSet.serializer.serialize(value.aggrGroupBy, out);
          ImmutableBitSet.serializer.serialize(value.aggrMetrics, out);
          BytesUtil.writeAsciiStringArray(value.aggrMetricsFuncs, out);
          BytesUtil.writeVInt(value.allowPreAggregation ? 1 : 0, out);
          out.putDouble(value.aggrCacheGB);
        }