This is an automated email from the ASF dual-hosted git repository. haonan pushed a commit to branch jira1313-12 in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit c4d8b10ebbe8257e921fe421369fae678db70ddd Author: Haonan <[email protected]> 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; }
