This is an automated email from the ASF dual-hosted git repository.
qiaojialin pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/tsfile.git
The following commit(s) were added to refs/heads/develop by this push:
new 74c188c8 update readme example (#99)
74c188c8 is described below
commit 74c188c8b3cebb75d6790862d180351a539a0688
Author: Jialin Qiao <[email protected]>
AuthorDate: Sun Jun 9 20:30:43 2024 +0800
update readme example (#99)
---
java/tsfile/README-zh.md | 152 ++++++++++++++++++++---------------------------
java/tsfile/README.md | 147 ++++++++++++++++++++-------------------------
2 files changed, 129 insertions(+), 170 deletions(-)
diff --git a/java/tsfile/README-zh.md b/java/tsfile/README-zh.md
index 361578c5..6934a045 100644
--- a/java/tsfile/README-zh.md
+++ b/java/tsfile/README-zh.md
@@ -71,67 +71,45 @@ mvn install -P with-java -DskipTests
### TsFile Java API
-#### 写入 TsFile
-TsFile 可以通过以下三个步骤生成,完整的代码参见"写入 TsFile 示例"章节。
+#### 数据写入
-1. 注册元数据 (Schema)
+数据写入主要通过 TsFileWriter 完成。
- 创建一个`Schema`类的实例。
-
- `Schema`类保存的是一个映射关系,key 是一个 measurement 的名字,value 是 measurement schema.
-
- 下面是一系列接口:
-
- ```java
+1. 创建 TsFileWriter
- /**
- * measurementID: 物理量的名称,通常是传感器的名称
- * type: 数据类型,现在支持六种类型:`BOOLEAN`, `INT32`, `INT64`, `FLOAT`, `DOUBLE`,
`TEXT`
- * encoding: 编码类型
- */
- public MeasurementSchema(String measurementId, TSDataType type, TSEncoding
encoding) // 默认使用 LZ4 压缩算法
-
- // 使用预定义的 measurement 列表初始化 Schema
- public Schema(Map<String, MeasurementSchema> measurements)
-
- /**
- * 构造 TsFileWriter 进行数据写入
- * file : 写入 TsFile 数据的文件
- * schema : 文件的 schemas
- */
- public TsFileWriter(File file, Schema schema) throws IOException
+ ```java
+ File f = new File("test.tsfile");
+ TsFileWriter tsFileWriter = new TsFileWriter(f);
```
-2. 使用 `TsFileWriter` 写入数据。
+2. 注册时间序列
+
+ ```java
+ List<MeasurementSchema> schema1 = new ArrayList<>();
+ schemas.add(new MeasurementSchema("电压", TSDataType.FLOAT));
+ schemas.add(new MeasurementSchema("电流", TSDataType.FLOAT));
+ tsFileWriter.registerTimeseries(new Path("太阳能板1"), schema1);
+
+ List<MeasurementSchema> schema2 = new ArrayList<>();
+ schemas.add(new MeasurementSchema("电压", TSDataType.FLOAT));
+ schemas.add(new MeasurementSchema("电流", TSDataType.FLOAT));
+ schemas.add(new MeasurementSchema("风速", TSDataType.FLOAT));
+ tsFileWriter.registerTimeseries(new Path("风机1"), schema2);
+ ```
+
+3. 写入数据
```java
- /**
- * 使用接口创建一个新的`TSRecord`(时间戳和设备)
- */
- public TSRecord(long timestamp, String deviceId)
-
- /**
- * 创建一个`DataPoint`(度量 (measurement) 和值的对应),并使用 addTuple 方法将数据 DataPoint
添加正确的值到 TsRecord。
- */
- for (IMeasurementSchema schema : schemas) {
- tsRecord.addTuple(
- DataPoint.getDataPoint(
- schema.getType(),
- schema.getMeasurementId(),
-
Objects.requireNonNull(DataGenerator.generate(schema.getType(), (int)
startValue))
- .toString()));
- startValue++;
- }
- /**
- * 写入数据
- */
- public void write(TSRecord record) throws IOException,
WriteProcessException
- ```
+ TSRecord tsRecord = new TSRecord(1, "太阳能板1");
+ tsRecord.addTuple(DataPoint.getDataPoint(TSDataType.FLOAT, "电压", 1.1f));
+ tsRecord.addTuple(DataPoint.getDataPoint(TSDataType.FLOAT, "电流", 2.2f));
+ tsFileWriter.write(tsRecord);
+ ```
-3. 调用`close`方法来关闭文件,关闭后才能进行查询。
+4. 调用`close`方法来关闭文件,关闭后才能进行查询。
```java
- public void close() throws IOException
+ tsFileWriter.close();
```
写入 TsFile 完整示例
@@ -141,45 +119,45 @@ TsFile 可以通过以下三个步骤生成,完整的代码参见"写入 TsFil
[构造 Tablet
来写入数据](../examples/src/main/java/org/apache/tsfile/TsFileWriteAlignedWithTablet.java)。
-#### 读取 TsFile
-
-* 构造查询条件
-```java
-/**
- * 构造待读取的时间序列
- * 时间序列由 deviceId.measurementId 的格式组成(deviceId内可以有.)
- */
-List<Path> paths = new ArrayList<Path>();
-paths.add(new Path("device_1.sensor_1"));
-paths.add(new Path("device_1.sensor_3"));
-
-/**
- * 构造一个时间范围过滤条件
- */
-IExpression timeFilterExpr = BinaryExpression.and(
- new GlobalTimeExpression(TimeFilter.gtEq(15L)),
- new GlobalTimeExpression(TimeFilter.lt(25L))); // 15 <= time < 25
-
-/**
- * 构造完整的查询表达式
- */
-QueryExpression queryExpression = QueryExpression.create(paths,
timeFilterExpr);
-```
+#### 数据查询
-* 读取数据
+数据查询主要通过 TsFileReader 完成。
-```java
-/**
- * 根据文件路径`filePath`构造一个`ReadOnlyTsFile`实例。
- */
-TsFileSequenceReader reader = new TsFileSequenceReader(filePath);
-ReadOnlyTsFile readTsFile = new ReadOnlyTsFile(reader);
+1. 创建 TsFileReader
-/**
- * 查询数据
- */
-public QueryDataSet query(QueryExpression queryExpression) throws IOException
-```
+ ```java
+ TsFileSequenceReader reader = new TsFileSequenceReader(path);
+ TsFileReader tsFileReader = new TsFileReader(reader);
+ ```
+
+2. 构造查询条件
+
+ ```java
+ ArrayList<Path> paths = new ArrayList<>();
+ paths.add(new Path("太阳能板1", "电压"));
+ paths.add(new Path("太阳能板1", "电流"));
+
+ IExpression timeFilter = BinaryExpression.and(
+ new GlobalTimeExpression(TimeFilterApi.gtEq(1L)),
+ new GlobalTimeExpression(TimeFilterApi.ltEq(10L)));
+
+ QueryExpression queryExpression = QueryExpression.create(paths,
timeFilter);
+ ```
+
+3. 查询数据
+
+ ```java
+ QueryDataSet queryDataSet = readTsFile.query(queryExpression);
+ while (queryDataSet.hasNext()) {
+ queryDataSet.next();
+ }
+ ```
+
+4. 关闭文件
+
+ ```java
+ tsFileReader.close();
+ ```
读取 TsFile 完整示例
diff --git a/java/tsfile/README.md b/java/tsfile/README.md
index ad638120..a285d1a5 100644
--- a/java/tsfile/README.md
+++ b/java/tsfile/README.md
@@ -70,67 +70,46 @@ The current release version is `1.0.0`
### TsFile Java API
-#### Write TsFile
-TsFile can be generated through the following three steps, and the complete
code can be found in the "Write TsFile Example" section.
+#### Write Data
-1. Register Schema
+Data written is through TsFileWriter.
- you can make an instance of class `Schema` first and pass this to the
constructor of class `TsFileWriter`
-
- The class `Schema` contains a map whose key is the name of one measurement
schema, and the value is the schema itself.
+1. Construct TsFileWriter
- Here are the interfaces:
-
+
```java
-
- /**
- * measurementID: The name of this measurement, typically the name of the
sensor
- * type: The data type, now support six types: `BOOLEAN`, `INT32`,
`INT64`, `FLOAT`, `DOUBLE`, `TEXT`
- * encoding: The data encoding
- */
- public MeasurementSchema(String measurementId, TSDataType type, TSEncoding
encoding) // default use LZ4 Compression
-
- // Initialize the schema using a predefined measurement list
- public Schema(Map<String, MeasurementSchema> measurements)
-
- /**
- * construct TsFileWriter for write
- * file : The TsFile to write
- * schema : The file schemas
- */
- public TsFileWriter(File file, Schema schema) throws IOException
+ File f = new File("test.tsfile");
+ TsFileWriter tsFileWriter = new TsFileWriter(f);
```
-2. use `TsFileWriter` write data.
+2. Register timeseries
```java
- /**
- * Use this interface to create a new `TSRecord`(a timestamp and device
pair)
- */
- public TSRecord(long timestamp, String deviceId)
-
- /**
- * Then create a `DataPoint`(a measurement and value pair), and use the
addTuple method to add the DataPoint to the correct TsRecord.
- */
- for (IMeasurementSchema schema : schemas) {
- tsRecord.addTuple(
- DataPoint.getDataPoint(
- schema.getType(),
- schema.getMeasurementId(),
-
Objects.requireNonNull(DataGenerator.generate(schema.getType(), (int)
startValue))
- .toString()));
- startValue++;
- }
- /**
- * write data
- */
- public void write(TSRecord record) throws IOException,
WriteProcessException
+ List<MeasurementSchema> schema1 = new ArrayList<>();
+ schemas.add(new MeasurementSchema("voltage", TSDataType.FLOAT));
+ schemas.add(new MeasurementSchema("electricity", TSDataType.FLOAT));
+ tsFileWriter.registerTimeseries(new Path("solarpanel1"), schema1);
+
+ List<MeasurementSchema> schema2 = new ArrayList<>();
+ schemas.add(new MeasurementSchema("voltage", TSDataType.FLOAT));
+ schemas.add(new MeasurementSchema("electricity", TSDataType.FLOAT));
+ schemas.add(new MeasurementSchema("windspeed", TSDataType.FLOAT));
+ tsFileWriter.registerTimeseries(new Path("turbine1"), schema2);
```
-3. call `close` to finish this writing process,Query can only be performed
after close.
+3. Write data
```java
- public void close() throws IOException
+ TSRecord tsRecord = new TSRecord(1, "solarpanel1");
+ tsRecord.addTuple(DataPoint.getDataPoint(TSDataType.FLOAT, "voltage",
1.1f));
+ tsRecord.addTuple(DataPoint.getDataPoint(TSDataType.FLOAT, "electricity",
2.2f));
+ tsFileWriter.write(tsRecord);
+ ```
+
+4. Close TsFileWriter, only closed TsFile could be queried.
+
+ ```java
+ tsFileWriter.close();
```
Write TsFile Example
@@ -142,43 +121,45 @@ Write TsFile Example
#### Read TsFile
-* Construct Query Expression
-```java
-/**
- * Construct a time series to be read
- * The time series is composed of the format deviceId.measurementId (there can
be.)
- */
-List<Path> paths = new ArrayList<Path>();
-paths.add(new Path("device_1.sensor_1"));
-paths.add(new Path("device_1.sensor_3"));
-
-/**
- * Construct Time Filter
- */
-IExpression timeFilterExpr = BinaryExpression.and(
- new GlobalTimeExpression(TimeFilter.gtEq(15L)),
- new GlobalTimeExpression(TimeFilter.lt(25L))); // 15 <= time < 25
-
-/**
- * Construct Full Query Expression
- */
-QueryExpression queryExpression = QueryExpression.create(paths,
timeFilterExpr);
-```
+Data query is through TsFileReader.
-* Read Data
+1. Construct TsFileReader
+
+ ```java
+ TsFileSequenceReader reader = new TsFileSequenceReader(path);
+ TsFileReader tsFileReader = new TsFileReader(reader);
+ ```
+
+2. Construct query expression, including predicate and filter
+
+ ```java
+ ArrayList<Path> paths = new ArrayList<>();
+ paths.add(new Path("solarpanel1", "voltage"));
+ paths.add(new Path("solarpanel1", "electricity"));
+
+ IExpression timeFilter = BinaryExpression.and(
+ new GlobalTimeExpression(TimeFilterApi.gtEq(1L)),
+ new GlobalTimeExpression(TimeFilterApi.ltEq(10L)));
+
+ QueryExpression queryExpression = QueryExpression.create(paths,
timeFilter);
+ ```
+
+3. Query data
+
+ ```java
+ QueryDataSet queryDataSet = readTsFile.query(queryExpression);
+ while (queryDataSet.hasNext()) {
+ queryDataSet.next();
+ }
+ ```
+
+4. Close TsFileReader
+
+ ```java
+ tsFileReader.close();
+ ```
-```java
-/**
- * Construct an instance of 'ReadOnlyTsFile' based on the file path 'filePath'.
- */
-TsFileSequenceReader reader = new TsFileSequenceReader(filePath);
-ReadOnlyTsFile readTsFile = new ReadOnlyTsFile(reader);
-/**
- * Query Data
- */
-public QueryDataSet query(QueryExpression queryExpression) throws IOException
-```
Read TsFile Example