This is an automated email from the ASF dual-hosted git repository. jackietien pushed a commit to branch groupbyfill in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git
commit cf31d9c0449bb962793ace31efa9355947520c99 Merge: d8bcffc d6ae1c3 Author: JackieTien97 <[email protected]> AuthorDate: Fri Feb 28 09:14:40 2020 +0800 resolve conflixts README.md | 2 +- client-py/src/client_example.py | 33 +-- .../SystemDesign/1-TsFile/3-Write.md | 8 +- .../4-StorageEngine/1-StorageEngine.md | 30 +-- .../4-StorageEngine/5-DataPartition.md | 86 +++++++ .../4-StorageEngine/6-DataManipulation.md | 96 ++++++++ .../SystemDesign/5-DataQuery/2-SeriesReader.md | 2 +- .../SystemDesign/7-Connector/3-Spark-TsFile.md | 101 ++++++++ .../SystemDesign/7-Connector/4-Spark-IOTDB.md | 89 +++++++ .../UserGuide/0-Get Started/1-QuickStart.md | 2 +- .../UserGuide/4-Client/6-Status Codes.md | 65 +++++ .../2-DML (Data Manipulation Language).md | 23 +- .../5-Operation Manual/4-SQL Reference.md | 25 +- docs/Documentation/SystemDesign/0-Content.md | 6 +- docs/Documentation/UserGuide/0-Content.md | 1 + .../UserGuide/0-Get Started/1-QuickStart.md | 9 +- .../UserGuide/4-Client/6-Status Codes.md | 66 +++++ .../2-DML (Data Manipulation Language).md | 19 +- .../5-Operation Manual/4-SQL Reference.md | 12 +- .../main/java/org/apache/iotdb/JDBCExample.java | 2 +- .../org/apache/iotdb/jdbc/IoTDBConnection.java | 27 ++- .../org/apache/iotdb/jdbc/IoTDBResultMetadata.java | 7 +- .../apache/iotdb/jdbc/IoTDBResultMetadataTest.java | 30 ++- .../org/apache/iotdb/db/qp/strategy/SqlBase.g4 | 33 +-- .../java/org/apache/iotdb/db/conf/IoTDBConfig.java | 12 +- .../org/apache/iotdb/db/conf/IoTDBConfigCheck.java | 33 ++- .../apache/iotdb/db/engine/cache/ChunkCache.java | 37 ++- .../iotdb/db/engine/memtable/AbstractMemTable.java | 2 +- .../engine/storagegroup/StorageGroupProcessor.java | 37 ++- .../org/apache/iotdb/db/metadata/MManager.java | 2 +- .../java/org/apache/iotdb/db/metadata/MTree.java | 64 ++++- .../apache/iotdb/db/qp/executor/PlanExecutor.java | 10 +- .../iotdb/db/qp/strategy/PhysicalGenerator.java | 13 +- .../db/query/aggregation/AggregateResult.java | 95 +++++++- .../db/query/aggregation/AggregationType.java | 100 ++++++++ .../db/query/aggregation/impl/AvgAggrResult.java | 39 ++- .../db/query/aggregation/impl/CountAggrResult.java | 19 +- .../aggregation/impl/FirstValueAggrResult.java | 38 ++- .../aggregation/impl/LastValueAggrResult.java | 38 ++- .../query/aggregation/impl/MaxTimeAggrResult.java | 24 +- .../query/aggregation/impl/MaxValueAggrResult.java | 20 +- .../query/aggregation/impl/MinTimeAggrResult.java | 25 +- .../query/aggregation/impl/MinValueAggrResult.java | 21 +- .../db/query/aggregation/impl/SumAggrResult.java | 32 ++- .../iotdb/db/query/control/FileReaderManager.java | 34 ++- .../iotdb/db/query/control/QueryFileManager.java | 17 +- .../dataset/RawQueryDataSetWithoutValueFilter.java | 13 +- .../groupby/GroupByWithValueFilterDataSet.java | 14 +- .../groupby/GroupByWithoutValueFilterDataSet.java | 6 +- .../db/query/executor/AggregationExecutor.java | 8 +- ...ultFactory.java => AggregateResultFactory.java} | 42 +++- .../iotdb/db/query/reader/series/SeriesReader.java | 8 +- .../reader/universal/PriorityMergeReader.java | 26 +- .../org/apache/iotdb/db/service/TSServiceImpl.java | 19 +- .../java/org/apache/iotdb/db/utils/MemUtils.java | 21 +- .../integration/IOTDBGroupByInnerIntervalIT.java | 4 +- .../iotdb/db/integration/IoTDBAggregationIT.java | 8 +- .../integration/IoTDBAggregationSmallDataIT.java | 2 +- .../iotdb/db/integration/IoTDBAlignByDeviceIT.java | 4 +- .../integration/IoTDBLoadExternalTsfileTest.java | 2 +- .../iotdb/db/integration/IoTDBMultiSeriesIT.java | 4 +- .../iotdb/db/integration/IoTDBSeriesReaderIT.java | 4 + .../iotdb/db/integration/IoTDBSimpleQueryTest.java | 59 +++++ .../iotdb/db/metadata/MManagerAdvancedTest.java | 14 +- .../iotdb/db/metadata/MManagerBasicTest.java | 57 ++++- .../java/org/apache/iotdb/db/qp/PlannerTest.java | 16 +- .../db/query/aggregation/AggregateResultTest.java | 265 +++++++++++++++++++++ .../iotdb/db/query/component/SimpleFileWriter.java | 54 ----- .../reader/series/SeriesAggregateReaderTest.java | 4 +- server/src/test/resources/logback.xml | 9 +- .../main/java/org/apache/iotdb/rpc/RpcUtils.java | 2 +- .../java/org/apache/iotdb/rpc/TSStatusCode.java | 4 +- service-rpc/src/main/thrift/rpc.thrift | 3 +- .../java/org/apache/iotdb/session/Session.java | 14 +- .../org/apache/iotdb/spark/db/Converter.scala | 37 +-- .../org/apache/iotdb/spark/db/DefaultSource.scala | 37 +-- .../org/apache/iotdb/spark/db/IoTDBOptions.scala | 37 +-- .../scala/org/apache/iotdb/spark/db/IoTDBRDD.scala | 37 +-- .../org/apache/iotdb/spark/db/IoTDBRelation.scala | 37 +-- .../org/apache/iotdb/spark/db/Transformer.scala | 37 +-- .../scala/org/apache/iotdb/spark/db/package.scala | 37 +-- .../org/apache/iotdb/spark/db/IoTDBTest.scala | 37 +-- .../org/apache/iotdb/spark/tsfile/Converter.scala | 37 +-- .../apache/iotdb/spark/tsfile/DefaultSource.scala | 36 +-- .../iotdb/spark/tsfile/NarrowConverter.scala | 37 +-- .../spark/tsfile/NarrowTsFileOutputWriter.scala | 37 +-- .../apache/iotdb/spark/tsfile/Transformer.scala | 37 +-- .../iotdb/spark/tsfile/TsFileWriterFactory.scala | 36 +-- .../apache/iotdb/spark/tsfile/WideConverter.scala | 37 +-- .../spark/tsfile/WideTsFileOutputWriter.scala | 37 +-- .../org/apache/iotdb/spark/tsfile/package.scala | 36 +-- .../apache/iotdb/spark/tsfile/ConverterTest.scala | 37 +-- .../org/apache/iotdb/spark/tsfile/TSFileSuit.scala | 37 +-- .../iotdb/tsfile/read/TsFileSequenceReader.java | 27 +-- .../tsfile/read/query/dataset/EmptyDataSet.java | 39 +++ .../read/query/timegenerator/node/AndNode.java | 14 +- .../read/query/timegenerator/node/LeafNode.java | 11 +- .../tsfile/read/reader/DefaultTsFileInput.java | 2 +- .../iotdb/tsfile/write/chunk/ChunkWriterImpl.java | 14 +- .../apache/iotdb/tsfile/write/page/PageWriter.java | 12 +- .../tsfile/read/query/timegenerator/NodeTest.java | 66 ++--- .../iotdb/tsfile/read/reader/FakedBatchReader.java | 55 +++++ 102 files changed, 2291 insertions(+), 821 deletions(-) diff --cc docs/Documentation-CHN/UserGuide/5-Operation Manual/4-SQL Reference.md index 2926043,7e07a88..34766cd --- a/docs/Documentation-CHN/UserGuide/5-Operation Manual/4-SQL Reference.md +++ b/docs/Documentation-CHN/UserGuide/5-Operation Manual/4-SQL Reference.md @@@ -305,31 -307,7 +307,31 @@@ Note: the statement needs to satisfy th Note: Integer in <TimeUnit> needs to be greater than 0 ``` +* Group By Fill语句 + +``` +SELECT <SelectClause> FROM <FromClause> WHERE <WhereClause> GROUP BY <GroupByClause> (FILL <GROUPBYFillClause>)? +GroupByClause : LPAREN <TimeInterval> COMMA <TimeUnit> RPAREN +GROUPBYFillClause : LPAREN <TypeClause> RPAREN +TypeClause : <AllClause> | <Int32Clause> | <Int64Clause> | <FloatClause> | <DoubleClause> | <BoolClause> | <TextClause> +AllClause: ALL LBRACKET (<PreviousUntilLastClause> | <PreviousClause>) RBRACKET +Int32Clause: INT32 LBRACKET (<PreviousUntilLastClause> | <PreviousClause>) RBRACKET +Int64Clause: INT64 LBRACKET (<PreviousUntilLastClause> | <PreviousClause>) RBRACKET +FloatClause: FLOAT LBRACKET (<PreviousUntilLastClause> | <PreviousClause>) RBRACKET +DoubleClause: DOUBLE LBRACKET (<PreviousUntilLastClause> | <PreviousClause>) RBRACKET +BoolClause: BOOLEAN LBRACKET (<PreviousUntilLastClause> | <PreviousClause>) RBRACKET +TextClause: TEXT LBRACKET (<PreviousUntilLastClause> | <PreviousClause>) RBRACKET +PreviousClause : PREVIOUS +PreviousUntilLastClause : PREVIOUSUNTILLAST +Eg: SELECT last_value(temperature) FROM root.ln.wf01.wt01 GROUP BY([20, 100), 5m) FILL (float[PREVIOUS]) +Eg: SELECT last_value(power) FROM root.ln.wf01.wt01 GROUP BY([20, 100), 5m) FILL (int32[PREVIOUSUNTILLAST]) +Eg: SELECT last_value(temperature), last_value(power) FROM root.ln.wf01.wt01 GROUP BY([20, 100), 5m) FILL (ALL[PREVIOUS]) +Note: In group by fill, sliding step is not supported in group by clause +Note: Now, only last_value aggregation function is supported in group by fill. +Note: Linear fill is not supported in group by fill. +``` + - * Limit语句 + * Limit & SLimit 语句 ``` SELECT <SelectClause> FROM <FromClause> [WHERE <WhereClause>] [<LIMITClause>] [<SLIMITClause>] diff --cc server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java index 30733fd,01c72a7..6b3eb77 --- a/server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +++ b/server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java @@@ -219,9 -229,9 +220,13 @@@ public class PlanExecutor implements IP if (queryPlan instanceof AlignByDevicePlan) { queryDataSet = new AlignByDeviceDataSet((AlignByDevicePlan) queryPlan, context, queryRouter); } else { - if (queryPlan instanceof GroupByFillPlan) { ++ + if (queryPlan.getPaths() == null || queryPlan.getPaths().isEmpty()) { + // no time series are selected, return EmptyDataSet + return new EmptyDataSet(); ++ } else if (queryPlan instanceof GroupByFillPlan) { + GroupByFillPlan groupByFillPlan = (GroupByFillPlan) queryPlan; + return queryRouter.groupByFill(groupByFillPlan, context); } else if (queryPlan instanceof GroupByPlan) { GroupByPlan groupByPlan = (GroupByPlan) queryPlan; return queryRouter.groupBy(groupByPlan, context);
