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/11/30 01:47:46 UTC

[incubator-iotdb] 01/01: Revert "[IOTDB-298] Refactor the "last" and "first" aggregators (#594)"

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

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

commit e1fa4fb4315538e4b280c9a1e9724eddf8f991d4
Author: Jialin Qiao <qj...@mails.tsinghua.edu.cn>
AuthorDate: Sat Nov 30 09:47:36 2019 +0800

    Revert "[IOTDB-298] Refactor the "last" and "first" aggregators (#594)"
    
    This reverts commit 2785bd157597cca70f201b4bb64aa32f146f776c.
---
 .../5-Operation Manual/4-SQL Reference.md          | 14 +---
 .../5-Operation Manual/4-SQL Reference.md          | 18 ++---
 ...{FirstValueAggrFunc.java => FirstAggrFunc.java} |  4 +-
 .../{LastValueAggrFunc.java => LastAggrFunc.java}  |  4 +-
 .../db/query/executor/AggregateEngineExecutor.java |  6 +-
 .../iotdb/db/query/factory/AggreFuncFactory.java   | 12 ++--
 .../org/apache/iotdb/db/service/TSServiceImpl.java |  4 +-
 .../org/apache/iotdb/db/integration/Constant.java  |  8 +--
 .../iotdb/db/integration/IOTDBGroupByIT.java       | 28 ++++----
 .../iotdb/db/integration/IoTDBAggregationIT.java   | 34 ++++-----
 .../integration/IoTDBAggregationLargeDataIT.java   | 80 +++++++++++-----------
 .../integration/IoTDBAggregationSmallDataIT.java   | 32 ++++-----
 .../tsfile/common/constant/StatisticConstant.java  |  4 +-
 13 files changed, 114 insertions(+), 134 deletions(-)

diff --git a/docs/Documentation-CHN/UserGuide/5-Operation Manual/4-SQL Reference.md b/docs/Documentation-CHN/UserGuide/5-Operation Manual/4-SQL Reference.md
index a8f74b3..f45bf35 100644
--- a/docs/Documentation-CHN/UserGuide/5-Operation Manual/4-SQL Reference.md	
+++ b/docs/Documentation-CHN/UserGuide/5-Operation Manual/4-SQL Reference.md	
@@ -495,19 +495,11 @@ Eg. SELECT COUNT(status), COUNT(temperature) FROM root.ln.wf01.wt01 WHERE root.l
 Note: the statement needs to satisfy this constraint: <PrefixPath> + <Path> = <Timeseries>
 ```
 
-* FIRST_VALUE
-原有的 `FIRST` 方法在 `v0.10.0` 版本更名为 `FIRST_VALUE`。
-```
-SELECT FIRST_VALUE (Path) (COMMA FIRST_VALUE (Path))* FROM <FromClause> [WHERE <WhereClause>]?
-Eg. SELECT FIRST_VALUE (status), FIRST_VALUE (temperature) FROM root.ln.wf01.wt01 WHERE root.ln.wf01.wt01.temperature < 24
-Note: the statement needs to satisfy this constraint: <PrefixPath> + <Path> = <Timeseries>
-```
+* FIRST
 
-* LAST_VALUE
-原有的 `LAST` 方法在 `v0.10.0` 版本更名为 `LAST_VALUE`。
 ```
-SELECT LAST_VALUE (Path) (COMMA LAST_VALUE (Path))* FROM <FromClause> [WHERE <WhereClause>]?
-Eg. SELECT LAST_VALUE (status), LAST_VALUE (temperature) FROM root.ln.wf01.wt01 WHERE root.ln.wf01.wt01.temperature < 24
+SELECT FIRST (Path) (COMMA FIRST (Path))* FROM <FromClause> [WHERE <WhereClause>]?
+Eg. SELECT FIRST (status), FIRST (temperature) FROM root.ln.wf01.wt01 WHERE root.ln.wf01.wt01.temperature < 24
 Note: the statement needs to satisfy this constraint: <PrefixPath> + <Path> = <Timeseries>
 ```
 
diff --git a/docs/Documentation/UserGuide/5-Operation Manual/4-SQL Reference.md b/docs/Documentation/UserGuide/5-Operation Manual/4-SQL Reference.md
index ff98ea6..88982f1 100644
--- a/docs/Documentation/UserGuide/5-Operation Manual/4-SQL Reference.md	
+++ b/docs/Documentation/UserGuide/5-Operation Manual/4-SQL Reference.md	
@@ -579,23 +579,13 @@ Eg. SELECT COUNT(status), COUNT(temperature) FROM root.ln.wf01.wt01 WHERE root.l
 Note: the statement needs to satisfy this constraint: <PrefixPath> + <Path> = <Timeseries>
 ```
 
-* FIRST_VALUE(Rename from `FIRST` at `V0.10.0`)
+* FIRST
 
-The FIRST_VALUE function returns the first point value of the choosen timeseries(one or more).
+The FIRST function returns the first point value of the choosen timeseries(one or more).
 
 ```
-SELECT FIRST_VALUE (Path) (COMMA FIRST_VALUE (Path))* FROM <FromClause> [WHERE <WhereClause>]?
-Eg. SELECT FIRST_VALUE (status), FIRST_VALUE (temperature) FROM root.ln.wf01.wt01 WHERE root.ln.wf01.wt01.temperature < 24
-Note: the statement needs to satisfy this constraint: <PrefixPath> + <Path> = <Timeseries>
-```
-
-* LAST_VALUE(Rename from `LAST` at `V0.10.0`)
-
-The LAST_VALUE function returns the last point value of the choosen timeseries(one or more).
-
-```
-SELECT LAST_VALUE (Path) (COMMA LAST_VALUE (Path))* FROM <FromClause> [WHERE <WhereClause>]?
-Eg. SELECT LAST_VALUE (status), LAST_VALUE (temperature) FROM root.ln.wf01.wt01 WHERE root.ln.wf01.wt01.temperature < 24
+SELECT FIRST (Path) (COMMA FIRST (Path))* FROM <FromClause> [WHERE <WhereClause>]?
+Eg. SELECT FIRST (status), FIRST (temperature) FROM root.ln.wf01.wt01 WHERE root.ln.wf01.wt01.temperature < 24
 Note: the statement needs to satisfy this constraint: <PrefixPath> + <Path> = <Timeseries>
 ```
 
diff --git a/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/FirstValueAggrFunc.java b/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/FirstAggrFunc.java
similarity index 97%
rename from server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/FirstValueAggrFunc.java
rename to server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/FirstAggrFunc.java
index 25288ef..58b6069 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/FirstValueAggrFunc.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/FirstAggrFunc.java
@@ -29,9 +29,9 @@ import org.apache.iotdb.tsfile.file.header.PageHeader;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.read.common.BatchData;
 
-public class FirstValueAggrFunc extends AggregateFunction {
+public class FirstAggrFunc extends AggregateFunction {
 
-  public FirstValueAggrFunc(TSDataType dataType) {
+  public FirstAggrFunc(TSDataType dataType) {
     super(dataType);
   }
 
diff --git a/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/LastValueAggrFunc.java b/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/LastAggrFunc.java
similarity index 97%
rename from server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/LastValueAggrFunc.java
rename to server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/LastAggrFunc.java
index ac51f37..7a4687b 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/LastValueAggrFunc.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/LastAggrFunc.java
@@ -29,9 +29,9 @@ import org.apache.iotdb.tsfile.file.header.PageHeader;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.read.common.BatchData;
 
-public class LastValueAggrFunc extends AggregateFunction {
+public class LastAggrFunc extends AggregateFunction {
 
-  public LastValueAggrFunc(TSDataType dataType) {
+  public LastAggrFunc(TSDataType dataType) {
     super(dataType);
   }
 
diff --git a/server/src/main/java/org/apache/iotdb/db/query/executor/AggregateEngineExecutor.java b/server/src/main/java/org/apache/iotdb/db/query/executor/AggregateEngineExecutor.java
index e9e4bca..8978cdc 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/executor/AggregateEngineExecutor.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/executor/AggregateEngineExecutor.java
@@ -30,7 +30,7 @@ import org.apache.iotdb.db.exception.query.QueryProcessException;
 import org.apache.iotdb.db.metadata.MManager;
 import org.apache.iotdb.db.query.aggregation.AggreResultData;
 import org.apache.iotdb.db.query.aggregation.AggregateFunction;
-import org.apache.iotdb.db.query.aggregation.impl.LastValueAggrFunc;
+import org.apache.iotdb.db.query.aggregation.impl.LastAggrFunc;
 import org.apache.iotdb.db.query.aggregation.impl.MaxTimeAggrFunc;
 import org.apache.iotdb.db.query.context.QueryContext;
 import org.apache.iotdb.db.query.control.QueryResourceManager;
@@ -105,7 +105,7 @@ public class AggregateEngineExecutor {
 
       // sequence reader for sealed tsfile, unsealed tsfile, memory
       IAggregateReader seqResourceIterateReader;
-      if (function instanceof MaxTimeAggrFunc || function instanceof LastValueAggrFunc) {
+      if (function instanceof MaxTimeAggrFunc || function instanceof LastAggrFunc) {
         seqResourceIterateReader = new SeqResourceIterateReader(queryDataSource.getSeriesPath(),
             queryDataSource.getSeqResources(), timeFilter, context, true);
       } else {
@@ -143,7 +143,7 @@ public class AggregateEngineExecutor {
   private AggreResultData aggregateWithoutValueFilter(AggregateFunction function,
       IAggregateReader sequenceReader, IPointReader unSequenceReader, Filter filter)
       throws IOException, QueryProcessException {
-    if (function instanceof MaxTimeAggrFunc || function instanceof LastValueAggrFunc) {
+    if (function instanceof MaxTimeAggrFunc || function instanceof LastAggrFunc) {
       return handleLastMaxTimeWithOutTimeGenerator(function, sequenceReader, unSequenceReader,
           filter);
     }
diff --git a/server/src/main/java/org/apache/iotdb/db/query/factory/AggreFuncFactory.java b/server/src/main/java/org/apache/iotdb/db/query/factory/AggreFuncFactory.java
index 24f893a..aecb9a1 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/factory/AggreFuncFactory.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/factory/AggreFuncFactory.java
@@ -23,8 +23,8 @@ import org.apache.iotdb.db.exception.path.PathException;
 import org.apache.iotdb.db.query.aggregation.AggregateFunction;
 import org.apache.iotdb.db.query.aggregation.impl.AvgAggrFunc;
 import org.apache.iotdb.db.query.aggregation.impl.CountAggrFunc;
-import org.apache.iotdb.db.query.aggregation.impl.FirstValueAggrFunc;
-import org.apache.iotdb.db.query.aggregation.impl.LastValueAggrFunc;
+import org.apache.iotdb.db.query.aggregation.impl.FirstAggrFunc;
+import org.apache.iotdb.db.query.aggregation.impl.LastAggrFunc;
 import org.apache.iotdb.db.query.aggregation.impl.MaxTimeAggrFunc;
 import org.apache.iotdb.db.query.aggregation.impl.MaxValueAggrFunc;
 import org.apache.iotdb.db.query.aggregation.impl.MinTimeAggrFunc;
@@ -66,12 +66,12 @@ public class AggreFuncFactory {
         return new CountAggrFunc();
       case StatisticConstant.AVG:
         return new AvgAggrFunc(dataType);
-      case StatisticConstant.FIRST_VALUE:
-        return new FirstValueAggrFunc(dataType);
+      case StatisticConstant.FIRST:
+        return new FirstAggrFunc(dataType);
       case StatisticConstant.SUM:
         return new SumAggrFunc(dataType);
-      case StatisticConstant.LAST_VALUE:
-        return new LastValueAggrFunc(dataType);
+      case StatisticConstant.LAST:
+        return new LastAggrFunc(dataType);
       default:
         throw new PathException(
             "aggregate does not support " + aggrFuncName + " function.");
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 1f113d8..b8a6583 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
@@ -182,8 +182,8 @@ public class TSServiceImpl implements TSIService.Iface, ServerContext {
         case StatisticConstant.MAX_TIME:
         case StatisticConstant.COUNT:
           return TSDataType.INT64;
-        case StatisticConstant.LAST_VALUE:
-        case StatisticConstant.FIRST_VALUE:
+        case StatisticConstant.LAST:
+        case StatisticConstant.FIRST:
         case StatisticConstant.MIN_VALUE:
         case StatisticConstant.MAX_VALUE:
           return getSeriesType(innerPath);
diff --git a/server/src/test/java/org/apache/iotdb/db/integration/Constant.java b/server/src/test/java/org/apache/iotdb/db/integration/Constant.java
index c606d68..da2b08a 100644
--- a/server/src/test/java/org/apache/iotdb/db/integration/Constant.java
+++ b/server/src/test/java/org/apache/iotdb/db/integration/Constant.java
@@ -51,12 +51,12 @@ public class Constant {
 
   public static String insertTemplate = "insert into %s(timestamp%s) values(%d%s)";
 
-  public static String first_value(String path) {
-    return String.format("first_value(%s)", path);
+  public static String first(String path) {
+    return String.format("first(%s)", path);
   }
 
-  public static String last_value(String path) {
-    return String.format("last_value(%s)", path);
+  public static String last(String path) {
+    return String.format("last(%s)", path);
   }
 
   public static String sum(String path) {
diff --git a/server/src/test/java/org/apache/iotdb/db/integration/IOTDBGroupByIT.java b/server/src/test/java/org/apache/iotdb/db/integration/IOTDBGroupByIT.java
index d54a1e0..6755b52 100644
--- a/server/src/test/java/org/apache/iotdb/db/integration/IOTDBGroupByIT.java
+++ b/server/src/test/java/org/apache/iotdb/db/integration/IOTDBGroupByIT.java
@@ -21,8 +21,8 @@ package org.apache.iotdb.db.integration;
 
 import static org.apache.iotdb.db.integration.Constant.avg;
 import static org.apache.iotdb.db.integration.Constant.count;
-import static org.apache.iotdb.db.integration.Constant.first_value;
-import static org.apache.iotdb.db.integration.Constant.last_value;
+import static org.apache.iotdb.db.integration.Constant.first;
+import static org.apache.iotdb.db.integration.Constant.last;
 import static org.apache.iotdb.db.integration.Constant.max_time;
 import static org.apache.iotdb.db.integration.Constant.max_value;
 import static org.apache.iotdb.db.integration.Constant.min_time;
@@ -306,7 +306,7 @@ public class IOTDBGroupByIT {
         getConnection("jdbc:iotdb://127.0.0.1:6667/", "root", "root");
         Statement statement = connection.createStatement()) {
       boolean hasResultSet = statement.execute(
-          "select last_value(temperature), first_value(temperature) from root.ln.wf01.wt01 where time > 3 "
+          "select last(temperature), first(temperature) from root.ln.wf01.wt01 where time > 3 "
               + "GROUP BY (20ms, 5,[2,30], [35,37], [50, 160], [310, 314])");
 
       Assert.assertTrue(hasResultSet);
@@ -315,8 +315,8 @@ public class IOTDBGroupByIT {
         cnt = 0;
         while (resultSet.next()) {
           String ans = resultSet.getString(TIMESTAMP_STR) + "," + resultSet
-              .getString(last_value("root.ln.wf01.wt01.temperature"))
-              + "," + resultSet.getString(first_value("root.ln.wf01.wt01.temperature"));
+              .getString(last("root.ln.wf01.wt01.temperature"))
+              + "," + resultSet.getString(first("root.ln.wf01.wt01.temperature"));
           Assert.assertEquals(retArray1[cnt], ans);
           cnt++;
         }
@@ -324,7 +324,7 @@ public class IOTDBGroupByIT {
       }
 
       hasResultSet = statement.execute(
-          "select first_value(temperature), last_value(temperature) from root.ln.wf01.wt01 "
+          "select first(temperature), last(temperature) from root.ln.wf01.wt01 "
               + "where temperature > 3 "
               + "GROUP BY (20ms, 5,[2,30], [35,37], [50, 160], [310, 314])");
 
@@ -333,8 +333,8 @@ public class IOTDBGroupByIT {
         cnt = 0;
         while (resultSet.next()) {
           String ans = resultSet.getString(TIMESTAMP_STR) + "," + resultSet
-              .getString(last_value("root.ln.wf01.wt01.temperature"))
-              + "," + resultSet.getString(first_value("root.ln.wf01.wt01.temperature"));
+              .getString(last("root.ln.wf01.wt01.temperature"))
+              + "," + resultSet.getString(first("root.ln.wf01.wt01.temperature"));
           Assert.assertEquals(retArray2[cnt], ans);
           cnt++;
         }
@@ -427,7 +427,7 @@ public class IOTDBGroupByIT {
         Statement statement = connection.createStatement()) {
 
       boolean hasResultSet = statement.execute(
-          "select last_value(temperature), first_value(temperature), sum(temperature) from "
+          "select last(temperature), first(temperature), sum(temperature) from "
               + "root.ln.wf01.wt01 where time > 3 "
               + "GROUP BY (80ms, 30,[50,100], [615, 650])");
 
@@ -436,8 +436,8 @@ public class IOTDBGroupByIT {
       try (ResultSet resultSet = statement.getResultSet()) {
         while (resultSet.next()) {
           String ans = resultSet.getString(TIMESTAMP_STR) + "," + resultSet
-              .getString(last_value("root.ln.wf01.wt01.temperature"))
-              + "," + resultSet.getString(first_value("root.ln.wf01.wt01.temperature")) + ","
+              .getString(last("root.ln.wf01.wt01.temperature"))
+              + "," + resultSet.getString(first("root.ln.wf01.wt01.temperature")) + ","
               + resultSet.getString(sum("root.ln.wf01.wt01.temperature"));
           Assert.assertEquals(retArray1[cnt], ans);
           cnt++;
@@ -446,7 +446,7 @@ public class IOTDBGroupByIT {
       }
 
       hasResultSet = statement.execute(
-          "select first_value(temperature), last_value(temperature), sum(temperature) from "
+          "select first(temperature), last(temperature), sum(temperature) from "
               + "root.ln.wf01.wt01 where temperature > 3 "
               + "GROUP BY (80ms, 30,[50,100], [585,590], [615, 650])");
 
@@ -455,8 +455,8 @@ public class IOTDBGroupByIT {
         cnt = 0;
         while (resultSet.next()) {
           String ans = resultSet.getString(TIMESTAMP_STR) + "," + resultSet
-              .getString(last_value("root.ln.wf01.wt01.temperature"))
-              + "," + resultSet.getString(first_value("root.ln.wf01.wt01.temperature")) + ","
+              .getString(last("root.ln.wf01.wt01.temperature"))
+              + "," + resultSet.getString(first("root.ln.wf01.wt01.temperature")) + ","
               + resultSet.getString(sum("root.ln.wf01.wt01.temperature"));
           Assert.assertEquals(retArray2[cnt], ans);
           cnt++;
diff --git a/server/src/test/java/org/apache/iotdb/db/integration/IoTDBAggregationIT.java b/server/src/test/java/org/apache/iotdb/db/integration/IoTDBAggregationIT.java
index 6db444c..f9e0efa 100644
--- a/server/src/test/java/org/apache/iotdb/db/integration/IoTDBAggregationIT.java
+++ b/server/src/test/java/org/apache/iotdb/db/integration/IoTDBAggregationIT.java
@@ -210,7 +210,7 @@ public class IoTDBAggregationIT {
         getConnection("jdbc:iotdb://127.0.0.1:6667/", "root", "root");
         Statement statement = connection.createStatement()) {
 
-      boolean hasResultSet = statement.execute("select first_value(s0),first_value(s1),first_value(s2),first_value(s3) " +
+      boolean hasResultSet = statement.execute("select first(s0),first(s1),first(s2),first(s3) " +
           "from root.vehicle.d0 where time >= 1500 and time <= 9000");
 
       Assert.assertTrue(hasResultSet);
@@ -219,24 +219,24 @@ public class IoTDBAggregationIT {
       try (ResultSet resultSet = statement.getResultSet()) {
         cnt = 0;
         while (resultSet.next()) {
-          String ans = resultSet.getString(TIMESTAMP_STR) + "," + resultSet.getString(first_value(d0s0))
-              + "," + resultSet.getString(first_value(d0s1)) + "," + resultSet.getString(first_value(d0s2))
-              + "," + resultSet.getString(first_value(d0s3));
+          String ans = resultSet.getString(TIMESTAMP_STR) + "," + resultSet.getString(first(d0s0))
+              + "," + resultSet.getString(first(d0s1)) + "," + resultSet.getString(first(d0s2))
+              + "," + resultSet.getString(first(d0s3));
           Assert.assertEquals(retArray[cnt], ans);
           cnt++;
         }
         Assert.assertEquals(1, cnt);
       }
 
-      hasResultSet = statement.execute("select first_value(s0),first_value(s1),first_value(s2),first_value(s3) " +
+      hasResultSet = statement.execute("select first(s0),first(s1),first(s2),first(s3) " +
           "from root.vehicle.d0");
 
       Assert.assertTrue(hasResultSet);
       try (ResultSet resultSet = statement.getResultSet()) {
         while (resultSet.next()) {
-          String ans = resultSet.getString(TIMESTAMP_STR) + "," + resultSet.getString(first_value(d0s0))
-              + "," + resultSet.getString(first_value(d0s1)) + "," + resultSet.getString(first_value(d0s2))
-              + "," + resultSet.getString(first_value(d0s3));
+          String ans = resultSet.getString(TIMESTAMP_STR) + "," + resultSet.getString(first(d0s0))
+              + "," + resultSet.getString(first(d0s1)) + "," + resultSet.getString(first(d0s2))
+              + "," + resultSet.getString(first(d0s3));
           Assert.assertEquals(retArray[cnt], ans);
           cnt++;
         }
@@ -259,7 +259,7 @@ public class IoTDBAggregationIT {
         getConnection("jdbc:iotdb://127.0.0.1:6667/", "root", "root");
         Statement statement = connection.createStatement()) {
 
-      boolean hasResultSet = statement.execute("select last_value(s0),last_value(s2) " +
+      boolean hasResultSet = statement.execute("select last(s0),last(s2) " +
           "from root.vehicle.d0 where time >= 1500 and time < 9000");
 
       Assert.assertTrue(hasResultSet);
@@ -267,36 +267,36 @@ public class IoTDBAggregationIT {
       try (ResultSet resultSet = statement.getResultSet()) {
         cnt = 0;
         while (resultSet.next()) {
-          String ans = resultSet.getString(TIMESTAMP_STR) + "," + resultSet.getString(last_value(d0s0))
-              + "," + resultSet.getString(last_value(d0s2));
+          String ans = resultSet.getString(TIMESTAMP_STR) + "," + resultSet.getString(last(d0s0))
+              + "," + resultSet.getString(last(d0s2));
           Assert.assertEquals(retArray[cnt], ans);
           cnt++;
         }
         Assert.assertEquals(1, cnt);
       }
 
-      hasResultSet = statement.execute("select last_value(s0),last_value(s2) " +
+      hasResultSet = statement.execute("select last(s0),last(s2) " +
           "from root.vehicle.d0 where time <= 1600");
 
       Assert.assertTrue(hasResultSet);
       try (ResultSet resultSet = statement.getResultSet()) {
         while (resultSet.next()) {
-          String ans = resultSet.getString(TIMESTAMP_STR) + "," + resultSet.getString(last_value(d0s0))
-              + "," + resultSet.getString(last_value(d0s2));
+          String ans = resultSet.getString(TIMESTAMP_STR) + "," + resultSet.getString(last(d0s0))
+              + "," + resultSet.getString(last(d0s2));
           Assert.assertEquals(retArray[cnt], ans);
           cnt++;
         }
         Assert.assertEquals(2, cnt);
       }
 
-      hasResultSet = statement.execute("select last_value(s0),last_value(s2) " +
+      hasResultSet = statement.execute("select last(s0),last(s2) " +
           "from root.vehicle.d0 where time <= 2200");
 
       Assert.assertTrue(hasResultSet);
       try (ResultSet resultSet = statement.getResultSet()) {
         while (resultSet.next()) {
-          String ans = resultSet.getString(TIMESTAMP_STR) + "," + resultSet.getString(last_value(d0s0))
-              + "," + resultSet.getString(last_value(d0s2));
+          String ans = resultSet.getString(TIMESTAMP_STR) + "," + resultSet.getString(last(d0s0))
+              + "," + resultSet.getString(last(d0s2));
           Assert.assertEquals(retArray[cnt], ans);
           cnt++;
         }
diff --git a/server/src/test/java/org/apache/iotdb/db/integration/IoTDBAggregationLargeDataIT.java b/server/src/test/java/org/apache/iotdb/db/integration/IoTDBAggregationLargeDataIT.java
index e96dcbc..badb1ee 100644
--- a/server/src/test/java/org/apache/iotdb/db/integration/IoTDBAggregationLargeDataIT.java
+++ b/server/src/test/java/org/apache/iotdb/db/integration/IoTDBAggregationLargeDataIT.java
@@ -21,11 +21,9 @@ package org.apache.iotdb.db.integration;
 
 import static org.apache.iotdb.db.integration.Constant.avg;
 import static org.apache.iotdb.db.integration.Constant.count;
-import static org.apache.iotdb.db.integration.Constant.first_value;
-import static org.apache.iotdb.db.integration.Constant.last_value;
+import static org.apache.iotdb.db.integration.Constant.first;
 import static org.apache.iotdb.db.integration.Constant.max_time;
 import static org.apache.iotdb.db.integration.Constant.max_value;
-import static org.apache.iotdb.db.integration.Constant.min_time;
 import static org.apache.iotdb.db.integration.Constant.min_value;
 import static org.apache.iotdb.db.integration.Constant.sum;
 import static org.junit.Assert.fail;
@@ -133,7 +131,7 @@ public class IoTDBAggregationLargeDataIT {
 
     try (Connection connection = DriverManager.
         getConnection("jdbc:iotdb://127.0.0.1:6667/", "root", "root");) {
-      lastValueAggreWithSingleFilterTest();
+      lastAggreWithSingleFilterTest();
       avgAggreWithSingleFilterTest();
       sumAggreWithSingleFilterTest();
       firstAggreWithSingleFilterTest();
@@ -142,7 +140,7 @@ public class IoTDBAggregationLargeDataIT {
       minValueAggreWithSingleFilterTest();
       maxValueAggreWithSingleFilterTest();
 
-      lastValueAggreWithMultiFilterTest();
+      lastAggreWithMultiFilterTest();
       countAggreWithMultiFilterTest();
       minTimeAggreWithMultiFilterTest();
       maxTimeAggreWithMultiFilterTest();
@@ -154,7 +152,7 @@ public class IoTDBAggregationLargeDataIT {
     }
   }
 
-  private void lastValueAggreWithMultiFilterTest() throws SQLException {
+  private void lastAggreWithMultiFilterTest() throws SQLException {
     String[] retArray = new String[]{
         "0,9,39,63.0,E,true"
     };
@@ -163,18 +161,18 @@ public class IoTDBAggregationLargeDataIT {
         getConnection("jdbc:iotdb://127.0.0.1:6667/", "root", "root");
         Statement statement = connection.createStatement()) {
       boolean hasResultSet = statement.execute(
-          "select last_value(s0),last_value(s1),last_value(s2),last_value(s3),last_value(s4)" +
+          "select last(s0),last(s1),last(s2),last(s3),last(s4)" +
               " from root.vehicle.d0 where s1 >= 0");
       Assert.assertTrue(hasResultSet);
       try (ResultSet resultSet = statement.getResultSet()) {
         int cnt = 0;
         while (resultSet.next()) {
           String ans = resultSet.getString(TIMESTAMP_STR) + "," +
-              resultSet.getString(last_value(d0s0)) + "," + resultSet
-              .getString(last_value(d0s1))
-              + "," + resultSet.getString(last_value(d0s2)) + "," +
-              resultSet.getString(last_value(d0s3)) + "," + resultSet
-              .getString(last_value(d0s4));
+              resultSet.getString(Constant.last(d0s0)) + "," + resultSet
+              .getString(Constant.last(d0s1))
+              + "," + resultSet.getString(Constant.last(d0s2)) + "," +
+              resultSet.getString(Constant.last(d0s3)) + "," + resultSet
+              .getString(Constant.last(d0s4));
           // System.out.println("============ " + ans);
           Assert.assertEquals(ans, retArray[cnt]);
           cnt++;
@@ -187,7 +185,7 @@ public class IoTDBAggregationLargeDataIT {
     }
   }
 
-  private void lastValueAggreWithSingleFilterTest() throws SQLException {
+  private void lastAggreWithSingleFilterTest() throws SQLException {
     String[] retArray = new String[]{
         "0,9,39,63.0"
     };
@@ -195,16 +193,16 @@ public class IoTDBAggregationLargeDataIT {
     try (Connection connection = DriverManager.
         getConnection("jdbc:iotdb://127.0.0.1:6667/", "root", "root");
         Statement statement = connection.createStatement()) {
-      boolean hasResultSet = statement.execute("select last_value(s0),last_value(s1),last_value(s2)" +
+      boolean hasResultSet = statement.execute("select last(s0),last(s1),last(s2)" +
           " from root.vehicle.d0 where s1 >= 0");
       Assert.assertTrue(hasResultSet);
       try (ResultSet resultSet = statement.getResultSet()) {
         int cnt = 0;
         while (resultSet.next()) {
           String ans = resultSet.getString(TIMESTAMP_STR) + "," +
-              resultSet.getString(last_value(d0s0)) + ","
-              + resultSet.getString(last_value(d0s1)) + "," +
-              resultSet.getString(last_value(d0s2));
+              resultSet.getString(Constant.last(d0s0)) + ","
+              + resultSet.getString(Constant.last(d0s1)) + "," +
+              resultSet.getString(Constant.last(d0s2));
           Assert.assertEquals(retArray[cnt], ans);
           cnt++;
         }
@@ -233,7 +231,7 @@ Statement statement = connection.createStatement()) {
         while (resultSet.next()) {
           String ans = resultSet.getString(TIMESTAMP_STR) + "," + resultSet.getString(sum(d0s0)) + ","
               + resultSet.getString(sum(d0s1)) + "," + Math
-              .round(resultSet.getDouble(sum(d0s2)));
+              .round(resultSet.getDouble(Constant.sum(d0s2)));
           Assert.assertEquals(ans, retArray[cnt]);
           cnt++;
         }
@@ -254,18 +252,18 @@ Statement statement = connection.createStatement()) {
         getConnection("jdbc:iotdb://127.0.0.1:6667/", "root", "root");
         Statement statement = connection.createStatement()) {
 
-      boolean hasResultSet = statement.execute("select first_value(s0),first_value(s1),first_value(s2),first_value(s3),"
-          + "first_value(s4) from root.vehicle.d0 where s1 >= 0");
+      boolean hasResultSet = statement.execute("select first(s0),first(s1),first(s2),first(s3),"
+          + "first(s4) from root.vehicle.d0 where s1 >= 0");
       Assert.assertTrue(hasResultSet);
       try (ResultSet resultSet = statement.getResultSet()) {
         int cnt = 0;
         while (resultSet.next()) {
           String ans = resultSet.getString(TIMESTAMP_STR) + "," +
-              resultSet.getString(first_value(d0s0)) + ","
-              + resultSet.getString(first_value(d0s1)) + "," +
-              resultSet.getString(first_value(d0s2))
-              + "," + resultSet.getString(first_value(d0s3)) + "," +
-              resultSet.getString(first_value(d0s4));
+              resultSet.getString(Constant.first(d0s0)) + ","
+              + resultSet.getString(Constant.first(d0s1)) + "," +
+              resultSet.getString(Constant.first(d0s2))
+              + "," + resultSet.getString(Constant.first(d0s3)) + "," +
+              resultSet.getString(Constant.first(d0s4));
           Assert.assertEquals(ans, retArray[cnt]);
           cnt++;
         }
@@ -354,11 +352,11 @@ Statement statement = connection.createStatement()) {
       int cnt = 0;
       while (resultSet.next()) {
         String ans = resultSet.getString(TIMESTAMP_STR) + "," +
-            resultSet.getString(min_time(d0s0)) + "," +
-            resultSet.getString(min_time(d0s1)) + "," +
-            resultSet.getString(min_time(d0s2)) +
-            "," + resultSet.getString(min_time(d0s3)) +
-            "," + resultSet.getString(min_time(d0s4));
+            resultSet.getString(Constant.min_time(d0s0)) + "," +
+            resultSet.getString(Constant.min_time(d0s1)) + "," +
+            resultSet.getString(Constant.min_time(d0s2)) +
+            "," + resultSet.getString(Constant.min_time(d0s3)) +
+            "," + resultSet.getString(Constant.min_time(d0s4));
         Assert.assertEquals(ans, retArray[cnt]);
         cnt++;
       }
@@ -534,16 +532,16 @@ Statement statement = connection.createStatement()) {
         getConnection("jdbc:iotdb://127.0.0.1:6667/", "root", "root");
 Statement statement = connection.createStatement()) {
 
-      boolean hasResultSet = statement.execute("select first_value(s0),first_value(s1),first_value(s2),first_value(s3),"
-          + "first_value(s4) from root.vehicle.d0 where s1 >= 0 or s2 < 10");
+      boolean hasResultSet = statement.execute("select first(s0),first(s1),first(s2),first(s3),"
+          + "first(s4) from root.vehicle.d0 where s1 >= 0 or s2 < 10");
       Assert.assertTrue(hasResultSet);
       ResultSet resultSet = statement.getResultSet();
       int cnt = 0;
       while (resultSet.next()) {
-        String ans = resultSet.getString(TIMESTAMP_STR) + "," + resultSet.getString(first_value(d0s0))
-            + "," + resultSet.getString(first_value(d0s1)) + "," + resultSet.getString(first_value(d0s2))
-            + "," + resultSet.getString(first_value(d0s3)) + "," + resultSet.getString(first_value(d0s4));
-        //String ans = resultSet.getString(first_value(d0s3));
+        String ans = resultSet.getString(TIMESTAMP_STR) + "," + resultSet.getString(first(d0s0))
+            + "," + resultSet.getString(first(d0s1)) + "," + resultSet.getString(first(d0s2))
+            + "," + resultSet.getString(first(d0s3)) + "," + resultSet.getString(first(d0s4));
+        //String ans = resultSet.getString(first(d0s3));
         //System.out.println("!!!!!============ " + ans);
         Assert.assertEquals(retArray[cnt], ans);
         cnt++;
@@ -603,11 +601,11 @@ Statement statement = connection.createStatement()) {
       int cnt = 0;
       while (resultSet.next()) {
         String ans = resultSet.getString(TIMESTAMP_STR) + "," +
-            resultSet.getString(min_time(d0s0)) + "," +
-            resultSet.getString(min_time(d0s1)) + "," +
-            resultSet.getString(min_time(d0s2)) + "," +
-            resultSet.getString(min_time(d0s3)) + "," +
-            resultSet.getString(min_time(d0s4));
+            resultSet.getString(Constant.min_time(d0s0)) + "," +
+            resultSet.getString(Constant.min_time(d0s1)) + "," +
+            resultSet.getString(Constant.min_time(d0s2)) + "," +
+            resultSet.getString(Constant.min_time(d0s3)) + "," +
+            resultSet.getString(Constant.min_time(d0s4));
         // System.out.println("============ " + ans);
         Assert.assertEquals(ans, retArray[cnt]);
         cnt++;
diff --git a/server/src/test/java/org/apache/iotdb/db/integration/IoTDBAggregationSmallDataIT.java b/server/src/test/java/org/apache/iotdb/db/integration/IoTDBAggregationSmallDataIT.java
index 959af04..3b6a453 100644
--- a/server/src/test/java/org/apache/iotdb/db/integration/IoTDBAggregationSmallDataIT.java
+++ b/server/src/test/java/org/apache/iotdb/db/integration/IoTDBAggregationSmallDataIT.java
@@ -21,8 +21,8 @@ package org.apache.iotdb.db.integration;
 
 import static org.apache.iotdb.db.integration.Constant.avg;
 import static org.apache.iotdb.db.integration.Constant.count;
-import static org.apache.iotdb.db.integration.Constant.first_value;
-import static org.apache.iotdb.db.integration.Constant.last_value;
+import static org.apache.iotdb.db.integration.Constant.first;
+import static org.apache.iotdb.db.integration.Constant.last;
 import static org.apache.iotdb.db.integration.Constant.max_time;
 import static org.apache.iotdb.db.integration.Constant.max_value;
 import static org.apache.iotdb.db.integration.Constant.min_time;
@@ -218,28 +218,28 @@ public class IoTDBAggregationSmallDataIT {
         Assert.assertEquals(2, cnt);
       }
 
-      //select first_value(d0.s0),first_value(d1.s1),first_value(d0.s3) from root.vehicle
+      //select first(d0.s0),first(d1.s1),first(d0.s3) from root.vehicle
       hasResultSet = statement.execute(
-          "select first_value(d0.s0),first_value(d1.s1),first_value(d0.s3) from root.vehicle");
+          "select first(d0.s0),first(d1.s1),first(d0.s3) from root.vehicle");
       Assert.assertTrue(hasResultSet);
       try (ResultSet resultSet = statement.getResultSet()) {
         while (resultSet.next()) {
-          String ans = resultSet.getString(TIMESTAMP_STR) + "," + resultSet.getString(first_value(d0s0))
-              + "," + resultSet.getString(first_value(d1s1)) + "," + resultSet.getString(first_value(d0s3));
+          String ans = resultSet.getString(TIMESTAMP_STR) + "," + resultSet.getString(first(d0s0))
+              + "," + resultSet.getString(first(d1s1)) + "," + resultSet.getString(first(d0s3));
           Assert.assertEquals(retArray[cnt], ans);
           cnt++;
         }
         Assert.assertEquals(3, cnt);
       }
 
-      //select last_value(d0.s0),last_value(d1.s1),last_value(d0.s3) from root.vehicle
+      //select last(d0.s0),last(d1.s1),last(d0.s3) from root.vehicle
       hasResultSet = statement.execute(
-          "select last_value(d0.s0),last_value(d1.s1),last_value(d0.s3) from root.vehicle");
+          "select last(d0.s0),last(d1.s1),last(d0.s3) from root.vehicle");
       Assert.assertTrue(hasResultSet);
       try (ResultSet resultSet = statement.getResultSet()) {
         while (resultSet.next()) {
-          String ans = resultSet.getString(TIMESTAMP_STR) + "," + resultSet.getString(last_value(d0s0))
-              + "," + resultSet.getString(last_value(d1s1)) + "," + resultSet.getString(last_value(d0s3));
+          String ans = resultSet.getString(TIMESTAMP_STR) + "," + resultSet.getString(last(d0s0))
+              + "," + resultSet.getString(last(d1s1)) + "," + resultSet.getString(last(d0s3));
           Assert.assertEquals(retArray[cnt], ans);
           cnt++;
         }
@@ -276,14 +276,14 @@ public class IoTDBAggregationSmallDataIT {
         Statement statement = connection.createStatement()) {
 
       boolean hasResultSet = statement.execute(
-          "select last_value(s0),last_value(s1) from root.vehicle.d0 where s2 >= 3.33");
+          "select last(s0),last(s1) from root.vehicle.d0 where s2 >= 3.33");
       Assert.assertTrue(hasResultSet);
       try (ResultSet resultSet = statement.getResultSet()) {
         int cnt = 0;
         while (resultSet.next()) {
           String ans =
-              resultSet.getString(TIMESTAMP_STR) + "," + resultSet.getString(last_value(d0s0)) + ","
-                  + resultSet.getString(last_value(d0s1));
+              resultSet.getString(TIMESTAMP_STR) + "," + resultSet.getString(last(d0s0)) + ","
+                  + resultSet.getString(last(d0s1));
           //System.out.println("!!!!!============ " + ans);
           Assert.assertEquals(retArray[cnt], ans);
           cnt++;
@@ -307,14 +307,14 @@ public class IoTDBAggregationSmallDataIT {
         Statement statement = connection.createStatement();) {
 
       boolean hasResultSet = statement.execute(
-          "select first_value(s0),first_value(s1) from root.vehicle.d0 where s2 >= 3.33");
+          "select first(s0),first(s1) from root.vehicle.d0 where s2 >= 3.33");
       Assert.assertTrue(hasResultSet);
       try (ResultSet resultSet = statement.getResultSet()) {
         int cnt = 0;
         while (resultSet.next()) {
           String ans =
-              resultSet.getString(TIMESTAMP_STR) + "," + resultSet.getString(first_value(d0s0)) + ","
-                  + resultSet.getString(first_value(d0s1));
+              resultSet.getString(TIMESTAMP_STR) + "," + resultSet.getString(first(d0s0)) + ","
+                  + resultSet.getString(first(d0s1));
           //System.out.println("!!!!!============ " + ans);
           Assert.assertEquals(retArray[cnt], ans);
           cnt++;
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/common/constant/StatisticConstant.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/common/constant/StatisticConstant.java
index f41cca4..fb1c02a 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/common/constant/StatisticConstant.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/common/constant/StatisticConstant.java
@@ -29,13 +29,13 @@ public class StatisticConstant {
 
   public static final String COUNT = "count";
 
-  public static final String FIRST_VALUE = "first_value";
+  public static final String FIRST = "first";
 
   public static final String AVG = "avg";
 
   public static final String SUM = "sum";
 
-  public static final String LAST_VALUE = "last_value";
+  public static final String LAST = "last";
 
   private StatisticConstant(){}
 }