package org.yamcs.yarch; public class PartitioningSpec { public enum _type{ NONE, //no partition at all TIME, //partition by time VALUE, //partition by value TIME_AND_VALUE //partition by time and value (in this order) } final public _type type; final public String timeColumn; final public String valueColumn; //this thing is not final because it is determined the TableDefinition when attaching the pspec. Could be changed into a builder pattern. private DataType valueColumnType; //by default partition by year only (best for RocksDB to avoid having too many SST files) private TimePartitionSchema timePartitioningSchema = TimePartitionSchema.getInstance("YYYY"); PartitioningSpec (_type type, String timeColumn, String valueColumn) { this.type=type; this.timeColumn = timeColumn; this.valueColumn = valueColumn; } public static PartitioningSpec noneSpec() { PartitioningSpec pspec = new PartitioningSpec(_type.NONE, null, null); return pspec; } public static PartitioningSpec valueSpec(String valueColumn) { PartitioningSpec pspec = new PartitioningSpec(_type.VALUE, null, valueColumn); return pspec; } public static PartitioningSpec timeSpec(String timeColumn) { PartitioningSpec pspec = new PartitioningSpec(_type.TIME, timeColumn, null); return pspec; } public static PartitioningSpec timeAndValueSpec(String timeColumn, String valueColumn) { PartitioningSpec pspec = new PartitioningSpec(_type.TIME_AND_VALUE, timeColumn, valueColumn); return pspec; } public void setTimePartitioningSchema(TimePartitionSchema sch) { this.timePartitioningSchema = sch; } public void setTimePartitioningSchema(String schema) { this.timePartitioningSchema = TimePartitionSchema.getInstance(schema); } public DataType getValueColumnType() { return valueColumnType; } public void setValueColumnType(DataType valueColumnType) { if(type!=_type.VALUE && type != _type.TIME_AND_VALUE ) { throw new IllegalArgumentException("value column type not allowed for type "+type); } this.valueColumnType = valueColumnType; } public TimePartitionSchema getTimePartitioningSchema() { return timePartitioningSchema; } @Override public String toString() { return "timeColumn: "+timeColumn+" valueColumn:"+valueColumn; } }