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;
+ }
+}