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 <[email protected]> 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; + } +}
