@Override
  public Statement visitLoadFile(IoTDBSqlParser.LoadFileContext ctx) {
    try {
      final LoadTsFileStatement loadTsFileStatement =
          new LoadTsFileStatement(parseStringLiteral(ctx.fileName.getText()));

      // if sql have with, return new load sql statement
      if (ctx.loadFileWithAttributeClauses() != null) {
        final Map<String, String> loadTsFileAttributes = new HashMap<>();
        for (IoTDBSqlParser.LoadFileWithAttributeClauseContext attributeContext :
            ctx.loadFileWithAttributeClauses().loadFileWithAttributeClause()) {
          final String key =
              parseStringLiteral(attributeContext.loadFileWithKey.getText()).trim().toLowerCase();
          final String value =
              parseStringLiteral(attributeContext.loadFileWithValue.getText()).trim().toLowerCase();

          LoadTsFileConfigurator.validateParameters(key, value);
          loadTsFileAttributes.put(key, value);
        }
        LoadTsFileConfigurator.validateSynonymParameters(loadTsFileAttributes);

        loadTsFileStatement.setLoadAttributes(loadTsFileAttributes);
        return loadTsFileStatement;
      }

      if (ctx.loadFileAttributeClauses() != null) {
        for (IoTDBSqlParser.LoadFileAttributeClauseContext attributeContext :
            ctx.loadFileAttributeClauses().loadFileAttributeClause()) {
          parseLoadFileAttributeClause(loadTsFileStatement, attributeContext);
        }
      }
      return loadTsFileStatement;
    } catch (FileNotFoundException e) {
      throw new SemanticException(e.getMessage());
    }
  }
Parse time range (startTime and endTime) in group by time.

@throws SemanticException if startTime is larger or equals to endTime in timeRange
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/parser/ASTVisitor.java