You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by xi...@apache.org on 2022/03/14 05:53:35 UTC

[iotdb] 03/11: complete raw data query operators design

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

xingtanzjr pushed a commit to branch xingtanzjr/mpp-query-basis
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit a95ca1e3431b44551124f9ec82e1530fb4e89aff
Author: Jinrui.Zhang <xi...@gmail.com>
AuthorDate: Tue Mar 1 21:59:46 2022 +0800

    complete raw data query operators design
---
 .../distribution/common/DeviceMergeOrder.java      |  8 -------
 .../db/query/distribution/common/FillPolicy.java   |  5 +++++
 .../query/distribution/common/TraversalOrder.java  |  6 +++--
 .../distribution/operator/DeviceMergeOperator.java |  4 ++--
 .../query/distribution/operator/FillOperator.java  | 26 ++++++++++++++++++++++
 .../distribution/operator/FilterExecOperator.java  | 26 ++++++++++++++++++++++
 .../query/distribution/operator/LimitOperator.java | 24 ++++++++++++++++++++
 .../distribution/operator/OffsetOperator.java      | 24 ++++++++++++++++++++
 .../distribution/operator/SeriesScanOperator.java  |  7 +++---
 .../query/distribution/operator/SortOperator.java  | 23 +++++++++++++++++++
 .../distribution/operator/WithoutOperator.java     | 25 +++++++++++++++++++++
 11 files changed, 163 insertions(+), 15 deletions(-)

diff --git a/server/src/main/java/org/apache/iotdb/db/query/distribution/common/DeviceMergeOrder.java b/server/src/main/java/org/apache/iotdb/db/query/distribution/common/DeviceMergeOrder.java
deleted file mode 100644
index 986beac..0000000
--- a/server/src/main/java/org/apache/iotdb/db/query/distribution/common/DeviceMergeOrder.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package org.apache.iotdb.db.query.distribution.common;
-
-public enum DeviceMergeOrder {
-    TIMESTAMP_ASC,
-    TIMESTAMP_DESC,
-    DEVICE_NAME_ASC,
-    DEVICE_NAME_DESC,
-}
diff --git a/server/src/main/java/org/apache/iotdb/db/query/distribution/common/FillPolicy.java b/server/src/main/java/org/apache/iotdb/db/query/distribution/common/FillPolicy.java
new file mode 100644
index 0000000..ba59bad
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/query/distribution/common/FillPolicy.java
@@ -0,0 +1,5 @@
+package org.apache.iotdb.db.query.distribution.common;
+
+public enum FillPolicy {
+    PREVIOUS,
+}
diff --git a/server/src/main/java/org/apache/iotdb/db/query/distribution/common/TraversalOrder.java b/server/src/main/java/org/apache/iotdb/db/query/distribution/common/TraversalOrder.java
index 6b00372..3b1bc92 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/distribution/common/TraversalOrder.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/distribution/common/TraversalOrder.java
@@ -4,6 +4,8 @@ package org.apache.iotdb.db.query.distribution.common;
  * The traversal order for operators by timestamp
  */
 public enum TraversalOrder {
-    ASC,
-    DESC
+    TIMESTAMP_ASC,
+    TIMESTAMP_DESC,
+    DEVICE_NAME_ASC,
+    DEVICE_NAME_DESC,
 }
diff --git a/server/src/main/java/org/apache/iotdb/db/query/distribution/operator/DeviceMergeOperator.java b/server/src/main/java/org/apache/iotdb/db/query/distribution/operator/DeviceMergeOperator.java
index 16099ca..45e52e4 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/distribution/operator/DeviceMergeOperator.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/distribution/operator/DeviceMergeOperator.java
@@ -1,7 +1,7 @@
 package org.apache.iotdb.db.query.distribution.operator;
 
-import org.apache.iotdb.db.query.distribution.common.DeviceMergeOrder;
 import org.apache.iotdb.db.query.distribution.common.Tablet;
+import org.apache.iotdb.db.query.distribution.common.TraversalOrder;
 
 import java.util.List;
 import java.util.Map;
@@ -17,7 +17,7 @@ import java.util.Map;
  */
 public class DeviceMergeOperator extends ExecOperator<Tablet> {
     // The result output order that this operator
-    private DeviceMergeOrder mergeOrder;
+    private TraversalOrder mergeOrder;
 
     // Owned devices
     private List<String> ownedDeviceNameList;
diff --git a/server/src/main/java/org/apache/iotdb/db/query/distribution/operator/FillOperator.java b/server/src/main/java/org/apache/iotdb/db/query/distribution/operator/FillOperator.java
new file mode 100644
index 0000000..306c2b9
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/query/distribution/operator/FillOperator.java
@@ -0,0 +1,26 @@
+package org.apache.iotdb.db.query.distribution.operator;
+
+import org.apache.iotdb.db.query.distribution.common.FillPolicy;
+import org.apache.iotdb.db.query.distribution.common.Tablet;
+import org.apache.iotdb.db.query.distribution.common.WithoutPolicy;
+
+/**
+ * FillOperator is used to fill the empty field in one row.
+ *
+ * Children type: [All the operators whose result set is Tablet]
+ */
+public class FillOperator extends ExecOperator<Tablet> {
+
+    // The policy to discard the result from upstream operator
+    private FillPolicy fillPolicy;
+
+    @Override
+    public boolean hasNext() {
+        return false;
+    }
+
+    @Override
+    public Tablet getNextBatch() {
+        return null;
+    }
+}
diff --git a/server/src/main/java/org/apache/iotdb/db/query/distribution/operator/FilterExecOperator.java b/server/src/main/java/org/apache/iotdb/db/query/distribution/operator/FilterExecOperator.java
new file mode 100644
index 0000000..65d2b8e
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/query/distribution/operator/FilterExecOperator.java
@@ -0,0 +1,26 @@
+package org.apache.iotdb.db.query.distribution.operator;
+
+import org.apache.iotdb.db.qp.logical.crud.FilterOperator;
+import org.apache.iotdb.db.query.distribution.common.Tablet;
+
+/**
+ * (We use FilterExecOperator to distinguish itself from the FilterOperator used in single-node IoTDB)
+ * The FilterExecOperator is responsible to filter the RowRecord from Tablet.
+ *
+ * Children type: [All the operators whose result set is Tablet]
+ */
+public class FilterExecOperator extends ExecOperator<Tablet> {
+
+    // The filter
+    private FilterOperator rowFilter;
+
+    @Override
+    public boolean hasNext() {
+        return false;
+    }
+
+    @Override
+    public Tablet getNextBatch() {
+        return null;
+    }
+}
diff --git a/server/src/main/java/org/apache/iotdb/db/query/distribution/operator/LimitOperator.java b/server/src/main/java/org/apache/iotdb/db/query/distribution/operator/LimitOperator.java
new file mode 100644
index 0000000..332c878
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/query/distribution/operator/LimitOperator.java
@@ -0,0 +1,24 @@
+package org.apache.iotdb.db.query.distribution.operator;
+
+import org.apache.iotdb.db.query.distribution.common.Tablet;
+
+/**
+ * LimitOperator is used to select top n result. It uses the default order of upstream operators
+ *
+ * Children type: [All the operators whose result set is Tablet]
+ */
+public class LimitOperator extends ExecOperator<Tablet> {
+
+    // The limit count
+    private int limit;
+
+    @Override
+    public boolean hasNext() {
+        return false;
+    }
+
+    @Override
+    public Tablet getNextBatch() {
+        return null;
+    }
+}
diff --git a/server/src/main/java/org/apache/iotdb/db/query/distribution/operator/OffsetOperator.java b/server/src/main/java/org/apache/iotdb/db/query/distribution/operator/OffsetOperator.java
new file mode 100644
index 0000000..c8c0ec4
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/query/distribution/operator/OffsetOperator.java
@@ -0,0 +1,24 @@
+package org.apache.iotdb.db.query.distribution.operator;
+
+import org.apache.iotdb.db.query.distribution.common.Tablet;
+
+/**
+ * OffsetOperator is used to skip top n result from upstream operators. It uses the default order of upstream operators
+ *
+ * Children type: [All the operators whose result set is Tablet]
+ */
+public class OffsetOperator extends ExecOperator<Tablet> {
+
+    // The limit count
+    private int offset;
+
+    @Override
+    public boolean hasNext() {
+        return false;
+    }
+
+    @Override
+    public Tablet getNextBatch() {
+        return null;
+    }
+}
diff --git a/server/src/main/java/org/apache/iotdb/db/query/distribution/operator/SeriesScanOperator.java b/server/src/main/java/org/apache/iotdb/db/query/distribution/operator/SeriesScanOperator.java
index ebbc03d..11527a5 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/distribution/operator/SeriesScanOperator.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/distribution/operator/SeriesScanOperator.java
@@ -21,9 +21,10 @@ public class SeriesScanOperator extends ExecOperator<SeriesBatchData> {
     // The path of the target series which will be scanned.
     private Path seriesPath;
 
-    // The order to traverse the series by timestamp.
-    // The default order is ASC, which means "order by timestamp asc"
-    private TraversalOrder scanOrder = TraversalOrder.ASC;
+    // The order to traverse the data.
+    // Currently, we only support TIMESTAMP_ASC and TIMESTAMP_DESC here.
+    // The default order is TIMESTAMP_ASC, which means "order by timestamp asc"
+    private TraversalOrder scanOrder = TraversalOrder.TIMESTAMP_ASC;
 
     // Filter data in current series.
     private Filter filter;
diff --git a/server/src/main/java/org/apache/iotdb/db/query/distribution/operator/SortOperator.java b/server/src/main/java/org/apache/iotdb/db/query/distribution/operator/SortOperator.java
new file mode 100644
index 0000000..c1e2b0a
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/query/distribution/operator/SortOperator.java
@@ -0,0 +1,23 @@
+package org.apache.iotdb.db.query.distribution.operator;
+
+import org.apache.iotdb.db.query.distribution.common.Tablet;
+import org.apache.iotdb.db.query.distribution.common.TraversalOrder;
+
+/**
+ * In general, the parameter in sortOperator should be pushed down to the upstream operators.
+ * In our optimized logical query plan, the sortOperator should not appear.
+ */
+public class SortOperator extends ExecOperator<Tablet>{
+
+    private TraversalOrder sortOrder;
+
+    @Override
+    public boolean hasNext() {
+        return false;
+    }
+
+    @Override
+    public Tablet getNextBatch() {
+        return null;
+    }
+}
diff --git a/server/src/main/java/org/apache/iotdb/db/query/distribution/operator/WithoutOperator.java b/server/src/main/java/org/apache/iotdb/db/query/distribution/operator/WithoutOperator.java
new file mode 100644
index 0000000..75250b9
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/query/distribution/operator/WithoutOperator.java
@@ -0,0 +1,25 @@
+package org.apache.iotdb.db.query.distribution.operator;
+
+import org.apache.iotdb.db.query.distribution.common.Tablet;
+import org.apache.iotdb.db.query.distribution.common.WithoutPolicy;
+
+/**
+ * WithoutOperator is used to discard specific result from upstream operators.
+ *
+ * Children type: [All the operators whose result set is Tablet]
+ */
+public class WithoutOperator extends ExecOperator<Tablet> {
+
+    // The policy to discard the result from upstream operator
+    private WithoutPolicy discardPolicy;
+
+    @Override
+    public boolean hasNext() {
+        return false;
+    }
+
+    @Override
+    public Tablet getNextBatch() {
+        return null;
+    }
+}