Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Supplement 2.0.0 version UserGuide and modify Download #365

Merged
merged 10 commits into from
Feb 7, 2025
6 changes: 3 additions & 3 deletions docs/src/Download/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ Legacy version are available here: https://archive.apache.org/dist/tsfile/
# Download
Our GitHub page: https://github.com/apache/tsfile

The latest version of TsFile is 2.0.0.
The latest version of TsFile is 2.0.1.

Downloading it from the [Maven central repository](https://search.maven.org/search?q=g:org.apache.tsfile)

Expand All @@ -41,8 +41,8 @@ Add the following dependency section to your pom.xml:
<dependency>
<groupId>org.apache.tsfile</groupId>
<artifactId>tsfile</artifactId>
<version>2.0.0</version>
<version>2.0.1</version>
</dependency>
```

The release note of 2.0.0 can be found in the Archives of the Apache Software Foundation: https://github.com/apache/tsfile/releases/tag/v2.0.0
The release note of 2.0.1 can be found in the Archives of the Apache Software Foundation: https://github.com/apache/tsfile/releases/tag/v2.0.1
49 changes: 26 additions & 23 deletions docs/src/UserGuide/develop/QuickStart/Data-Model.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,44 +22,47 @@

## Basic Concepts

To manage industrial IoT timing data, the measurement point data model of TsFile includes the following information
To manage industrial IoT time series data, the data model of TsFile includes the following concepts

- DeviceId(String):Device Name
- MeasurementSchema:Measurement points
- measurementId(String):Measurement Point Name
- tsDataType(TSDataType):Data Type
- Tag: The description of an IoT device of one dimension in the form of a string key-value pair. For example, "category=XT451" describes the category of a wind turbine is "XT451" and "year=2021" says it is built in the year 2021.
- Field: A variable that is being measured by a device. Like fan speed, voltage, temperature, wind speed, and so on. Unlike a Tagthat is currently fixed to STRING data type, Fields are supported by various data types.
- Timestamp and Timeseries: Each value of a FIELD measured by a device is associated with a unique timestamp. The sequence of the timestamps and values of a FIELD is a Timeseries.
- Schema: A set of Tags that can uniquely identify a kind of device, and the set of Fields that are measured by these devices. E.g., a wind turbine can be uniquely located by "Province," "City," "WindField," and "SerialNumber," so the TAG set of SCHEMA "wind_turbine" can be "Province," "City," "WindField," and "SerialNumber." While its the FIELD set contains "FanSpeed," "Voltage," "Temperature," "WindSpeed," and so on.
- DeviceId: The unique identifier of an IoT device, which consists of the schema name and all tag values. For example, for the Schema "wind_turbine" above, a DeviceId can be ("wind_turbine", "Beijing", "Beijing", "Field_1135", "T1523678").

For the above detailed introduction, please refer to:[Entering Time Series Data](https://tsfile.apache.org/UserGuide/latest/QuickStart/Navigating_Time_Series_Data.html)

## Example

![](https://alioss.timecho.com/docs/img/20240502164237-dkcm.png)

In the above example, the metadata (Scheme) of TsFile contains 2 devices and 5 time series, and is established as a table structure as shown in the following figure:

<table>
<tr>
<th rowspan="1">Device ID</th>
<th rowspan="1">Measurement points</th>
<th rowspan="1">concept</th>
<th rowspan="1">definition</th>
</tr>
<tr>
<th rowspan="2">Solar panel 1</th>
<th>Voltage(FLOAT)</th>
<th rowspan="1">table</th>
<th>A collection of devices with the same pattern.The storage table defined during modeling consists of three parts: identification column, time column, and physical quantity column.</th>
</tr>
<tr>
<th>Current(FLOAT)</th>
<th rowspan="1">TAG</th>
<th>The unique identifier of a device, which can contain 0 to multiple tag columns in a table. The composite value formed by combining the values of the tag columns in the column order when the table was created is called the identifier, and tags with the same composite value are called the same identifier.The data type of the tag column can currently only be String, which can be left unspecified and defaults to StringThe values of the identification column can all be emptyWhen writing, all tag columns must be specified (unspecified identity columns are filled with null by default)</th>
</tr>
<tr>
<th rowspan="4">Fan1</th>
<th rowspan="1">Time</th>
<th>A table must have a time column, and data with the same identifier value is sorted by time by default.The values in the time column cannot be empty and must be in sequence.</th>
</tr>
<tr>
<th>Voltage(FLOAT)</th>
</tr>
<tr>
<th>Current(FLOAT)</th>
<th rowspan="1">FIELD</th>
<th>The field column defines the measurement point names and data types for time-series data.</th>
</tr>
<tr>
<th>Wind Speed(FLOAT)</th>
<th rowspan="1">row</th>
<th>A row of data in the table</th>
</tr>
</table>


## Example

A schema describes is a collection of devices with the same pattern. As shown in the figure below, it models the management of factory equipment, and the physical variable collection of each device has certain commonalities (such as collecting temperature and humidity physical quantities, collecting physical quantities of the same device on the same frequency, etc.), so it can be managed on a device-by-device basis.

At this point, a physical device can be uniquely identified through 3 Tags [Region] - [Factory] - [Equipment] (orange column in the figure below, also known as device identification information). The Fields collected by the device are [Temperature], [Humidity], [Status], and [Arrival Time] (blue column in the figure below).

![](https://alioss.timecho.com/docs/img/data_model_example_image.png)
240 changes: 240 additions & 0 deletions docs/src/UserGuide/develop/QuickStart/Interface-Definitions.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,240 @@
<!--

Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.

-->
# Interface Definitions

## Write Interface

### ITsFileWriter

Used to write data to tsfile

```Java
interface ITsFileWriter extends AutoCloseable {
// Write data
void write(Tablet tablet);

// Close Write
void close();
}
```

### TsFileWriterBuilder

Used to construct ITsFileWriter

```Java
class TsFileWriterBuilder {
// Build ITsFileWriter object
public ITsFileWriter build();

// target file
public TsFileWriterBuilder file(File file);

// Used to construct table structures
public TsFileWriterBuilder tableSchema(TableSchema schema);

// Used to limit the memory size of objects
public TsFileWriterBuilder memoryThreshold(long memoryThreshold);
}
```

### TableSchema

Describe the data structure of the table schema

```Java
class TableSchema {
// Constructor function
public TableSchema(String tableName, List<ColumnSchema> columnSchemaList);
}

class ColumnSchema {
// Constructor function
public ColumnSchema(String columnName, TSDataType dataType, ColumnCategory columnCategory);

// Get column names
public String getColumnName();

// Get the data type of the column
public TSDataType getDataType();

// Get column category
public Tablet.ColumnCategory getColumnCategory();
}

class ColumnSchemaBuilder {
// Build ColumnSchema object
public ColumnSchema build();

// Column Name
public ColumnSchemaBuilder name(String columnName);

// The data type of the column
public ColumnSchemaBuilder dataType(TSDataType columnType);

// Column category
public ColumnSchemaBuilder category(ColumnCategory columnCategory);

// Supported types
enum TSDataType {
BOOLEAN,
INT32,
INT64,
FLOAT,
DOUBLE,
TIMESTAMP,
TEXT,
DATE,
BLOB,
STRING;
}

// Supported column categories
enum ColumnCategory {
TAG,
FIELD
}
}
```

### Tablet

Write column memory structure

```Java
class Tablet {
// Constructor function
public Tablet(List<String> columnNameList, List<TSDataType> dataTypeList);
public Tablet(List<String> columnNameList, List<TSDataType> dataTypeList, int maxRowNum);

// Interface for adding timestamps
void addTimestamp(int rowIndex, long timestamp);

// Interface for adding values
// Add values based on column names
void addValue(int rowIndex, String columnName, int val);
void addValue(int rowIndex, String columnName, long val);
void addValue(int rowIndex, String columnName, float val);
void addValue(int rowIndex, String columnName, double val);
void addValue(int rowIndex, String columnName, boolean val);
void addValue(int rowIndex, String columnName, String val);
void addValue(int rowIndex, String columnName, byte[] val);
void addValue(int rowIndex, String columnName, LocalDate val);
// Add values based on index position
void addValue(int rowIndex, int columnIndex, int val);
void addValue(int rowIndex, int columnIndex, long val);
void addValue(int rowIndex, int columnIndex, float val);
void addValue(int rowIndex, int columnIndex, double val);
void addValue(int rowIndex, int columnIndex, boolean val);
void addValue(int rowIndex, int columnIndex, String val);
void addValue(int rowIndex, int columnIndex, byte[] val);
void addValue(int rowIndex, int columnIndex, LocalDate val);
}
```

## Read Interface

### ITsFileReader

Used to query data in tsfile

```Java
interface ITsFileReader extends AutoCloseable {
// Used to execute queries and return results
ResultSet query(String tableName, List<String> columnNames, long startTime, long endTime);

// Return the schema of the table named tableName in tsfile
Optional<TableSchema> getTableSchemas(String tableName);

// Retrieve schema information for all tables in the tsfile
List<TableSchema> getAllTableSchema();

// Close query
void close();
}
```

### TsFileReaderBuilder

Used to construct ITsFileWriter

```Java
class TsFileReaderBuilder {
// Build ITsFileReader object
public ITsFileReader build();

// target file
public TsFileReaderBuilder file(File file);
}
```

### ResultSet

The result set of the query

```Java
interface ResultSet extends AutoCloseable {
// Move the cursor to the next row and return whether there is still data
boolean next();

// Get the value of the current row and a certain column
int getInt(String columnName);
int getInt(int columnIndex);
long getLong(String columnName);
long getLong(int columnIndex);
float getFloat(String columnName);
float getFloat(int columnIndex);
double getDouble(String columnName);
double getDouble(int columnIndex);
boolean getBoolean(String columnName);
boolean getBoolean(int columnIndex);
String getString(String columnName);
String getString(int columnIndex);
LocalDate getDate(String columnName);
LocalDate getDate(int columnIndex);
byte[] getBinary(String columnName);
byte[] getBinary(int columnIndex);

// Determine whether a column is NULL in the current row
boolean isNull(String columnName);
boolean isNull(int columnIndex);

// Close the current structure set
void close();

// Obtain the header of the result set
ResultSetMetadata getMetadata();
}
```

### ResultSetMetadata

Used to obtain metadata for the result set

```Java
interface ResultSetMetadata {
// Obtain the column name of the Nth column in the result set
String getColumnName(int columnIndex);

// Obtain the data type of the Nth column in the result set
TSDataType getColumnType(int columnIndex);
}
```

This file was deleted.

Loading