| <!-- | |
| 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. | |
| --> | |
| # Quick Start - Java | |
| ## Dependencies | |
| - JDK >=1.8 | |
| - Maven >=3.6 | |
| ## Installation Method | |
| Using TsFile API with Maven: | |
| ```shell | |
| <dependency> | |
| <groupId>org.apache.tsfile</groupId> | |
| <artifactId>tsfile</artifactId> | |
| <version>2.3.1</version> | |
| </dependency> | |
| ``` | |
| ## Writing Process | |
| ### Construct ITsFileWriter | |
| ```shell | |
| String path = "test.tsfile"; | |
| File f = FSFactoryProducer.getFSFactory().getFile(path); | |
| String tableName = "table1"; | |
| TableSchema tableSchema = | |
| new TableSchema( | |
| tableName, | |
| Arrays.asList( | |
| new ColumnSchemaBuilder() | |
| .name("id1") | |
| .dataType(TSDataType.STRING) | |
| .category(Tablet.ColumnCategory.TAG) | |
| .build(), | |
| new ColumnSchemaBuilder() | |
| .name("id2") | |
| .dataType(TSDataType.STRING) | |
| .category(Tablet.ColumnCategory.TAG) | |
| .build(), | |
| new ColumnSchemaBuilder() | |
| .name("s1") | |
| .dataType(TSDataType.INT32) | |
| .category(Tablet.ColumnCategory.FIELD) | |
| .build(), | |
| new ColumnSchemaBuilder() | |
| .name("s2"). | |
| dataType(TSDataType.BOOLEAN) | |
| .build())); | |
| long memoryThreshold = 10 * 1024 * 1024; | |
| ITsFileWriter writer = | |
| new TsFileWriterBuilder() | |
| .file(f) | |
| .tableSchema(tableSchema) | |
| .memoryThreshold(memoryThreshold) | |
| .build(); | |
| ``` | |
| ### Write Data | |
| ```shell | |
| Tablet tablet = | |
| new Tablet( | |
| Arrays.asList("id1", "id2", "s1", "s2"), | |
| Arrays.asList( | |
| TSDataType.STRING, TSDataType.STRING, TSDataType.INT32, TSDataType.BOOLEAN)); | |
| for (int row = 0; row < 5; row++) { | |
| long timestamp = row; | |
| tablet.addTimestamp(row, timestamp); | |
| tablet.addValue(row, "id1", "id1_filed_1"); | |
| tablet.addValue(row, "id2", "id2_filed_1"); | |
| tablet.addValue(row, "s1", row); | |
| tablet.addValue(row, "s2", true); | |
| } | |
| writer.write(tablet); | |
| ``` | |
| ### Close File | |
| ```shell | |
| writer.close(); | |
| ``` | |
| ### Sample Code | |
| The sample code of using these interfaces is in <https://github.com/apache/tsfile/blob/develop/java/examples/src/main/java/org/apache/tsfile/v4/WriteTabletWithITsFileWriter.java> | |
| ## Query Process | |
| ### Construct ITsFileReader | |
| ```shell | |
| String path = "test.tsfile"; | |
| File f = FSFactoryProducer.getFSFactory().getFile(path); | |
| ITsFileReader reader = | |
| new TsFileReaderBuilder() | |
| .file(f) | |
| .build(); | |
| ``` | |
| ### Construct Query Request | |
| ```shell | |
| TableSchema schema = reader.getTableSchemas(tableName); | |
| TagFilterBuilder filterBuilder = new TagFilterBuilder(schema); | |
| ResultSet resultSet = reader.query(tableName, Arrays.asList("id1", "id2", "s1", "s2"), | |
| 2, 8, filterBuilder.eq("id1", "id1_filed_1")); | |
| ``` | |
| ### Query Data | |
| ```shell | |
| ResultSetMetadata metadata = resultSet.getMetadata(); | |
| System.out.println(metadata); | |
| StringJoiner sj = new StringJoiner(" "); | |
| for (int column = 1; column <= 5; column++) { | |
| sj.add(metadata.getColumnName(column) + "(" + metadata.getColumnType(column) + ") "); | |
| } | |
| System.out.println(sj.toString()); | |
| while (resultSet.next()) { | |
| Long timeField = resultSet.getLong("Time"); | |
| String id1Field = resultSet.isNull("id1") ? null : resultSet.getString("id1"); | |
| String id2Field = resultSet.isNull("id2") ? null : resultSet.getString("id2"); | |
| Integer s1Field = resultSet.isNull("s1") ? null : resultSet.getInt(4); | |
| Boolean s2Field = resultSet.isNull("s2") ? null : resultSet.getBoolean(5); | |
| sj = new StringJoiner(" "); | |
| System.out.println( | |
| sj.add(timeField + "") | |
| .add(id1Field) | |
| .add(id2Field) | |
| .add(s1Field + "") | |
| .add(s2Field + "") | |
| .toString()); | |
| } | |
| ``` | |
| ### Close File | |
| ```shell | |
| reader.close(); | |
| ``` | |
| ### Sample Code | |
| The sample code of using these interfaces is in <https://github.com/apache/tsfile/blob/develop/java/examples/src/main/java/org/apache/tsfile/v4/ITsFileReaderAndITsFileWriter.java> | |
| > Note: The above read/write examples are all based on the table model interface. For details about the interface definition, please refer to [Java Interface Definition](./InterfaceDefinition/InterfaceDefinition-Java.md). If you need information regarding the tree model, please contact us. |