This is an automated email from the ASF dual-hosted git repository. haonan pushed a commit to branch pr2956 in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 4d031f9084f5244d237e06c200d7b9bd7398f392 Merge: e302aba 42a04ac Author: HTHou <[email protected]> AuthorDate: Thu Apr 22 18:35:49 2021 +0800 merge master .github/workflows/main-unix.yml | 2 + antlr/pom.xml | 2 +- .../antlr4/org/apache/iotdb/db/qp/sql/SqlBase.g4 | 22 +- cli/pom.xml | 4 +- client-cpp/pom.xml | 2 +- client-cpp/src/main/Session.h | 9 +- client-py/README.md | 2 +- client-py/iotdb/utils/SessionDataSet.py | 10 +- client-py/pom.xml | 2 +- client-py/release.sh | 3 + client-py/tests/test_dataframe.py | 21 + cluster/pom.xml | 14 +- .../resources/conf/iotdb-cluster.properties | 62 +- cluster/src/assembly/resources/sbin/add-node.sh | 25 +- .../java/org/apache/iotdb/cluster/ClientMain.java | 5 +- .../java/org/apache/iotdb/cluster/ClusterMain.java | 4 +- .../cluster/client/sync/SyncClientAdaptor.java | 6 +- .../apache/iotdb/cluster/config/ClusterConfig.java | 14 +- .../iotdb/cluster/config/ClusterDescriptor.java | 5 - .../iotdb/cluster/coordinator/Coordinator.java | 76 +- .../iotdb/cluster/log/applier/BaseApplier.java | 4 +- .../iotdb/cluster/log/catchup/CatchUpTask.java | 48 +- .../iotdb/cluster/log/catchup/LogCatchUpTask.java | 4 +- .../cluster/log/manage/CommittedEntryManager.java | 12 +- .../serializable/SyncLogDequeSerializer.java | 4 +- .../apache/iotdb/cluster/metadata/CMManager.java | 173 ++++- .../apache/iotdb/cluster/metadata/MetaPuller.java | 21 +- .../cluster/partition/slot/SlotPartitionTable.java | 5 +- .../cluster/query/ClusterPhysicalGenerator.java | 7 + .../iotdb/cluster/query/ClusterPlanRouter.java | 11 +- .../iotdb/cluster/query/LocalQueryExecutor.java | 20 +- .../cluster/query/reader/ClusterReaderFactory.java | 16 +- .../apache/iotdb/cluster/server/ClientServer.java | 1 + .../iotdb/cluster/server/DataClusterServer.java | 6 +- .../iotdb/cluster/server/MetaClusterServer.java | 6 +- .../caller/PullMeasurementSchemaHandler.java | 13 +- .../cluster/server/member/DataGroupMember.java | 41 +- .../cluster/server/member/MetaGroupMember.java | 13 - .../iotdb/cluster/server/member/RaftMember.java | 108 ++- .../cluster/server/service/BaseAsyncService.java | 19 +- .../cluster/server/service/BaseSyncService.java | 23 +- .../apache/iotdb/cluster/utils/PartitionUtils.java | 8 +- .../apache/iotdb/cluster/utils/StatusUtils.java | 3 +- .../cluster/client/async/AsyncClientPoolTest.java | 41 +- .../cluster/client/async/AsyncDataClientTest.java | 18 + .../client/async/AsyncDataHeartbeatClientTest.java | 18 + .../cluster/client/async/AsyncMetaClientTest.java | 18 + .../client/async/AsyncMetaHeartbeatClientTest.java | 18 + .../cluster/client/sync/SyncClientAdaptorTest.java | 7 +- .../org/apache/iotdb/cluster/common/IoTDBTest.java | 6 +- .../org/apache/iotdb/cluster/common/TestUtils.java | 9 +- .../iotdb/cluster/log/LogDispatcherTest.java | 10 +- .../cluster/log/snapshot/DataSnapshotTest.java | 8 + .../cluster/partition/SlotPartitionTableTest.java | 2 +- .../query/ClusterAggregateExecutorTest.java | 4 +- .../query/ClusterDataQueryExecutorTest.java | 13 +- .../cluster/query/ClusterFillExecutorTest.java | 4 +- .../cluster/query/ClusterPlanExecutorTest.java | 2 +- .../cluster/query/ClusterQueryRouterTest.java | 12 +- .../ClusterGroupByNoVFilterDataSetTest.java | 2 +- .../groupby/ClusterGroupByVFilterDataSetTest.java | 2 +- .../caller/PullMeasurementSchemaHandlerTest.java | 12 +- .../cluster/server/member/DataGroupMemberTest.java | 12 +- .../cluster/server/member/MetaGroupMemberTest.java | 14 +- .../cluster/server/member/RaftMemberTest.java | 9 +- cluster/src/test/resources/logback.xml | 2 +- .../resources/node1conf/iotdb-cluster.properties | 2 +- .../resources/node2conf/iotdb-cluster.properties | 2 +- .../resources/node3conf/iotdb-cluster.properties | 2 +- code-coverage/pom.xml | 2 +- compile-tools/pom.xml | 2 +- compile-tools/thrift/pom.xml | 2 +- cross-tests/pom.xml | 2 +- distribution/pom.xml | 2 +- docker/ReadMe.md | 50 +- .../src/main/Dockerfile-0.11.3 | 40 +- docker/src/main/Dockerfile-0.12.0-cluster | 53 ++ docker/src/main/Dockerfile-0.12.0-node | 45 ++ docs/Development/VoteRelease.md | 8 +- docs/Download/README.md | 57 +- docs/SystemDesign/TsFile/Format.md | 12 +- ...-Languages.md => Programming-Cpp-Native-API.md} | 111 ++- docs/UserGuide/API/Programming-Go-Native-API.md | 65 ++ docs/UserGuide/API/Programming-JDBC.md | 12 +- ...ative-API.md => Programming-Java-Native-API.md} | 167 +++-- .../UserGuide/API/Programming-Python-Native-API.md | 102 ++- docs/UserGuide/API/Programming-TsFile-API.md | 163 +++-- docs/UserGuide/Advanced-Features/Triggers.md | 781 ++++++++++++++++++++ .../UDF-User-Defined-Function.md | 8 +- docs/UserGuide/Appendix/SQL-Reference.md | 30 +- docs/UserGuide/Cluster/Cluster-Setup-Example.md | 47 ++ docs/UserGuide/Cluster/Cluster-Setup.md | 11 +- .../Data-Concept/Data-Model-and-Terminology.md | 24 +- .../UserGuide/Ecosystem Integration/Hive TsFile.md | 8 +- .../Ecosystem Integration/MapReduce TsFile.md | 2 +- .../UserGuide/Ecosystem Integration/Spark IoTDB.md | 8 +- .../Ecosystem Integration/Spark TsFile.md | 2 +- .../Ecosystem Integration/Zeppelin-IoTDB.md | 2 +- .../DDL-Data-Definition-Language.md | 42 +- .../DML-Data-Manipulation-Language.md | 11 +- docs/UserGuide/QuickStart/WayToGetIoTDB.md | 2 +- docs/UserGuide/UDF/Triggers.md | 100 --- docs/zh/Development/VoteRelease.md | 8 +- docs/zh/Download/README.md | 55 +- docs/zh/SystemDesign/TsFile/Format.md | 12 +- ...-Languages.md => Programming-Cpp-Native-API.md} | 122 +--- docs/zh/UserGuide/API/Programming-Go-Native-API.md | 65 ++ docs/zh/UserGuide/API/Programming-JDBC.md | 18 +- ...ative-API.md => Programming-Java-Native-API.md} | 128 +++- .../UserGuide/API/Programming-Python-Native-API.md | 220 ++++++ docs/zh/UserGuide/API/Programming-TsFile-API.md | 160 +++-- docs/zh/UserGuide/Advanced-Features/Triggers.md | 799 +++++++++++++++++++++ .../UDF-User-Defined-Function.md | 14 +- docs/zh/UserGuide/Appendix/SQL-Reference.md | 30 +- docs/zh/UserGuide/Cluster/Cluster-Setup-Example.md | 46 ++ docs/zh/UserGuide/Cluster/Cluster-Setup.md | 11 +- .../Data-Concept/Data-Model-and-Terminology.md | 24 +- .../UserGuide/Ecosystem Integration/Hive TsFile.md | 8 +- .../Ecosystem Integration/MapReduce TsFile.md | 2 +- .../UserGuide/Ecosystem Integration/Spark IoTDB.md | 8 +- .../Ecosystem Integration/Spark TsFile.md | 2 +- .../Ecosystem Integration/Zeppelin-IoTDB.md | 2 +- .../DDL-Data-Definition-Language.md | 39 + .../DML-Data-Manipulation-Language.md | 10 +- docs/zh/UserGuide/QuickStart/WayToGetIoTDB.md | 2 +- docs/zh/UserGuide/UDF/Triggers.md | 100 --- example/client-cpp-example/pom.xml | 2 +- example/flink/pom.xml | 2 +- example/hadoop/pom.xml | 6 +- .../apache/iotdb/hadoop/tsfile/TsFileHelper.java | 5 +- example/jdbc/pom.xml | 2 +- example/kafka/pom.xml | 4 +- example/kafka/readme.md | 4 +- example/mqtt/pom.xml | 2 +- example/pom.xml | 3 +- example/pulsar/pom.xml | 2 +- example/rocketmq/pom.xml | 2 +- example/rocketmq/readme.md | 4 +- example/session/pom.xml | 2 +- .../org/apache/iotdb/DataMigrationExample.java | 3 +- .../main/java/org/apache/iotdb/SessionExample.java | 6 +- .../org/apache/iotdb/VectorSessionExample.java | 337 +++++++++ example/{udf => trigger}/pom.xml | 6 +- .../org/apache/iotdb/trigger/TriggerExample.java | 127 ++++ example/tsfile/pom.xml | 2 +- example/tsfile/readme.md | 2 +- .../apache/iotdb/tsfile/TsFileWriteWithTablet.java | 5 +- example/udf/pom.xml | 4 +- flink-iotdb-connector/pom.xml | 2 +- flink-tsfile-connector/pom.xml | 2 +- grafana/pom.xml | 2 +- hadoop/README.md | 2 +- hadoop/pom.xml | 4 +- .../iotdb/hadoop/tsfile/TsFileTestHelper.java | 3 +- hive-connector/pom.xml | 6 +- .../org/apache/iotdb/hive/TsFileTestHelper.java | 3 +- jdbc/README.md | 4 +- jdbc/pom.xml | 2 +- pom.xml | 5 +- server/pom.xml | 12 +- .../resources/conf/iotdb-engine.properties | 300 ++++---- .../org/apache/iotdb/db/auth/AuthorityChecker.java | 26 +- .../org/apache/iotdb/db/concurrent/ThreadName.java | 5 +- .../java/org/apache/iotdb/db/conf/IoTDBConfig.java | 53 ++ .../org/apache/iotdb/db/conf/IoTDBConstant.java | 5 + .../org/apache/iotdb/db/conf/IoTDBDescriptor.java | 32 + .../org/apache/iotdb/db/engine/StorageEngine.java | 9 +- .../db/engine/cache/CacheHitRatioMonitor.java | 28 + .../engine/cache/CacheHitRatioMonitorMXBean.java | 10 + .../db/engine/cache/TimeSeriesMetadataCache.java | 5 +- .../compaction/CompactionMergeTaskPoolManager.java | 38 +- .../db/engine/compaction/TsFileManagement.java | 22 +- .../level/LevelCompactionTsFileManagement.java | 277 +++---- .../no/NoCompactionTsFileManagement.java | 132 ++-- .../engine/compaction/utils/CompactionUtils.java | 25 +- .../iotdb/db/engine/flush/MemTableFlushTask.java | 101 ++- .../iotdb/db/engine/flush/NotifyFlushMemTable.java | 4 +- .../iotdb/db/engine/memtable/AbstractMemTable.java | 190 +++-- .../apache/iotdb/db/engine/memtable/IMemTable.java | 15 +- .../db/engine/memtable/IWritableMemChunk.java | 43 +- .../db/engine/memtable/PrimitiveMemTable.java | 9 +- .../iotdb/db/engine/memtable/WritableMemChunk.java | 87 ++- .../db/engine/merge/manage/MergeResource.java | 12 +- .../iotdb/db/engine/merge/task/MergeFileTask.java | 17 +- .../db/engine/merge/task/MergeMultiChunkTask.java | 6 +- .../iotdb/db/engine/merge/task/MergeTask.java | 5 +- .../db/engine/querycontext/QueryDataSource.java | 12 +- .../db/engine/querycontext/ReadOnlyMemChunk.java | 106 ++- .../engine/storagegroup/StorageGroupProcessor.java | 190 ++--- .../db/engine/storagegroup/TsFileProcessor.java | 164 +++-- .../db/engine/storagegroup/TsFileResource.java | 141 +++- .../iotdb/db/engine/trigger/api/Trigger.java | 116 +++ .../db/engine/trigger/api/TriggerAttributes.java | 98 +++ .../db/engine/trigger/executor/TriggerEngine.java | 114 +++ .../trigger/{api => executor}/TriggerEvent.java | 26 +- .../engine/trigger/executor/TriggerExecutor.java | 242 +++++++ .../engine/trigger/service/TriggerClassLoader.java | 55 ++ .../trigger/service/TriggerClassLoaderManager.java | 94 +++ .../trigger/service/TriggerLogReader.java} | 30 +- .../engine/trigger/service/TriggerLogWriter.java | 68 ++ .../service/TriggerRegistrationInformation.java} | 49 +- .../service/TriggerRegistrationService.java | 447 ++++++++++++ .../TriggerExecutionException.java} | 17 +- .../TriggerManagementException.java} | 17 +- ...eption.java => AlignedTimeseriesException.java} | 19 +- .../metadata/DuplicatedTemplateException.java} | 20 +- .../metadata/StorageGroupNotSetException.java | 4 + .../metadata/UndefinedTemplateException.java} | 20 +- .../apache/iotdb/db/metadata/MLogTxtWriter.java | 36 +- .../org/apache/iotdb/db/metadata/MManager.java | 637 ++++++++++++++-- .../java/org/apache/iotdb/db/metadata/MTree.java | 389 ++++++++-- .../apache/iotdb/db/metadata/MeasurementMeta.java | 14 +- .../org/apache/iotdb/db/metadata/MetaUtils.java | 24 + .../iotdb/db/metadata/MetadataOperationType.java | 2 + .../org/apache/iotdb/db/metadata/PartialPath.java | 6 +- .../iotdb/db/metadata/VectorPartialPath.java | 68 ++ .../iotdb/db/metadata/logfile/MLogWriter.java | 38 +- .../org/apache/iotdb/db/metadata/mnode/MNode.java | 94 +++ .../iotdb/db/metadata/mnode/MeasurementMNode.java | 31 +- .../iotdb/db/metadata/mnode/StorageGroupMNode.java | 26 +- .../iotdb/db/metadata/template/Template.java | 170 +++++ .../apache/iotdb/db/qp/executor/PlanExecutor.java | 189 +++-- .../org/apache/iotdb/db/qp/logical/Operator.java | 17 +- .../db/qp/logical/sys/CreateTriggerOperator.java | 2 +- .../db/qp/logical/sys/ShowTriggersOperator.java | 12 - .../apache/iotdb/db/qp/physical/PhysicalPlan.java | 84 ++- .../iotdb/db/qp/physical/crud/AggregationPlan.java | 5 + .../db/qp/physical/crud/CreateTemplatePlan.java | 240 +++++++ .../iotdb/db/qp/physical/crud/FillQueryPlan.java | 5 + .../iotdb/db/qp/physical/crud/GroupByTimePlan.java | 2 + .../db/qp/physical/crud/InsertMultiTabletPlan.java | 9 + .../iotdb/db/qp/physical/crud/InsertRowPlan.java | 110 +-- .../physical/crud/InsertRowsOfOneDevicePlan.java | 9 + .../iotdb/db/qp/physical/crud/InsertRowsPlan.java | 10 + .../db/qp/physical/crud/InsertTabletPlan.java | 94 ++- .../iotdb/db/qp/physical/crud/LastQueryPlan.java | 5 + .../iotdb/db/qp/physical/crud/QueryIndexPlan.java | 5 + .../iotdb/db/qp/physical/crud/QueryPlan.java | 14 + .../db/qp/physical/crud/RawDataQueryPlan.java | 63 +- .../db/qp/physical/crud/SetDeviceTemplatePlan.java | 94 +++ .../apache/iotdb/db/qp/physical/crud/UDTFPlan.java | 5 + .../qp/physical/sys/AutoCreateDeviceMNodePlan.java | 87 +++ .../physical/sys/CreateAlignedTimeSeriesPlan.java | 259 +++++++ .../qp/physical/sys/CreateMultiTimeSeriesPlan.java | 7 +- .../db/qp/physical/sys/CreateTriggerPlan.java | 96 ++- .../iotdb/db/qp/physical/sys/DropTriggerPlan.java | 31 +- .../db/qp/physical/sys/MeasurementMNodePlan.java | 9 +- .../physical/sys/SetUsingDeviceTemplatePlan.java | 83 +++ .../iotdb/db/qp/physical/sys/ShowTriggersPlan.java | 10 +- .../iotdb/db/qp/physical/sys/StartTriggerPlan.java | 31 +- .../iotdb/db/qp/physical/sys/StopTriggerPlan.java | 31 +- .../db/qp/physical/sys/StorageGroupMNodePlan.java | 36 +- .../apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java | 170 +---- .../iotdb/db/qp/strategy/PhysicalGenerator.java | 92 ++- .../iotdb/db/query/context/QueryContext.java | 4 +- .../db/query/dataset/AlignByDeviceDataSet.java | 25 +- .../dataset/RawQueryDataSetWithValueFilter.java | 8 +- .../dataset/RawQueryDataSetWithoutValueFilter.java | 143 +++- .../iotdb/db/query/executor/QueryRouter.java | 10 + .../db/query/executor/fill/LastPointReader.java | 34 +- .../iotdb/db/query/reader/chunk/MemPageReader.java | 6 +- .../chunk/metadata/DiskChunkMetadataLoader.java | 17 +- .../chunk/metadata/MemChunkMetadataLoader.java | 15 +- .../query/reader/series/SeriesAggregateReader.java | 2 +- .../reader/series/SeriesRawDataBatchReader.java | 4 +- .../iotdb/db/query/reader/series/SeriesReader.java | 129 ++-- .../reader/series/SeriesReaderByTimestamp.java | 4 +- .../query/reader/series/SeriesReaderFactory.java | 94 +++ .../db/query/reader/series/VectorSeriesReader.java | 144 ++++ .../query/timegenerator/ServerTimeGenerator.java | 7 + .../row/ElasticSerializableRowRecordList.java | 13 +- .../iotdb/db/rescon/PrimitiveArrayManager.java | 7 +- .../org/apache/iotdb/db/rescon/SystemInfo.java | 16 + .../apache/iotdb/db/rescon/TVListAllocator.java | 15 +- .../java/org/apache/iotdb/db/service/IoTDB.java | 2 + .../org/apache/iotdb/db/service/ServiceType.java | 4 +- .../org/apache/iotdb/db/service/TSServiceImpl.java | 148 +++- .../api/Configuration.java} | 17 +- .../api/TriggerEvent.java => sink/api/Event.java} | 17 +- .../TriggerEvent.java => sink/api/Handler.java} | 19 +- .../exception/SinkException.java} | 16 +- .../local/LocalIoTDBConfiguration.java} | 35 +- .../local/LocalIoTDBEvent.java} | 22 +- .../iotdb/db/sink/local/LocalIoTDBHandler.java | 104 +++ .../iotdb/db/sink/mqtt/MQTTConfiguration.java | 74 ++ .../org/apache/iotdb/db/sink/mqtt/MQTTEvent.java | 51 +- .../org/apache/iotdb/db/sink/mqtt/MQTTHandler.java | 85 +++ .../apache/iotdb/db/tools/TsFileRewriteTool.java | 39 +- .../org/apache/iotdb/db/tools/mlog/MLogParser.java | 4 + .../db/tools/upgrade/TsFileOnlineUpgradeTool.java | 15 +- .../org/apache/iotdb/db/utils/CommonUtils.java | 3 + .../org/apache/iotdb/db/utils/FileLoaderUtils.java | 36 +- .../java/org/apache/iotdb/db/utils/MemUtils.java | 119 +-- .../java/org/apache/iotdb/db/utils/MergeUtils.java | 27 +- .../apache/iotdb/db/utils/QueryDataSetUtils.java | 19 + .../java/org/apache/iotdb/db/utils/QueryUtils.java | 8 +- .../org/apache/iotdb/db/utils/SchemaUtils.java | 4 +- .../org/apache/iotdb/db/utils/SerializeUtils.java | 74 ++ .../apache/iotdb/db/utils/TypeInferenceUtils.java | 2 + .../iotdb/db/utils/datastructure/TVList.java | 59 +- .../iotdb/db/utils/datastructure/VectorTVList.java | 653 +++++++++++++++++ .../windowing/api/Evaluator.java} | 18 +- .../iotdb/db/utils/windowing/api/Window.java | 70 ++ .../windowing/configuration/Configuration.java} | 21 +- .../SlidingSizeWindowConfiguration.java | 61 ++ .../SlidingTimeWindowConfiguration.java | 61 ++ .../windowing/exception/WindowingException.java} | 16 +- .../SlidingSizeWindowEvaluationHandler.java | 58 ++ .../SlidingTimeWindowEvaluationHandler.java | 78 ++ .../handler/SlidingWindowEvaluationHandler.java | 124 ++++ .../windowing/runtime/WindowEvaluationTask.java} | 32 +- .../runtime/WindowEvaluationTaskPoolManager.java | 99 +++ .../utils/windowing/window/EvictableBatchList.java | 173 +++++ .../db/utils/windowing/window/WindowImpl.java | 204 ++++++ .../iotdb/db/writelog/recover/LogReplayer.java | 27 +- .../apache/iotdb/db/auth/AuthorityCheckerTest.java | 21 +- .../db/engine/compaction/CompactionChunkTest.java | 8 +- .../compaction/LevelCompactionCacheTest.java | 2 +- .../engine/compaction/LevelCompactionLogTest.java | 2 +- .../compaction/LevelCompactionMergeTest.java | 75 +- .../engine/compaction/LevelCompactionModsTest.java | 45 +- .../compaction/LevelCompactionMoreDataTest.java | 2 +- .../LevelCompactionTsFileManagementTest.java | 69 ++ .../NoCompactionTsFileManagementTest.java | 71 +- .../db/engine/memtable/MemTableFlushTaskTest.java | 57 ++ .../db/engine/memtable/MemTableTestUtils.java | 81 ++- .../db/engine/memtable/MemtableBenchmark.java | 1 - .../db/engine/memtable/PrimitiveMemTableTest.java | 130 +++- .../db/engine/modification/DeletionQueryTest.java | 10 +- .../storagegroup/StorageGroupProcessorTest.java | 56 +- .../iotdb/db/engine/storagegroup/TTLTest.java | 18 +- .../engine/storagegroup/TsFileProcessorTest.java | 72 +- .../db/engine/trigger/example/Accumulator.java | 95 +++ .../iotdb/db/engine/trigger/example/Counter.java | 96 +++ .../iotdb/db/integration/IOTDBGroupByIT.java | 19 + .../db/integration/IOTDBInsertAlignedValuesIT.java | 149 ++++ .../apache/iotdb/db/integration/IOTDBInsertIT.java | 2 +- .../iotdb/db/integration/IoTDBCompressTypeIT.java | 5 - .../iotdb/db/integration/IoTDBDeletionIT.java | 12 +- .../db/integration/IoTDBEngineTimeGeneratorIT.java | 6 +- .../db/integration/IoTDBFlushQueryMergeIT.java | 4 +- .../iotdb/db/integration/IoTDBGroupByFillIT.java | 97 ++- .../db/integration/IoTDBSequenceDataQueryIT.java | 6 +- .../iotdb/db/integration/IoTDBSeriesReaderIT.java | 8 +- .../iotdb/db/integration/IoTDBSimpleQueryIT.java | 4 + .../apache/iotdb/db/integration/IoTDBTagIT.java | 40 +- .../db/integration/IoTDBTriggerExecutionIT.java | 553 ++++++++++++++ .../db/integration/IoTDBTriggerManagementIT.java | 500 +++++++++++++ .../apache/iotdb/db/integration/IoTDBTtlIT.java | 2 +- .../aggregation/IoTDBAggregationByLevelIT.java | 21 + .../db/integration/auth/IoTDBAuthorizationIT.java | 37 + .../iotdb/db/metadata/MManagerBasicTest.java | 535 +++++++++++++- .../iotdb/db/metadata/MManagerImproveTest.java | 17 +- .../iotdb/db/qp/physical/InsertRowPlanTest.java | 246 +++++++ .../iotdb/db/qp/physical/InsertTabletPlanTest.java | 264 +++++++ .../db/qp/physical/PhysicalPlanSerializeTest.java | 44 ++ .../iotdb/db/qp/physical/PhysicalPlanTest.java | 22 +- .../reader/series/SeriesAggregateReaderTest.java | 6 +- .../reader/series/SeriesReaderByTimestampTest.java | 6 +- .../query/reader/series/SeriesReaderTestUtil.java | 3 +- .../apache/iotdb/db/sink/LocalIoTDBSinkTest.java | 217 ++++++ .../org/apache/iotdb/db/sink/MQTTSinkTest.java | 204 ++++++ .../apache/iotdb/db/utils/EnvironmentUtils.java | 12 +- .../org/apache/iotdb/db/utils/MemUtilsTest.java | 2 +- .../db/utils/datastructure/VectorTVListTest.java | 143 ++++ .../SlidingSizeWindowEvaluationHandlerTest.java | 184 +++++ .../SlidingTimeWindowEvaluationHandlerTest.java | 226 ++++++ .../iotdb/db/writelog/recover/LogReplayerTest.java | 22 +- .../db/writelog/recover/SeqTsFileRecoverTest.java | 3 +- .../writelog/recover/UnseqTsFileRecoverTest.java | 5 +- server/src/test/resources/iotdb-engine.properties | 36 +- service-rpc/pom.xml | 2 +- .../java/org/apache/iotdb/rpc/TSStatusCode.java | 4 + session/pom.xml | 2 +- .../java/org/apache/iotdb/session/Session.java | 174 ++++- .../apache/iotdb/session/SessionConnection.java | 60 ++ .../org/apache/iotdb/session/SessionUtils.java | 133 +++- .../iotdb/session/IoTDBSessionComplexIT.java | 62 +- .../apache/iotdb/session/IoTDBSessionSimpleIT.java | 57 +- .../apache/iotdb/session/SessionCacheLeaderUT.java | 5 +- .../java/org/apache/iotdb/session/SessionUT.java | 52 +- site/pom.xml | 2 +- site/src/main/.vuepress/config.js | 74 +- spark-iotdb-connector/Readme.md | 8 +- spark-iotdb-connector/pom.xml | 2 +- spark-tsfile/README.md | 6 +- spark-tsfile/pom.xml | 4 +- .../iotdb/spark/tsfile/NarrowConverter.scala | 4 +- .../apache/iotdb/spark/tsfile/WideConverter.scala | 5 +- thrift-cluster/pom.xml | 2 +- thrift-cluster/src/main/thrift/cluster.thrift | 8 +- thrift-sync/pom.xml | 2 +- thrift/pom.xml | 2 +- thrift/src/main/thrift/rpc.thrift | 31 + tsfile/README.md | 2 +- tsfile/pom.xml | 2 +- .../iotdb/tsfile/encoding/decoder/Decoder.java | 4 + .../iotdb/tsfile/file/header/ChunkHeader.java | 15 +- .../iotdb/tsfile/file/metadata/ChunkMetadata.java | 22 +- .../iotdb/tsfile/file/metadata/IChunkMetadata.java | 74 ++ .../metadata/ITimeSeriesMetadata.java} | 23 +- .../tsfile/file/metadata/TimeseriesMetadata.java | 23 +- .../tsfile/file/metadata/VectorChunkMetadata.java | 178 +++++ .../file/metadata/VectorTimeSeriesMetadata.java | 97 +++ .../tsfile/file/metadata/enums/TSDataType.java | 8 +- .../file/metadata/statistics/Statistics.java | 96 +-- .../file/metadata/statistics/TimeStatistics.java | 161 +++++ .../iotdb/tsfile/read/TsFileSequenceReader.java | 38 +- .../apache/iotdb/tsfile/read/common/BatchData.java | 60 ++ .../org/apache/iotdb/tsfile/read/common/Chunk.java | 5 +- .../read/controller/IChunkMetadataLoader.java | 8 +- .../tsfile/read/controller/IMetadataQuerier.java | 6 +- .../read/controller/MetadataQuerierByFileImpl.java | 13 +- .../expression/impl/SingleSeriesExpression.java | 4 + .../iotdb/tsfile/read/filter/ValueFilter.java | 106 +++ .../iotdb/tsfile/read/filter/operator/In.java | 6 +- .../query/executor/ExecutorWithTimeGenerator.java | 4 +- .../tsfile/read/query/executor/TsFileExecutor.java | 4 +- .../query/timegenerator/TsFileTimeGenerator.java | 4 +- .../tsfile/read/reader/chunk/ChunkReader.java | 8 +- .../read/reader/chunk/VectorChunkReader.java | 262 +++++++ .../tsfile/read/reader/page/TimePageReader.java | 92 +++ .../tsfile/read/reader/page/ValuePageReader.java | 218 ++++++ .../tsfile/read/reader/page/VectorChunkReader.java | 18 +- .../tsfile/read/reader/page/VectorPageReader.java | 122 ++++ .../reader/series/AbstractFileSeriesReader.java | 14 +- .../read/reader/series/EmptyFileSeriesReader.java | 6 +- .../read/reader/series/FileSeriesReader.java | 9 +- .../reader/series/FileSeriesReaderByTimestamp.java | 13 +- .../java/org/apache/iotdb/tsfile/utils/Binary.java | 2 + .../java/org/apache/iotdb/tsfile/utils/BitMap.java | 121 ++++ .../org/apache/iotdb/tsfile/utils/PublicBAOS.java | 4 + .../apache/iotdb/tsfile/utils/TsPrimitiveType.java | 88 +++ .../apache/iotdb/tsfile/write/TsFileWriter.java | 13 +- .../tsfile/write/chunk/ChunkGroupWriterImpl.java | 6 +- .../iotdb/tsfile/write/chunk/ChunkWriterImpl.java | 32 +- .../tsfile/write/chunk/IChunkGroupWriter.java | 4 +- .../iotdb/tsfile/write/chunk/IChunkWriter.java | 15 +- .../iotdb/tsfile/write/chunk/TimeChunkWriter.java | 255 +++++++ .../iotdb/tsfile/write/chunk/ValueChunkWriter.java | 252 +++++++ .../tsfile/write/chunk/VectorChunkWriterImpl.java | 202 ++++++ .../apache/iotdb/tsfile/write/page/PageWriter.java | 6 +- .../iotdb/tsfile/write/page/TimePageWriter.java | 177 +++++ .../page/{PageWriter.java => ValuePageWriter.java} | 160 +++-- .../apache/iotdb/tsfile/write/record/Tablet.java | 251 +++++-- .../write/record/datapoint/BooleanDataPoint.java | 2 +- .../write/record/datapoint/DoubleDataPoint.java | 2 +- .../write/record/datapoint/FloatDataPoint.java | 2 +- .../write/record/datapoint/IntDataPoint.java | 2 +- .../write/record/datapoint/LongDataPoint.java | 2 +- .../write/record/datapoint/StringDataPoint.java | 2 +- .../tsfile/write/schema/IMeasurementSchema.java | 77 ++ .../tsfile/write/schema/MeasurementSchema.java | 89 ++- .../apache/iotdb/tsfile/write/schema/Schema.java | 25 +- .../write/schema/VectorMeasurementSchema.java | 370 ++++++++++ .../write/writer/RestorableTsFileIOWriter.java | 17 +- .../iotdb/tsfile/write/writer/TsFileIOWriter.java | 39 +- ...easurementChunkMetadataListMapIteratorTest.java | 13 +- .../tsfile/read/controller/ChunkLoaderTest.java | 7 +- .../query/timegenerator/ReaderByTimestampTest.java | 4 +- .../iotdb/tsfile/read/reader/ReaderTest.java | 6 +- .../org/apache/iotdb/tsfile/utils/BitMapTest.java | 67 ++ .../org/apache/iotdb/tsfile/utils/RecordUtils.java | 4 +- .../tsfile/write/DefaultDeviceTemplateTest.java | 5 +- .../iotdb/tsfile/write/TsFileIOWriterTest.java | 3 +- .../write/schema/converter/SchemaBuilderTest.java | 17 +- .../write/writer/RestorableTsFileIOWriterTest.java | 5 +- .../tsfile/write/writer/TestTsFileOutput.java} | 49 +- .../tsfile/write/writer/TimeChunkWriterTest.java | 111 +++ .../tsfile/write/writer/TimePageWriterTest.java | 171 +++++ .../tsfile/write/writer/ValueChunkWriterTest.java | 109 +++ .../tsfile/write/writer/ValuePageWriterTest.java | 291 ++++++++ .../write/writer/VectorChunkWriterImplTest.java | 178 +++++ .../write/writer/VectorMeasurementSchemaStub.java | 128 ++++ zeppelin-interpreter/pom.xml | 2 +- 475 files changed, 22624 insertions(+), 3655 deletions(-) diff --cc antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/SqlBase.g4 index c77b4cf,a7b2fc9..c753069 --- a/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/SqlBase.g4 +++ b/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/SqlBase.g4 @@@ -378,12 -382,13 +382,17 @@@ measurementNam ; insertValuesSpec + :(COMMA? insertMultiValue)* + ; + +insertMultiValue - : LR_BRACKET dateFormat (COMMA constant)+ RR_BRACKET - | LR_BRACKET INT (COMMA constant)+ RR_BRACKET + : LR_BRACKET dateFormat (COMMA measurementValue)+ RR_BRACKET + | LR_BRACKET INT (COMMA measurementValue)+ RR_BRACKET + ; + + measurementValue + : constant + | LR_BRACKET constant (COMMA constant)+ RR_BRACKET ; setCol diff --cc docs/zh/UserGuide/IoTDB-SQL-Language/DML-Data-Manipulation-Language.md index 7a2b321,c25e204..5563a04 --- a/docs/zh/UserGuide/IoTDB-SQL-Language/DML-Data-Manipulation-Language.md +++ b/docs/zh/UserGuide/IoTDB-SQL-Language/DML-Data-Manipulation-Language.md @@@ -47,15 -47,9 +47,15 @@@ IoTDB > insert into root.ln.wf02.wt02(t INSERT语句还可以支持在同一个时间点下多列数据的插入,同时向2时间点插入上述两个时间序列的值,多列数据插入示例代码如下: ``` - IoTDB > insert into root.ln.wf02.wt02(timestamp, status, hardware) VALUES (2, false, 'v2') + IoTDB > insert into root.ln.wf02.wt02(timestamp, status, hardware) values (2, false, 'v2') ``` +此外,INSERT语句支持一次性插入多行数据,同时向2个不同时间点插入上述时间序列的值,示例代码如下: + +``` +IoTDB > insert into root.ln.wf02.wt02(timestamp, status, hardware) VALUES (3, false, 'v3'),(4, true, 'v4') +``` + 插入数据后我们可以使用SELECT语句简单查询已插入的数据。 ``` diff --cc server/src/main/java/org/apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java index 12f2b7b,b88a09f..22b7cba --- a/server/src/main/java/org/apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java +++ b/server/src/main/java/org/apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java @@@ -1886,23 -1756,20 +1756,25 @@@ public class IoTDBSqlVisitor extends Sq } private void parseInsertValuesSpec(InsertValuesSpecContext ctx, InsertOperator insertOp) { - long timestamp; - if (ctx.dateFormat() != null) { - timestamp = parseTimeFormat(ctx.dateFormat().getText()); - } else { - timestamp = Long.parseLong(ctx.INT().getText()); - } - insertOp.setTime(timestamp); + List<InsertMultiValueContext> insertMultiValues = ctx.insertMultiValue(); List<String> valueList = new ArrayList<>(); - List<MeasurementValueContext> values = ctx.measurementValue(); - for (MeasurementValueContext value : values) { - for (ConstantContext counstant : value.constant()) { - valueList.add(counstant.getText()); + Long[] timeArray = new Long[insertMultiValues.size()]; + for (int i = 0; i < insertMultiValues.size(); i++) { + long timestamp; + if (insertMultiValues.get(i).dateFormat() != null) { + timestamp = parseTimeFormat(insertMultiValues.get(i).dateFormat().getText()); + } else { + timestamp = Long.parseLong(insertMultiValues.get(i).INT().getText()); + } + timeArray[i] = timestamp; - List<ConstantContext> values = insertMultiValues.get(i).constant(); - for (ConstantContext value : values) { - valueList.add(value.getText()); ++ List<MeasurementValueContext> values = insertMultiValues.get(i).measurementValue(); ++ for (MeasurementValueContext value : values) { ++ for (ConstantContext counstant : value.constant()) { ++ valueList.add(counstant.getText()); ++ } } } + insertOp.setTime(timeArray); insertOp.setValueList(valueList.toArray(new String[0])); } diff --cc server/src/main/java/org/apache/iotdb/db/qp/strategy/PhysicalGenerator.java index bde2f51,7b8c0ac..b3ef8fe --- a/server/src/main/java/org/apache/iotdb/db/qp/strategy/PhysicalGenerator.java +++ b/server/src/main/java/org/apache/iotdb/db/qp/strategy/PhysicalGenerator.java @@@ -235,33 -232,22 +234,41 @@@ public class PhysicalGenerator case INSERT: InsertOperator insert = (InsertOperator) operator; paths = insert.getSelectedPaths(); + int measurementsNum = 0; + for (String measurement : insert.getMeasurementList()) { + if (measurement.startsWith("(") && measurement.endsWith(")")) { + measurementsNum += measurement.replace("(", "").replace(")", "").split(",").length; + } else { + measurementsNum++; + } + } - if (measurementsNum != insert.getValueList().length) { + if (insert.getValueList().length % insert.getMeasurementList().length != 0) { throw new SQLParserException( String.format( "the measurementList's size %d is not consistent with the valueList's size %d", - insert.getMeasurementList().length, insert.getValueList().length)); + measurementsNum, insert.getValueList().length)); } - return new InsertRowPlan( - paths.get(0), insert.getTime(), insert.getMeasurementList(), insert.getValueList()); + if (insert.getMeasurementList().length == insert.getValueList().length) { + return new InsertRowPlan( + paths.get(0), + insert.getTime()[0], + insert.getMeasurementList(), + insert.getValueList()); + } + InsertRowsPlan insertRowsPlan = new InsertRowsPlan(); + for (int i = 0; i < insert.getTime().length; i++) { + insertRowsPlan.addOneInsertRowPlan( + new InsertRowPlan( + paths.get(0), + insert.getTime()[i], + insert.getMeasurementList(), + Arrays.copyOfRange( + insert.getValueList(), + i * insert.getMeasurementList().length, + (i + 1) * insert.getMeasurementList().length)), + i); + } + return insertRowsPlan; case MERGE: if (operator.getTokenIntType() == SQLConstant.TOK_FULL_MERGE) { return new MergePlan(OperatorType.FULL_MERGE);
