diff --git a/java/tsfile/src/main/java/org/apache/tsfile/common/conf/TSFileConfig.java b/java/tsfile/src/main/java/org/apache/tsfile/common/conf/TSFileConfig.java index a368a042b..eeef8345d 100644 --- a/java/tsfile/src/main/java/org/apache/tsfile/common/conf/TSFileConfig.java +++ b/java/tsfile/src/main/java/org/apache/tsfile/common/conf/TSFileConfig.java @@ -108,6 +108,24 @@ public class TSFileConfig implements Serializable { */ private String timeEncoding = "TS_2DIFF"; + /** Encoder of boolean column. Default value is RLE. */ + private String booleanEncoding = "RLE"; + + /** Encoder of int32 and date column. Default value is TS_2DIFF. */ + private String int32Encoding = "TS_2DIFF"; + + /** Encoder of int64 and timestamp column. Default value is TS_2DIFF. */ + private String int64Encoding = "TS_2DIFF"; + + /** Encoder of float column. Default value is GORILLA. */ + private String floatEncoding = "GORILLA"; + + /** Encoder of double column. Default value is GORILLA. */ + private String doubleEncoding = "GORILLA"; + + /** Encoder of string, blob and text column. Default value is PLAIN. */ + private String textEncoding = "PLAIN"; + /** * Encoder of value series. default value is PLAIN. For int, long data type, TsFile also supports * TS_2DIFF, REGULAR, GORILLA and RLE(run-length encoding). For float, double data type, TsFile @@ -331,14 +349,85 @@ public void setTimeEncoder(String timeEncoder) { // Don't change the following configuration + @Deprecated public String getValueEncoder() { return valueEncoder; } + public String getValueEncoder(TSDataType dataType) { + switch (dataType) { + case BOOLEAN: + return booleanEncoding; + case INT32: + case DATE: + return int32Encoding; + case INT64: + case TIMESTAMP: + return int64Encoding; + case FLOAT: + return floatEncoding; + case DOUBLE: + return doubleEncoding; + case STRING: + case BLOB: + case TEXT: + default: + return textEncoding; + } + } + public void setValueEncoder(String valueEncoder) { this.valueEncoder = valueEncoder; } + public String getBooleanEncoding() { + return booleanEncoding; + } + + public void setBooleanEncoding(String booleanEncoding) { + this.booleanEncoding = booleanEncoding; + } + + public String getInt32Encoding() { + return int32Encoding; + } + + public void setInt32Encoding(String int32Encoding) { + this.int32Encoding = int32Encoding; + } + + public String getInt64Encoding() { + return int64Encoding; + } + + public void setInt64Encoding(String int64Encoding) { + this.int64Encoding = int64Encoding; + } + + public String getFloatEncoding() { + return floatEncoding; + } + + public void setFloatEncoding(String floatEncoding) { + this.floatEncoding = floatEncoding; + } + + public String getDoubleEncoding() { + return doubleEncoding; + } + + public void setDoubleEncoding(String doubleEncoding) { + this.doubleEncoding = doubleEncoding; + } + + public String getTextEncoding() { + return textEncoding; + } + + public void setTextEncoding(String textEncoding) { + this.textEncoding = textEncoding; + } + public int getRleBitWidth() { return rleBitWidth; } diff --git a/java/tsfile/src/main/java/org/apache/tsfile/write/schema/MeasurementSchema.java b/java/tsfile/src/main/java/org/apache/tsfile/write/schema/MeasurementSchema.java index 33b76d983..7d078477d 100644 --- a/java/tsfile/src/main/java/org/apache/tsfile/write/schema/MeasurementSchema.java +++ b/java/tsfile/src/main/java/org/apache/tsfile/write/schema/MeasurementSchema.java @@ -61,7 +61,7 @@ public MeasurementSchema(String measurementName, TSDataType dataType) { this( measurementName, dataType, - TSEncoding.valueOf(TSFileDescriptor.getInstance().getConfig().getValueEncoder()), + TSEncoding.valueOf(TSFileDescriptor.getInstance().getConfig().getValueEncoder(dataType)), TSFileDescriptor.getInstance().getConfig().getCompressor(), null); } diff --git a/java/tsfile/src/main/java/org/apache/tsfile/write/schema/TimeseriesSchema.java b/java/tsfile/src/main/java/org/apache/tsfile/write/schema/TimeseriesSchema.java index 0c287e85f..e05912d0b 100644 --- a/java/tsfile/src/main/java/org/apache/tsfile/write/schema/TimeseriesSchema.java +++ b/java/tsfile/src/main/java/org/apache/tsfile/write/schema/TimeseriesSchema.java @@ -55,7 +55,7 @@ public TimeseriesSchema(String fullPath, TSDataType tsDataType) { this( fullPath, tsDataType, - TSEncoding.valueOf(TSFileDescriptor.getInstance().getConfig().getValueEncoder()), + TSEncoding.valueOf(TSFileDescriptor.getInstance().getConfig().getValueEncoder(tsDataType)), TSFileDescriptor.getInstance().getConfig().getCompressor(), Collections.emptyMap()); } diff --git a/java/tsfile/src/main/java/org/apache/tsfile/write/schema/VectorMeasurementSchema.java b/java/tsfile/src/main/java/org/apache/tsfile/write/schema/VectorMeasurementSchema.java index 36ccf03c2..ab63a752b 100644 --- a/java/tsfile/src/main/java/org/apache/tsfile/write/schema/VectorMeasurementSchema.java +++ b/java/tsfile/src/main/java/org/apache/tsfile/write/schema/VectorMeasurementSchema.java @@ -92,7 +92,7 @@ public VectorMeasurementSchema(String deviceId, String[] subMeasurements, TSData this.encodings = new byte[types.length]; for (int i = 0; i < types.length; i++) { this.encodings[i] = - TSEncoding.valueOf(TSFileDescriptor.getInstance().getConfig().getValueEncoder()) + TSEncoding.valueOf(TSFileDescriptor.getInstance().getConfig().getValueEncoder(types[i])) .serialize(); } this.encodingConverters = new TSEncodingBuilder[subMeasurements.length];