You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ge...@apache.org on 2020/11/02 07:54:08 UTC

[iotdb] 02/04: change session to jdbc

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

geniuspig pushed a commit to branch change_jdbc_to_session_in_csv
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit 9396db716841f1b89a2277cc91f72b7fe6b8229e
Author: Boris <96...@qq.com>
AuthorDate: Mon Nov 2 13:38:09 2020 +0800

    change session to jdbc
---
 cli/pom.xml                                        |  5 ++
 .../java/org/apache/iotdb/cli/AbstractCli.java     | 13 ++----
 .../main/java/org/apache/iotdb/tool/ImportCsv.java | 54 +++++++++-------------
 3 files changed, 30 insertions(+), 42 deletions(-)

diff --git a/cli/pom.xml b/cli/pom.xml
index 656ac34..78eef51 100644
--- a/cli/pom.xml
+++ b/cli/pom.xml
@@ -48,6 +48,11 @@
             <scope>test</scope>
         </dependency>
         <dependency>
+            <groupId>org.apache.iotdb</groupId>
+            <artifactId>iotdb-jdbc</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
             <groupId>commons-cli</groupId>
             <artifactId>commons-cli</artifactId>
         </dependency>
diff --git a/cli/src/main/java/org/apache/iotdb/cli/AbstractCli.java b/cli/src/main/java/org/apache/iotdb/cli/AbstractCli.java
index 4f967ec..639c317 100644
--- a/cli/src/main/java/org/apache/iotdb/cli/AbstractCli.java
+++ b/cli/src/main/java/org/apache/iotdb/cli/AbstractCli.java
@@ -32,7 +32,6 @@ import java.time.ZoneId;
 import java.time.ZonedDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
@@ -46,7 +45,6 @@ import org.apache.iotdb.jdbc.IoTDBConnection;
 import org.apache.iotdb.jdbc.IoTDBJDBCResultSet;
 import org.apache.iotdb.service.rpc.thrift.ServerProperties;
 import org.apache.iotdb.tool.ImportCsv;
-import org.apache.thrift.TException;
 
 public abstract class AbstractCli {
 
@@ -541,14 +539,9 @@ public abstract class AbstractCli {
           + "Noted that your file path cannot contain any space character)");
       return;
     }
-    try {
-      println(cmd.split(" ")[1]);
-      ImportCsv.importCsvFromFile(host, port, username, password, cmd.split(" ")[1],
-          connection.getTimeZone());
-    } catch (SQLException e) {
-      println(String.format("Failed to import from %s because %s",
-          cmd.split(" ")[1], e.getMessage()));
-    }
+    println(cmd.split(" ")[1]);
+    ImportCsv.importCsvFromFile(host, port, username, password, cmd.split(" ")[1],
+        connection.getTimeZone());
   }
 
   private static void executeQuery(IoTDBConnection connection, String cmd) {
diff --git a/cli/src/main/java/org/apache/iotdb/tool/ImportCsv.java b/cli/src/main/java/org/apache/iotdb/tool/ImportCsv.java
index e6be89a..21f9016 100644
--- a/cli/src/main/java/org/apache/iotdb/tool/ImportCsv.java
+++ b/cli/src/main/java/org/apache/iotdb/tool/ImportCsv.java
@@ -25,7 +25,6 @@ import java.io.FileReader;
 import java.io.IOException;
 import java.io.LineNumberReader;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -53,8 +52,6 @@ public class ImportCsv extends AbstractCsvTool {
   private static final String FILE_SUFFIX = "csv";
 
   private static final String TSFILEDB_CLI_PREFIX = "ImportCsv";
-
-  private static Session session;
   private static final String ILLEGAL_PATH_ARGUMENT = "Path parameter is null";
 
   /**
@@ -104,7 +101,6 @@ public class ImportCsv extends AbstractCsvTool {
    * Data from csv To tsfile.
    */
   private static void loadDataFromCSV(File file) {
-    session = null;
     int fileLine;
     try {
       fileLine = getFileLineCount(file);
@@ -117,39 +113,33 @@ public class ImportCsv extends AbstractCsvTool {
         ProgressBar pb = new ProgressBar("Import from: " + file.getName(), fileLine)) {
       pb.setExtraMessage("Importing...");
       String header = br.readLine();
-      String[] strHeadInfo = header.split(",");
-      if (strHeadInfo.length <= 1) {
+      String[] cols = header.split(",");
+      if (cols.length <= 1) {
         System.out.println("The CSV file "+ file.getName() +" illegal, please check first line");
         return;
       }
 
       List<String> devices = new ArrayList<>();
       List<Long> times = new ArrayList<>();
-      List<List<String>> measurements = new ArrayList<>();
+      List<List<String>> measurementsList = new ArrayList<>();
       List<List<String>> valuesList = new ArrayList<>();
-      Map<String, List<String>> deviceToMeasurements = new HashMap<>();
-
-      String[] cols = header.split(",");
+      Map<String, Map<String, Integer>> deviceToMeasurementsAndPositions = new HashMap<>();
 
       for(int i = 1; i < cols.length; i++) {
-        splitColToDeviceAndMeasurement(cols[i], deviceToMeasurements);
+        splitColToDeviceAndMeasurement(cols[i], deviceToMeasurementsAndPositions, i);
       }
 
       String line;
       while((line = br.readLine()) != null) {
         cols = line.split(",");
-        times.add(Long.parseLong(cols[0]));
-        List<String> values = new ArrayList<>(Arrays.asList(cols).subList(1, cols.length));
-        valuesList.add(values);
-      }
-
-      for(String device: deviceToMeasurements.keySet()) {
-        devices.add(device);
-        measurements.add(deviceToMeasurements.get(device));
+        for(String device: deviceToMeasurementsAndPositions.keySet()) {
+          devices.add(device);
+          Map<String, Integer> measurementsAndPositions = deviceToMeasurementsAndPositions.get(device);
+        }
       }
 
       try {
-        session.insertRecords(devices, times, measurements, valuesList);
+        session.insertRecords(devices, times, measurementsList, valuesList);
       } catch (IoTDBConnectionException | StatementExecutionException e) {
         System.out.println("Meet error when insert csv because " + e.getMessage());
         return;
@@ -226,7 +216,7 @@ public class ImportCsv extends AbstractCsvTool {
       String timeZone){
     try {
       session = new Session(ip, Integer.parseInt(port), username, password);
-      session.open(true);
+      session.open(false);
       timeZoneID = timeZone;
       setTimeZone();
 
@@ -288,7 +278,7 @@ public class ImportCsv extends AbstractCsvTool {
     return line;
   }
 
-  private static void splitColToDeviceAndMeasurement(String col, Map<String, List<String>> deviceToMeasurements) {
+  private static void splitColToDeviceAndMeasurement(String col, Map<String, Map<String, Integer>> deviceToMeasurementsAndPositions, int position) {
     if (col.length() > 0) {
       if (col.charAt(col.length() - 1) == TsFileConstant.DOUBLE_QUOTE) {
         int endIndex = col.lastIndexOf('"', col.length() - 2);
@@ -297,7 +287,7 @@ public class ImportCsv extends AbstractCsvTool {
           endIndex = col.lastIndexOf('"', endIndex - 2);
         }
         if (endIndex != -1 && (endIndex == 0 || col.charAt(endIndex - 1) == '.')) {
-          putDeviceAndMeasurement(col.substring(0, endIndex - 1), col.substring(endIndex), deviceToMeasurements);
+          putDeviceAndMeasurement(col.substring(0, endIndex - 1), col.substring(endIndex), deviceToMeasurementsAndPositions, position);
         } else {
           throw new IllegalArgumentException(ILLEGAL_PATH_ARGUMENT);
         }
@@ -305,25 +295,25 @@ public class ImportCsv extends AbstractCsvTool {
           && col.charAt(col.length() - 1) != TsFileConstant.PATH_SEPARATOR_CHAR) {
         int endIndex = col.lastIndexOf(TsFileConstant.PATH_SEPARATOR_CHAR);
         if (endIndex < 0) {
-          putDeviceAndMeasurement("", col, deviceToMeasurements);
+          putDeviceAndMeasurement("", col, deviceToMeasurementsAndPositions, position);
         } else {
-          putDeviceAndMeasurement(col.substring(0, endIndex), col.substring(endIndex + 1), deviceToMeasurements);
+          putDeviceAndMeasurement(col.substring(0, endIndex), col.substring(endIndex + 1), deviceToMeasurementsAndPositions, position);
         }
       } else {
         throw new IllegalArgumentException(ILLEGAL_PATH_ARGUMENT);
       }
     } else {
-      putDeviceAndMeasurement("", col, deviceToMeasurements);
+      putDeviceAndMeasurement("", col, deviceToMeasurementsAndPositions, position);
     }
   }
 
-  private static void putDeviceAndMeasurement(String device, String measurement, Map<String, List<String>> deviceToMeasurements) {
-    if(deviceToMeasurements.get(device) == null) {
-      List<String> measurements = new ArrayList<>();
-      measurements.add(measurement);
-      deviceToMeasurements.put(device, measurements);
+  private static void putDeviceAndMeasurement(String device, String measurement, Map<String, Map<String, Integer>> deviceToMeasurementsAndPositions, int position) {
+    if(deviceToMeasurementsAndPositions.get(device) == null) {
+      Map<String, Integer> measurementsAndPositions = new HashMap<>();
+      measurementsAndPositions.put(measurement, position);
+      deviceToMeasurementsAndPositions.put(device, measurementsAndPositions);
     } else {
-      deviceToMeasurements.get(device).add(measurement);
+      deviceToMeasurementsAndPositions.get(device).put(measurement, position);
     }
   }
 }