You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ha...@apache.org on 2021/05/08 07:20:24 UTC

[iotdb] branch master updated: [IOTDB-1232][IOTDB-1313] Fix lossing time precision when import csv with unsupported timestamp format (#3142)

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

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


The following commit(s) were added to refs/heads/master by this push:
     new e9ada63  [IOTDB-1232][IOTDB-1313] Fix lossing time precision when import csv with unsupported timestamp format (#3142)
e9ada63 is described below

commit e9ada637017068ad9adb2e956f07288b1d44f60b
Author: Haonan <hh...@outlook.com>
AuthorDate: Sat May 8 15:19:54 2021 +0800

    [IOTDB-1232][IOTDB-1313] Fix lossing time precision when import csv with unsupported timestamp format (#3142)
---
 .../org/apache/iotdb/tool/AbstractCsvTool.java     | 39 ++++++++++++----------
 .../main/java/org/apache/iotdb/tool/ExportCsv.java |  2 +-
 .../main/java/org/apache/iotdb/tool/ImportCsv.java | 34 +++++--------------
 3 files changed, 30 insertions(+), 45 deletions(-)

diff --git a/cli/src/main/java/org/apache/iotdb/tool/AbstractCsvTool.java b/cli/src/main/java/org/apache/iotdb/tool/AbstractCsvTool.java
index ff8b925..90764b5 100644
--- a/cli/src/main/java/org/apache/iotdb/tool/AbstractCsvTool.java
+++ b/cli/src/main/java/org/apache/iotdb/tool/AbstractCsvTool.java
@@ -53,24 +53,10 @@ public abstract class AbstractCsvTool {
   protected static final String TIME_ZONE_ARGS = "tz";
   protected static final String TIME_ZONE_NAME = "timeZone";
   protected static final int MAX_HELP_CONSOLE_WIDTH = 92;
-  protected static final String[] SUPPORT_TIME_FORMAT =
+  protected static final String[] TIME_FORMAT =
+      new String[] {"default", "long", "number", "timestamp"};
+  protected static final String[] STRING_TIME_FORMAT =
       new String[] {
-        "default",
-        "long",
-        "number",
-        "timestamp",
-        "yyyy-MM-dd HH:mm:ss",
-        "yyyy/MM/dd HH:mm:ss",
-        "yyyy.MM.dd HH:mm:ss",
-        "yyyy-MM-dd'T'HH:mm:ss",
-        "yyyy/MM/dd'T'HH:mm:ss",
-        "yyyy.MM.dd'T'HH:mm:ss",
-        "yyyy-MM-dd HH:mm:ssZZ",
-        "yyyy/MM/dd HH:mm:ssZZ",
-        "yyyy.MM.dd HH:mm:ssZZ",
-        "yyyy-MM-dd'T'HH:mm:ssZZ",
-        "yyyy/MM/dd'T'HH:mm:ssZZ",
-        "yyyy.MM.dd'T'HH:mm:ssZZ",
         "yyyy-MM-dd'T'HH:mm:ss.SSSZ",
         "yyyy/MM/dd HH:mm:ss.SSS",
         "yyyy-MM-dd HH:mm:ss.SSS",
@@ -84,6 +70,18 @@ public abstract class AbstractCsvTool {
         "yyyy.MM.dd HH:mm:ss.SSSZZ",
         "yyyy-MM-dd'T'HH:mm:ss.SSSZZ",
         "yyyy/MM/dd'T'HH:mm:ss.SSSZZ",
+        "yyyy-MM-dd HH:mm:ss",
+        "yyyy/MM/dd HH:mm:ss",
+        "yyyy.MM.dd HH:mm:ss",
+        "yyyy-MM-dd'T'HH:mm:ss",
+        "yyyy/MM/dd'T'HH:mm:ss",
+        "yyyy.MM.dd'T'HH:mm:ss",
+        "yyyy-MM-dd HH:mm:ssZZ",
+        "yyyy/MM/dd HH:mm:ssZZ",
+        "yyyy.MM.dd HH:mm:ssZZ",
+        "yyyy-MM-dd'T'HH:mm:ssZZ",
+        "yyyy/MM/dd'T'HH:mm:ssZZ",
+        "yyyy.MM.dd'T'HH:mm:ssZZ",
       };
   protected static String host;
   protected static String port;
@@ -129,7 +127,12 @@ public abstract class AbstractCsvTool {
   }
 
   protected static boolean checkTimeFormat() {
-    for (String format : SUPPORT_TIME_FORMAT) {
+    for (String format : TIME_FORMAT) {
+      if (timeFormat.equals(format)) {
+        return true;
+      }
+    }
+    for (String format : STRING_TIME_FORMAT) {
       if (timeFormat.equals(format)) {
         return true;
       }
diff --git a/cli/src/main/java/org/apache/iotdb/tool/ExportCsv.java b/cli/src/main/java/org/apache/iotdb/tool/ExportCsv.java
index ceb0142..5b1d9ca 100644
--- a/cli/src/main/java/org/apache/iotdb/tool/ExportCsv.java
+++ b/cli/src/main/java/org/apache/iotdb/tool/ExportCsv.java
@@ -312,7 +312,7 @@ public class ExportCsv extends AbstractCsvTool {
         break;
       case "timestamp":
       case "long":
-      case "nubmer":
+      case "number":
         bw.write(time + ",");
         break;
       default:
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 224d513..fdf32b3 100644
--- a/cli/src/main/java/org/apache/iotdb/tool/ImportCsv.java
+++ b/cli/src/main/java/org/apache/iotdb/tool/ImportCsv.java
@@ -33,8 +33,6 @@ import org.apache.commons.cli.HelpFormatter;
 import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.apache.commons.cli.ParseException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import java.io.BufferedReader;
 import java.io.File;
@@ -57,8 +55,6 @@ public class ImportCsv extends AbstractCsvTool {
   private static final String FILE_ARGS = "f";
   private static final String FILE_NAME = "file or folder";
   private static final String FILE_SUFFIX = "csv";
-  private static final Logger logger = LoggerFactory.getLogger(ImportCsv.class);
-  private static final String TIME_TYPE = "It isn't a {} time type";
 
   private static final String TSFILEDB_CLI_PREFIX = "ImportCsv";
   private static final String ILLEGAL_PATH_ARGUMENT = "Path parameter is null";
@@ -249,9 +245,6 @@ public class ImportCsv extends AbstractCsvTool {
   }
 
   private static SimpleDateFormat formatterInit(String time) {
-    SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
-    SimpleDateFormat format2 = new SimpleDateFormat("yyy-MM-dd HH:mm:ss");
-    SimpleDateFormat format3 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
 
     try {
       Long.parseLong(time);
@@ -260,25 +253,14 @@ public class ImportCsv extends AbstractCsvTool {
       // do nothing
     }
 
-    try {
-      format1.parse(time).getTime();
-      return format1;
-    } catch (java.text.ParseException ignored) {
-      // do nothing
-    }
-
-    try {
-      format2.parse(time).getTime();
-      return format2;
-    } catch (java.text.ParseException ignored) {
-      // do nothing
-    }
-
-    try {
-      format3.parse(time).getTime();
-      return format3;
-    } catch (java.text.ParseException ignored) {
-      // do nothing
+    for (String timeFormat : STRING_TIME_FORMAT) {
+      SimpleDateFormat format = new SimpleDateFormat(timeFormat);
+      try {
+        format.parse(time).getTime();
+        return format;
+      } catch (java.text.ParseException ignored) {
+        // do nothing
+      }
     }
     return null;
   }