public StringSerializer(DataType type) { this.type = type; // see serialize(): 2 byte length, rest is String.toBytes() this.maxLength = 2 + type.getPrecision(); }
public BigDecimalSerializer(DataType type) { this.type = type; // see serialize(): 1 byte scale, 1 byte length, assume every 2 digits takes 1 byte this.maxLength = 1 + 1 + (type.getPrecision() + 1) / 2; }
@Override public int getMemBytesEstimate() { return dataType.getPrecision() / 2; } };
public HLLCSerializer(DataType type) { this.precision = type.getPrecision(); }
public ExtendedColumnSerializer(DataType dataType) { this.extendedColumnSize = dataType.getPrecision(); this.maxLength = this.extendedColumnSize + 4;//4 bytes for the length preamble }
public PercentileSerializer(DataType type) { this.compression = type.getPrecision(); }
public int getTypePrecision() { return type.getPrecision(); }
private void validate(String funcName, DataType dataType, boolean checkDataType) { if (FUNC_TOP_N.equals(funcName) == false) throw new IllegalArgumentException(); if (DATATYPE_TOPN.equals(dataType.getName()) == false) throw new IllegalArgumentException(); if (dataType.getPrecision() < 1 || dataType.getPrecision() > 10000) throw new IllegalArgumentException(); }
private void validate(String funcName, DataType dataType, boolean checkDataType) { if (FUNC_COUNT_DISTINCT.equals(funcName) == false) throw new IllegalArgumentException(); if (DATATYPE_HLLC.equals(dataType.getName()) == false) throw new IllegalArgumentException(); if (dataType.getPrecision() < 1 || dataType.getPrecision() > 5000) throw new IllegalArgumentException(); }
public TopNCounterSerializer(DataType dataType) { this.precision = dataType.getPrecision(); this.scale = dataType.getScale(); if (scale < 0) { scale = DictionaryDimEnc.MAX_ENCODING_LENGTH; } }
@Override public void reset() { current = new HLLCounter(dataType.getPrecision()); } };
@Override public MeasureAggregator<HLLCounter> newAggregator() { return new HLLCAggregator(dataType.getPrecision()); }
@Override public void reset() { current = new PercentileCounter(dataType.getPrecision()); } };
@Override public MeasureAggregator<PercentileCounter> newAggregator() { return new PercentileAggregator(dataType.getPrecision()); }
@Override public MeasureIngester<PercentileCounter> newIngester() { return new MeasureIngester<PercentileCounter>() { PercentileCounter current = new PercentileCounter(dataType.getPrecision()); @Override public PercentileCounter valueOf(String[] values, MeasureDesc measureDesc, Map<TblColRef, Dictionary<String>> dictionaryMap) { PercentileCounter counter = current; counter.clear(); for (String v : values) { if (v != null) counter.add(Double.parseDouble(v)); } return counter; } @Override public void reset() { current = new PercentileCounter(dataType.getPrecision()); } }; }
private static final long serialVersionUID = 1L; HLLCounter current = new HLLCounter(dataType.getPrecision());
@Override public ByteArray valueOf(String[] values, MeasureDesc measureDesc, Map<TblColRef, Dictionary<String>> dictionaryMap) { if (values.length <= 1) throw new IllegalArgumentException(); String literal = values[values.length - 1]; if (literal == null) { return new ByteArray(); } byte[] bytes = Bytes.toBytes(literal); if (bytes.length <= dataType.getPrecision()) { return new ByteArray(bytes); } else { return new ByteArray( truncateWhenUTF8(literal, dataType.getPrecision()).getBytes(StandardCharsets.UTF_8)); } }
throw new IllegalArgumentException("Unrecognized data type " + dataType); int precision = dataType.getPrecision(); int scale = dataType.getScale();
@Override public TopNCounter<ByteArray> valueOf(String[] values, MeasureDesc measureDesc, Map<TblColRef, Dictionary<String>> dictionaryMap) { double counter = values[0] == null ? 0 : Double.parseDouble(values[0]); if (dimensionEncodings == null) { literalCols = getTopNLiteralColumn(measureDesc.getFunction()); dimensionEncodings = getDimensionEncodings(measureDesc.getFunction(), literalCols, dictionaryMap); for (DimensionEncoding encoding : dimensionEncodings) { keyLength += encoding.getLengthOfEncoding(); } if (values.length != (literalCols.size() + 1)) { throw new IllegalArgumentException(); } } final ByteArray key = new ByteArray(keyLength); int offset = 0; for (int i = 0; i < dimensionEncodings.length; i++) { if (values[i + 1] == null) { Arrays.fill(key.array(), offset, offset + dimensionEncodings[i].getLengthOfEncoding(), DimensionEncoding.NULL); } else { dimensionEncodings[i].encode(values[i + 1], key.array(), offset); } offset += dimensionEncodings[i].getLengthOfEncoding(); } TopNCounter<ByteArray> topNCounter = new TopNCounter<ByteArray>( dataType.getPrecision() * TopNCounter.EXTRA_SPACE_RATE); topNCounter.offer(key, counter); return topNCounter; }
DataType newReturnType = new DataType(returnType.getName(), returnType.getPrecision(), keyLength); measureDesc.getFunction().setReturnType(newReturnType.toString());