@Before public void setup() { enc = new DateDimEnc(null); buf = new byte[enc.getLengthOfEncoding()]; }
@Override final protected String getValueFromIdImpl(int id) { if (id < baseId || id > maxId) throw new IllegalArgumentException("ID '" + id + "' is out of range [" + baseId + "," + maxId + "]"); long millis = DateDimEnc.getMillisFromNumOfDaysSince0000(calcSeqNoFromId(id)); return dateToString(new Date(millis), pattern); }
@Override public long valueToCode(String value) { //if data type is integer, DateFormat.stringToMillis recognizes format like "20001010" long millis = DateFormat.stringToMillis(value); return getNumOfDaysSince0000FromMillis(millis); }
@Override public DimensionEncoding createDimensionEncoding(String encodingName, String[] args) { return new DateDimEnc(args); } };
private static DimensionEncoding[] getDimensionEncodings(FunctionDesc function, List<TblColRef> literalCols, Map<TblColRef, Dictionary<String>> dictionaryMap) { final DimensionEncoding[] dimensionEncodings = new DimensionEncoding[literalCols.size()]; for (int i = 0; i < literalCols.size(); i++) { TblColRef colRef = literalCols.get(i); Pair<String, String> topNEncoding = TopNMeasureType.getEncoding(function, colRef); String encoding = topNEncoding.getFirst(); String encodingVersionStr = topNEncoding.getSecond(); if (StringUtils.isEmpty(encoding) || DictionaryDimEnc.ENCODING_NAME.equals(encoding)) { dimensionEncodings[i] = new DictionaryDimEnc(dictionaryMap.get(colRef)); } else { int encodingVersion = 1; if (!StringUtils.isEmpty(encodingVersionStr)) { try { encodingVersion = Integer.parseInt(encodingVersionStr); } catch (NumberFormatException e) { throw new RuntimeException(TopNMeasureType.CONFIG_ENCODING_VERSION_PREFIX + colRef.getName() + " has to be an integer"); } } Object[] encodingConf = DimensionEncoding.parseEncodingConf(encoding); String encodingName = (String) encodingConf[0]; String[] encodingArgs = (String[]) encodingConf[1]; encodingArgs = DateDimEnc.replaceEncodingArgs(encoding, encodingArgs, encodingName, literalCols.get(i).getType()); dimensionEncodings[i] = DimensionEncodingFactory.create(encodingName, encodingArgs, encodingVersion); } } return dimensionEncodings; }
private long encode(String value) { enc.encode(value, buf, 0); return BytesUtil.readLong(buf, 0, buf.length); }
private String decode(long code) { BytesUtil.writeLong(code, buf, 0, buf.length); return enc.decode(buf, 0, buf.length); }
private static GTInfo newInfo(GTInfo.Builder builder) { //Dimension ImmutableBitSet dimensionColumns = setOf(0, 1); DimensionEncoding[] dimEncs = new DimensionEncoding[2]; dimEncs[0] = new DateDimEnc(); dimEncs[1] = new DictionaryDimEnc(strsToDict(userList)); builder.setCodeSystem(new CubeCodeSystem(dimEncs)); builder.setPrimaryKey(dimensionColumns); //Measure ImmutableBitSet measureColumns = setOf(2, 3); builder.enableColumnBlock(new ImmutableBitSet[] { dimensionColumns, measureColumns }); GTInfo info = builder.build(); return info; }
public void init(int index, CubeDesc cubeDesc) { bitIndex = index; colRef = cubeDesc.getModel().findColumn(column); column = colRef.getIdentity(); Preconditions.checkArgument(colRef != null, "Cannot find rowkey column %s in cube %s", column, cubeDesc); Preconditions.checkState(StringUtils.isNotEmpty(this.encoding)); Object[] encodingConf = DimensionEncoding.parseEncodingConf(this.encoding); encodingName = (String) encodingConf[0]; encodingArgs = (String[]) encodingConf[1]; if (!DimensionEncodingFactory.isValidEncoding(this.encodingName)) throw new IllegalArgumentException("Not supported row key col encoding: '" + this.encoding + "'"); // convert date/time dictionary on date/time column to DimensionEncoding implicitly // however date/time dictionary on varchar column is still required DataType type = colRef.getType(); if (DictionaryDimEnc.ENCODING_NAME.equals(encodingName)) { if (type.isDate()) { encoding = encodingName = DateDimEnc.ENCODING_NAME; } if (type.isTimeFamily()) { encoding = encodingName = TimeDimEnc.ENCODING_NAME; } } encodingArgs = DateDimEnc.replaceEncodingArgs(encoding, encodingArgs, encodingName, type); if (encodingName.startsWith(FixedLenDimEnc.ENCODING_NAME) && (type.isIntegerFamily() || type.isNumberFamily())) { logger.warn(colRef + " type is " + type + " and cannot apply fixed_length encoding"); } }
@Override public DimensionEncoding createDimensionEncoding(String encodingName, String[] args) { return new DateDimEnc(args); } };
@Override final protected int getIdFromValueImpl(String value, int roundFlag) { Date date = stringToDate(value, pattern); int id = calcIdFromSeqNo((int) DateDimEnc.getNumOfDaysSince0000FromMillis(date.getTime())); if (id < baseId || id > maxId) throw new IllegalArgumentException("'" + value + "' encodes to '" + id + "' which is out of range [" + baseId + "," + maxId + "]"); return id; }
@Override public String codeToValue(long code) { long millisFromNumOfDaysSince0000 = getMillisFromNumOfDaysSince0000(code); if (datatype != null && datatype.isIntegerFamily()) { return DateFormat.formatToCompactDateStr(millisFromNumOfDaysSince0000); } else { return String.valueOf(millisFromNumOfDaysSince0000); } } }
private static DimensionEncoding[] getDimensionEncodings(FunctionDesc function, List<TblColRef> literalCols, Map<TblColRef, Dictionary<String>> dictionaryMap) { final DimensionEncoding[] dimensionEncodings = new DimensionEncoding[literalCols.size()]; for (int i = 0; i < literalCols.size(); i++) { TblColRef colRef = literalCols.get(i); Pair<String, String> topNEncoding = TopNMeasureType.getEncoding(function, colRef); String encoding = topNEncoding.getFirst(); String encodingVersionStr = topNEncoding.getSecond(); if (StringUtils.isEmpty(encoding) || DictionaryDimEnc.ENCODING_NAME.equals(encoding)) { dimensionEncodings[i] = new DictionaryDimEnc(dictionaryMap.get(colRef)); } else { int encodingVersion = 1; if (!StringUtils.isEmpty(encodingVersionStr)) { try { encodingVersion = Integer.parseInt(encodingVersionStr); } catch (NumberFormatException e) { throw new RuntimeException(TopNMeasureType.CONFIG_ENCODING_VERSION_PREFIX + colRef.getName() + " has to be an integer"); } } Object[] encodingConf = DimensionEncoding.parseEncodingConf(encoding); String encodingName = (String) encodingConf[0]; String[] encodingArgs = (String[]) encodingConf[1]; encodingArgs = DateDimEnc.replaceEncodingArgs(encoding, encodingArgs, encodingName, literalCols.get(i).getType()); dimensionEncodings[i] = DimensionEncodingFactory.create(encodingName, encodingArgs, encodingVersion); } } return dimensionEncodings; }
@Override public long valueToCode(String value) { //if data type is integer, DateFormat.stringToMillis recognizes format like "20001010" long millis = DateFormat.stringToMillis(value); return getNumOfDaysSince0000FromMillis(millis); }
@Override final protected String getValueFromIdImpl(int id) { if (id < baseId || id > maxId) throw new IllegalArgumentException("ID '" + id + "' is out of range [" + baseId + "," + maxId + "]"); long millis = DateDimEnc.getMillisFromNumOfDaysSince0000(calcSeqNoFromId(id)); return dateToString(new Date(millis), pattern); }
public void init(int index, CubeDesc cubeDesc) { bitIndex = index; colRef = cubeDesc.getModel().findColumn(column); column = colRef.getIdentity(); Preconditions.checkArgument(colRef != null, "Cannot find rowkey column %s in cube %s", column, cubeDesc); Preconditions.checkState(StringUtils.isNotEmpty(this.encoding)); Object[] encodingConf = DimensionEncoding.parseEncodingConf(this.encoding); encodingName = (String) encodingConf[0]; encodingArgs = (String[]) encodingConf[1]; if (!DimensionEncodingFactory.isValidEncoding(this.encodingName)) throw new IllegalArgumentException("Not supported row key col encoding: '" + this.encoding + "'"); // convert date/time dictionary on date/time column to DimensionEncoding implicitly // however date/time dictionary on varchar column is still required DataType type = colRef.getType(); if (DictionaryDimEnc.ENCODING_NAME.equals(encodingName)) { if (type.isDate()) { encoding = encodingName = DateDimEnc.ENCODING_NAME; } if (type.isTimeFamily()) { encoding = encodingName = TimeDimEnc.ENCODING_NAME; } } encodingArgs = DateDimEnc.replaceEncodingArgs(encoding, encodingArgs, encodingName, type); if (encodingName.startsWith(FixedLenDimEnc.ENCODING_NAME) && (type.isIntegerFamily() || type.isNumberFamily())) { logger.warn(colRef + " type is " + type + " and cannot apply fixed_length encoding"); } }
@Override final protected int getIdFromValueImpl(String value, int roundFlag) { Date date = stringToDate(value, pattern); int id = calcIdFromSeqNo((int) DateDimEnc.getNumOfDaysSince0000FromMillis(date.getTime())); if (id < baseId || id > maxId) throw new IllegalArgumentException("'" + value + "' encodes to '" + id + "' which is out of range [" + baseId + "," + maxId + "]"); return id; }
@Override public String codeToValue(long code) { long millisFromNumOfDaysSince0000 = getMillisFromNumOfDaysSince0000(code); if (datatype != null && datatype.isIntegerFamily()) { return DateFormat.formatToCompactDateStr(millisFromNumOfDaysSince0000); } else { return String.valueOf(millisFromNumOfDaysSince0000); } } }