You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by qi...@apache.org on 2019/09/02 08:20:39 UTC

[incubator-iotdb] branch session_insert created (now b3b7417)

This is an automated email from the ASF dual-hosted git repository.

qiaojialin pushed a change to branch session_insert
in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git.


      at b3b7417  add insertRow interface

This branch includes the following new commits:

     new b3b7417  add insertRow interface

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[incubator-iotdb] 01/01: add insertRow interface

Posted by qi...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

qiaojialin pushed a commit to branch session_insert
in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git

commit b3b7417e3b46017e0a87b4e683db6092c12dc3b1
Author: qiaojialin <64...@qq.com>
AuthorDate: Mon Sep 2 16:20:05 2019 +0800

    add insertRow interface
---
 .../UserGuide/7-Session API/1-Session API.md       | 46 ++++++++++++++++-----
 .../UserGuide/7-Session API/1-Session API.md       | 47 ++++++++++++++++------
 .../main/java/org/apache/iotdb/SessionExample.java | 31 ++++++++++++--
 .../org/apache/iotdb/db/service/TSServiceImpl.java | 21 ++++++++++
 service-rpc/src/main/thrift/rpc.thrift             |  9 +++++
 .../java/org/apache/iotdb/session/Session.java     | 16 ++++++++
 6 files changed, 144 insertions(+), 26 deletions(-)

diff --git a/docs/Documentation-CHN/UserGuide/7-Session API/1-Session API.md b/docs/Documentation-CHN/UserGuide/7-Session API/1-Session API.md
index 6e73335..4e9f0ee 100644
--- a/docs/Documentation-CHN/UserGuide/7-Session API/1-Session API.md	
+++ b/docs/Documentation-CHN/UserGuide/7-Session API/1-Session API.md	
@@ -49,10 +49,11 @@ In root directory:
 
 
 ```Java
-import java.sql.Connection;
-import java.sql.DriverManager;
-import java.sql.Statement;
+import java.util.ArrayList;
+import java.util.List;
+import org.apache.iotdb.session.IoTDBSessionException;
 import org.apache.iotdb.session.Session;
+import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
 import org.apache.iotdb.tsfile.write.record.RowBatch;
@@ -61,15 +62,39 @@ import org.apache.iotdb.tsfile.write.schema.Schema;
 
 public class SessionExample {
 
-  public static void main(String[] args) throws ClassNotFoundException, IoTDBSessionException {
-    Session session = new Session("127.0.0.1", 6667, "root", "root");
+  private static Session session;
+
+  public static void main(String[] args) throws IoTDBSessionException {
+    session = new Session("127.0.0.1", 6667, "root", "root");
     session.open();
-    
+
     session.setStorageGroup("root.sg1");
-    session.createTimeseriesResp("root.sg1.d1.s1", TSDataType.INT64, TSEncoding.RLE);
-    session.createTimeseriesResp("root.sg1.d1.s2", TSDataType.INT64, TSEncoding.RLE);
-    session.createTimeseriesResp("root.sg1.d1.s3", TSDataType.INT64, TSEncoding.RLE);
+    session.createTimeseries("root.sg1.d1.s1", TSDataType.INT64, TSEncoding.RLE, CompressionType.SNAPPY);
+    session.createTimeseries("root.sg1.d1.s2", TSDataType.INT64, TSEncoding.RLE, CompressionType.SNAPPY);
+    session.createTimeseries("root.sg1.d1.s3", TSDataType.INT64, TSEncoding.RLE, CompressionType.SNAPPY);
+
+    insert();
+//    insertRowBatch();
+
+    session.close();
+  }
 
+  private static void insert() throws IoTDBSessionException {
+    String deviceId = "root.sg1.d1";
+    List<String> measurements = new ArrayList<>();
+    measurements.add("s1");
+    measurements.add("s2");
+    measurements.add("s3");
+    for (long time = 0; time < 30000; time++) {
+      List<String> values = new ArrayList<>();
+      values.add("1");
+      values.add("2");
+      values.add("3");
+      session.insert(deviceId, time, measurements, values);
+    }
+  }
+
+  private static void insertRowBatch() throws IoTDBSessionException {
     Schema schema = new Schema();
     schema.registerMeasurement(new MeasurementSchema("s1", TSDataType.INT64, TSEncoding.RLE));
     schema.registerMeasurement(new MeasurementSchema("s2", TSDataType.INT64, TSEncoding.RLE));
@@ -85,7 +110,7 @@ public class SessionExample {
       timestamps[row] = time;
       for (int i = 0; i < 3; i++) {
         long[] sensor = (long[]) values[i];
-        sensor[row] = time;
+        sensor[row] = i;
       }
       if (rowBatch.batchSize == rowBatch.getMaxBatchSize()) {
         session.insertBatch(rowBatch);
@@ -97,7 +122,6 @@ public class SessionExample {
       session.insertBatch(rowBatch);
       rowBatch.reset();
     }
-    session.close();
   }
 }
 ```
diff --git a/docs/Documentation/UserGuide/7-Session API/1-Session API.md b/docs/Documentation/UserGuide/7-Session API/1-Session API.md
index 04e35d0..6312a5c 100644
--- a/docs/Documentation/UserGuide/7-Session API/1-Session API.md	
+++ b/docs/Documentation/UserGuide/7-Session API/1-Session API.md	
@@ -58,10 +58,11 @@ This chapter provides an example of how to open an IoTDB session, execute a batc
 Requires that you include the packages containing the Client classes needed for database programming.
 
 ```Java
-import java.sql.Connection;
-import java.sql.DriverManager;
-import java.sql.Statement;
+import java.util.ArrayList;
+import java.util.List;
+import org.apache.iotdb.session.IoTDBSessionException;
 import org.apache.iotdb.session.Session;
+import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
 import org.apache.iotdb.tsfile.write.record.RowBatch;
@@ -70,15 +71,39 @@ import org.apache.iotdb.tsfile.write.schema.Schema;
 
 public class SessionExample {
 
-  public static void main(String[] args) throws ClassNotFoundException, IoTDBSessionException {
-    Session session = new Session("127.0.0.1", 6667, "root", "root");
+  private static Session session;
+
+  public static void main(String[] args) throws IoTDBSessionException {
+    session = new Session("127.0.0.1", 6667, "root", "root");
     session.open();
-    
+
     session.setStorageGroup("root.sg1");
-    session.createTimeseriesResp("root.sg1.d1.s1", TSDataType.INT64, TSEncoding.RLE);
-    session.createTimeseriesResp("root.sg1.d1.s2", TSDataType.INT64, TSEncoding.RLE);
-    session.createTimeseriesResp("root.sg1.d1.s3", TSDataType.INT64, TSEncoding.RLE);
+    session.createTimeseries("root.sg1.d1.s1", TSDataType.INT64, TSEncoding.RLE, CompressionType.SNAPPY);
+    session.createTimeseries("root.sg1.d1.s2", TSDataType.INT64, TSEncoding.RLE, CompressionType.SNAPPY);
+    session.createTimeseries("root.sg1.d1.s3", TSDataType.INT64, TSEncoding.RLE, CompressionType.SNAPPY);
+
+    insert();
+//    insertRowBatch();
+
+    session.close();
+  }
 
+  private static void insert() throws IoTDBSessionException {
+    String deviceId = "root.sg1.d1";
+    List<String> measurements = new ArrayList<>();
+    measurements.add("s1");
+    measurements.add("s2");
+    measurements.add("s3");
+    for (long time = 0; time < 30000; time++) {
+      List<String> values = new ArrayList<>();
+      values.add("1");
+      values.add("2");
+      values.add("3");
+      session.insert(deviceId, time, measurements, values);
+    }
+  }
+
+  private static void insertRowBatch() throws IoTDBSessionException {
     Schema schema = new Schema();
     schema.registerMeasurement(new MeasurementSchema("s1", TSDataType.INT64, TSEncoding.RLE));
     schema.registerMeasurement(new MeasurementSchema("s2", TSDataType.INT64, TSEncoding.RLE));
@@ -94,7 +119,7 @@ public class SessionExample {
       timestamps[row] = time;
       for (int i = 0; i < 3; i++) {
         long[] sensor = (long[]) values[i];
-        sensor[row] = time;
+        sensor[row] = i;
       }
       if (rowBatch.batchSize == rowBatch.getMaxBatchSize()) {
         session.insertBatch(rowBatch);
@@ -106,8 +131,6 @@ public class SessionExample {
       session.insertBatch(rowBatch);
       rowBatch.reset();
     }
-
-    session.close();
   }
 }
 ```
diff --git a/example/session/src/main/java/org/apache/iotdb/SessionExample.java b/example/session/src/main/java/org/apache/iotdb/SessionExample.java
index d6bc905..1b22ebb 100644
--- a/example/session/src/main/java/org/apache/iotdb/SessionExample.java
+++ b/example/session/src/main/java/org/apache/iotdb/SessionExample.java
@@ -18,6 +18,8 @@
  */
 package org.apache.iotdb;
 
+import java.util.ArrayList;
+import java.util.List;
 import org.apache.iotdb.session.IoTDBSessionException;
 import org.apache.iotdb.session.Session;
 import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
@@ -29,8 +31,10 @@ import org.apache.iotdb.tsfile.write.schema.Schema;
 
 public class SessionExample {
 
+  private static Session session;
+
   public static void main(String[] args) throws IoTDBSessionException {
-    Session session = new Session("127.0.0.1", 6667, "root", "root");
+    session = new Session("127.0.0.1", 6667, "root", "root");
     session.open();
 
     session.setStorageGroup("root.sg1");
@@ -38,6 +42,28 @@ public class SessionExample {
     session.createTimeseries("root.sg1.d1.s2", TSDataType.INT64, TSEncoding.RLE, CompressionType.SNAPPY);
     session.createTimeseries("root.sg1.d1.s3", TSDataType.INT64, TSEncoding.RLE, CompressionType.SNAPPY);
 
+    insert();
+//    insertRowBatch();
+
+    session.close();
+  }
+
+  private static void insert() throws IoTDBSessionException {
+    String deviceId = "root.sg1.d1";
+    List<String> measurements = new ArrayList<>();
+    measurements.add("s1");
+    measurements.add("s2");
+    measurements.add("s3");
+    for (long time = 0; time < 30000; time++) {
+      List<String> values = new ArrayList<>();
+      values.add("1");
+      values.add("2");
+      values.add("3");
+      session.insert(deviceId, time, measurements, values);
+    }
+  }
+
+  private static void insertRowBatch() throws IoTDBSessionException {
     Schema schema = new Schema();
     schema.registerMeasurement(new MeasurementSchema("s1", TSDataType.INT64, TSEncoding.RLE));
     schema.registerMeasurement(new MeasurementSchema("s2", TSDataType.INT64, TSEncoding.RLE));
@@ -53,7 +79,7 @@ public class SessionExample {
       timestamps[row] = time;
       for (int i = 0; i < 3; i++) {
         long[] sensor = (long[]) values[i];
-        sensor[row] = time;
+        sensor[row] = i;
       }
       if (rowBatch.batchSize == rowBatch.getMaxBatchSize()) {
         session.insertBatch(rowBatch);
@@ -65,6 +91,5 @@ public class SessionExample {
       session.insertBatch(rowBatch);
       rowBatch.reset();
     }
-    session.close();
   }
 }
\ No newline at end of file
diff --git a/server/src/main/java/org/apache/iotdb/db/service/TSServiceImpl.java b/server/src/main/java/org/apache/iotdb/db/service/TSServiceImpl.java
index 493331c..15dc8b1 100644
--- a/server/src/main/java/org/apache/iotdb/db/service/TSServiceImpl.java
+++ b/server/src/main/java/org/apache/iotdb/db/service/TSServiceImpl.java
@@ -930,6 +930,7 @@ public class TSServiceImpl implements TSIService.Iface, ServerContext {
 
   @Override
   public TSExecuteStatementResp insert(TSInsertionReq req) {
+    // TODO need to refactor this when implementing PreparedStatement
     if (!checkLogin()) {
       logger.info(INFO_NOT_LOGIN, IoTDBConstant.GLOBAL_DB_NAME);
       return getTSExecuteStatementResp(getStatus(TSStatusType.NOT_LOGIN_ERROR));
@@ -961,6 +962,26 @@ public class TSServiceImpl implements TSIService.Iface, ServerContext {
   }
 
   @Override
+  public TSRPCResp insertRow(TSInsertReq req) throws TException {
+    if (!checkLogin()) {
+      logger.info(INFO_NOT_LOGIN, IoTDBConstant.GLOBAL_DB_NAME);
+      return new TSRPCResp(getStatus(TSStatusType.NOT_LOGIN_ERROR));
+    }
+
+    InsertPlan plan = new InsertPlan();
+    plan.setDeviceId(req.getDeviceId());
+    plan.setTime(req.getTimestamp());
+    plan.setMeasurements(req.getMeasurements().toArray(new String[0]));
+    plan.setValues(req.getValues().toArray(new String[0]));
+
+    TS_Status status = checkAuthority(plan);
+    if (status != null) {
+      return new TSRPCResp(status);
+    }
+    return new TSRPCResp(executePlan(plan));
+  }
+
+  @Override
   public TSExecuteBatchStatementResp insertBatch(TSBatchInsertionReq req) {
     long t1 = System.currentTimeMillis();
     try {
diff --git a/service-rpc/src/main/thrift/rpc.thrift b/service-rpc/src/main/thrift/rpc.thrift
index ec05a27..c4947e7 100644
--- a/service-rpc/src/main/thrift/rpc.thrift
+++ b/service-rpc/src/main/thrift/rpc.thrift
@@ -236,6 +236,13 @@ struct TSBatchInsertionReq {
     6: required i32 size
 }
 
+struct TSInsertReq {
+    1: required string deviceId
+    2: required list<string> measurements
+    3: required list<string> values
+    4: required i64 timestamp
+}
+
 struct TSSetStorageGroupReq {
   1: required string storageGroupId
 }
@@ -292,5 +299,7 @@ service TSIService {
 
 	TSRPCResp createTimeseries(1:TSCreateTimeseriesReq req);
 
+  TSRPCResp insertRow(1:TSInsertReq req);
+
 	i64 requestStatementId();
 	}
diff --git a/session/src/main/java/org/apache/iotdb/session/Session.java b/session/src/main/java/org/apache/iotdb/session/Session.java
index 771b2d1..f0d6dcd 100644
--- a/session/src/main/java/org/apache/iotdb/session/Session.java
+++ b/session/src/main/java/org/apache/iotdb/session/Session.java
@@ -18,6 +18,7 @@
  */
 package org.apache.iotdb.session;
 
+import java.util.List;
 import org.apache.iotdb.rpc.IoTDBRPCException;
 import org.apache.iotdb.rpc.RpcUtils;
 import org.apache.iotdb.service.rpc.thrift.*;
@@ -156,6 +157,21 @@ public class Session {
     }
   }
 
+  public TSRPCResp insert(String deviceId, long time, List<String> measurements, List<String> values)
+      throws IoTDBSessionException {
+    TSInsertReq request = new TSInsertReq();
+    request.setDeviceId(deviceId);
+    request.setTimestamp(time);
+    request.setMeasurements(measurements);
+    request.setValues(values);
+
+    try {
+      return client.insertRow(request);
+    } catch (TException e) {
+      throw new IoTDBSessionException(e);
+    }
+  }
+
   public TSRPCResp setStorageGroup(String storageGroupId) throws IoTDBSessionException {
     TSSetStorageGroupReq request = new TSSetStorageGroupReq();
     request.setStorageGroupId(storageGroupId);