ITPub博客

首页 > 数据库 > > Apache IoTDB代码极简阅读

Apache IoTDB代码极简阅读

作者:飘絮絮絮丶 时间:2022-04-24 16:48:41 0 删除 编辑

一. 代码总结

  • 代码仓库: https://github.com/apache/iotdb
  • commit:ce154b8d2e1cb3d723168b8fc2b103d223c39d8d
  • 开发语言: Java
  • 有效行数: 170021
  • 函数数量: 15432
  • 函数当量: 15.4 LevelDB
  • 类数量: 1914

二. 代码阅读

IoTDB是时序数据库, 可接入其他数据处理系统, 比如Hive, Flink等. 详细介绍, 开发动机, workload请参考官网. 本文只给出看代码的步骤.

1. 盲搜

盲搜的全部命令如下:

javatree.pl '\w+' ''  
javatree.pl 'Oparator' ''  
javatree.pl 'Operator' '' 1 
javatree.pl 'Operator' '' 1  'spark/tsfile' 
javatree.pl 'Operator' '' 1  'iotdb/db/qp/logical' 
javatree.pl 'PhysicalPlan' '' 1     
javatree.pl 'PhysicalPlan' 'Projection' 1   
javatree.pl 'PhysicalPlan' 'Project' 1    
javatree.pl 'Expr' '' 1   
javatree.pl 'Expression' '' 1   
javatree.pl 'IExpression' '' 1   
javatree.pl '\w+' 'IExpression' 1   
javatree.pl '\w+' 'Expression' 1   
javatree.pl '\w+' '^Expression' 1   
javatree.pl '\w+' '^Expression$' 1   
javatree.pl '^Expression$' ''  1   
javatree.pl '^Scan$' ''  1   
javatree.pl 'Scan' ''  1   
javatree.pl '(?)Scan' ''  1   
javatree.pl 'Join' ''  1   
javatree.pl '(?i)Join' ''  1   
javatree.pl '(?i)aggregate' ''  1   
javatree.pl '(?i)exec' ''  1   
javatree.pl 'GroupByExecutor' ''  1   
javatree.pl '\w+' 'GroupByExecutor'  1   
vim server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/GroupByExecutor.java +30
javatree.pl '(?i)Physical' ''  1   
vim server/src/main/java/org/apache/iotdb/db/qp/physical/PhysicalPlan.java +9
javatree.pl '(?i)select' ''  1   
javatree.pl '(?i)UDTF' ''  1   
vim server/src/main/java/org/apache/iotdb/db/query/udf/api/UDTF.java +58
javatree.pl 'Encoder' ''  1    
javatree.pl 'Decoder' ''  1   
vim tsfile/src/main/java/org/apache/iotdb/tsfile/encoding/decoder/GorillaDecoderV2.java +35
vim tsfile/src/main/java/org/apache/iotdb/tsfile/encoding/decoder/Decoder.java +31
java_calltree.pl 'nextBatch' ''  1 1 2
java_calltree.pl 'fetchSingleSeries' ''  1 1 2
java_calltree.pl 'fetchSingleSeries' ''  1 1 3
java_calltree.pl 'fetchSingleSeries' ''  1 1 -3
java_calltree.pl 'getValuesInTimestamps' ''  1 1 -3
java_calltree.pl 'execute' ''  1 1 -3
java_calltree.pl 'execute' ''  1 1 -2
vim tsfile/src/main/java/org/apache/iotdb/tsfile/read/TsFileReader.java +50
javatree.pl 'Executor' '' 1 
javatree.pl 'Executor$' '' 1 
javatree.pl 'IPlanExecutor' '' 1 
vim server/src/main/java/org/apache/iotdb/db/qp/executor/IPlanExecutor.java +44
java_calltree.pl 'PlanExecutor' '' 1 1 2
java_calltree.pl 'PlanExecutor' '' 1 1 -4
java_calltree.pl 'PlanExecutor' '' 1 1 -3
java_calltree.pl 'ClusterPlanExecutor' '' 1 1 -3
java_calltree.pl 'TsFileExecutor' '' 1 1 -3
java_calltree.pl 'TsFileExecutor' '' 1 1 -4
java_calltree.pl 'TsFileExecutor' '' 1 1 -4
javatree.pl 'UDTF' '' 1 
vim server/src/main/java/org/apache/iotdb/db/query/udf/api/UDTF.java +58
javatree.pl '(?i)UDTF\w*executor' '' 1 
java_calltree.pl 'ClusterUDTFQueryExecutor' '' 1 1 -4
vim server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +567
javatree.pl 'QueryPlan' '' 1 
javatree.pl '\w+' 'QueryPlan'  1 
java_calltree.pl 'LastQueryPlan' ''  1 1 1

2. 执行逻辑

  • PhysicalPlan: catalog和query相关的逻辑封装在这个里面.
javatree.pl 'PhysicalPlan' '' 1 0
  • QueryPlan: 查询相关逻辑
javatree.pl 'PhysicalPlan' 'QueryPlan' 1 0
javatree.pl 'QueryPlan' '' 1 0
  • 有LocalOperator生成PhysicalPlan
java_calltree.pl 'generatePhysicalPlan' '' 0 1 1

输出结果

 + generatePhysicalPlan
  ├── generatePhysicalPlan	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/crud/GroupByQueryOperator.java +32]
  ├── generatePhysicalPlan	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/crud/QueryOperator.java +188]
  ├── generatePhysicalPlan	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/crud/FillQueryOperator.java +66]
  ├── generatePhysicalPlan	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/crud/AggregationQueryOperator.java +90]
  ├── generatePhysicalPlan	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/crud/UDTFQueryOperator.java +38]
  ├── generatePhysicalPlan	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/crud/UDAFQueryOperator.java +102]
  ├── generatePhysicalPlan	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/crud/InsertOperator.java +89]
  ├── generatePhysicalPlan	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/crud/GroupByFillQueryOperator.java +32]
  ├── generatePhysicalPlan	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/crud/DeleteDataOperator.java +73]
  ├── generatePhysicalPlan	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/crud/LastQueryOperator.java +60]
  ├── generatePhysicalPlan	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/UnSetTTLOperator.java +48]
  ├── generatePhysicalPlan	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/crud/SelectIntoOperator.java +48]
  ├── generatePhysicalPlan	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/SetTTLOperator.java +57]
  ├── generatePhysicalPlan	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/SetStorageGroupOperator.java +45]
  ├── generatePhysicalPlan	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/RemoveFileOperator.java +45]
  ├── generatePhysicalPlan	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/LoadConfigurationOperator.java +48]
  ├── generatePhysicalPlan	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/ShowNodesInTemplateOperator.java +38]
  ├── generatePhysicalPlan	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/ShowDevicesOperator.java +69]
  ├── generatePhysicalPlan	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/CreateIndexOperator.java +80]
  ├── generatePhysicalPlan	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/DeleteTimeSeriesOperator.java +48]
  ├── generatePhysicalPlan	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/ShowPathsSetTemplateOperator.java +38]
  ├── generatePhysicalPlan	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/AlterTimeSeriesOperator.java +103]
  ├── generatePhysicalPlan	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/CreateContinuousQueryOperator.java +96]
  ├── generatePhysicalPlan	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/SetTemplateOperator.java +56]
  ├── generatePhysicalPlan	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/ShowQueryResourceOperate.java +35]
  ├── generatePhysicalPlan	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/StartTriggerOperator.java +46]
  ├── generatePhysicalPlan	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/CreateTriggerOperator.java +88]
  ├── generatePhysicalPlan	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/ShowChildPathsOperator.java +43]
  ├── generatePhysicalPlan	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/DropTriggerOperator.java +46]
  ├── generatePhysicalPlan	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/DropContinuousQueryOperator.java +46]
  ├── generatePhysicalPlan	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/SetSystemModeOperator.java +49]
  ├── generatePhysicalPlan	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/LoadDataOperator.java +51]
  ├── generatePhysicalPlan	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/ActivateTemplateOperator.java +47]
  ├── generatePhysicalPlan	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/ShowPathsUsingTemplateOperator.java +38]
  ├── generatePhysicalPlan	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/AuthorOperator.java +119]
  ├── generatePhysicalPlan	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/CreateSnapshotOperator.java +36]
  ├── generatePhysicalPlan	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/TracingOperator.java +42]
  ├── generatePhysicalPlan	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/ShowTTLOperator.java +45]
  ├── generatePhysicalPlan	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/ShowOperator.java +46]
  ├── generatePhysicalPlan	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/LoadFilesOperator.java +77]
  ├── generatePhysicalPlan	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/ShowFunctionsOperator.java +34]
  ├── generatePhysicalPlan	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/CountOperator.java +55]
  ├── generatePhysicalPlan	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/StopTriggerOperator.java +46]
  ├── generatePhysicalPlan	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/CreateTemplateOperator.java +104]
  ├── generatePhysicalPlan	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/KillQueryOperator.java +48]
  ├── generatePhysicalPlan	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/DeleteStorageGroupOperator.java +47]
  ├── generatePhysicalPlan	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/ShowTimeSeriesOperator.java +94]
  ├── generatePhysicalPlan	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/CreateTimeSeriesOperator.java +114]
  ├── generatePhysicalPlan	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/DeletePartitionOperator.java +58]
  ├── generatePhysicalPlan	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/SettleOperator.java +63]
  ├── generatePhysicalPlan	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/ShowChildNodesOperator.java +43]
  ├── generatePhysicalPlan	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/DropFunctionOperator.java +46]
  ├── generatePhysicalPlan	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/CreateAlignedTimeSeriesOperator.java +120]
  ├── generatePhysicalPlan	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/DropTemplateOperator.java +45]
  ├── generatePhysicalPlan	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/CreateFunctionOperator.java +55]
  ├── generatePhysicalPlan	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/ClearCacheOperator.java +35]
  ├── generatePhysicalPlan	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/ShowStorageGroupOperator.java +43]
  ├── generatePhysicalPlan	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/UnloadFileOperator.java +51]
  ├── generatePhysicalPlan	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/DropIndexOperator.java +61]
  ├── generatePhysicalPlan	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/Operator.java +85]
  ├── generatePhysicalPlan	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/MergeOperator.java +36]
  ├── generatePhysicalPlan	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/UnsetTemplateOperator.java +56]
  ├── generatePhysicalPlan	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/ShowTriggersOperator.java +34]
  ├── generatePhysicalPlan	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/DataAuthOperator.java +48]
  └── generatePhysicalPlan	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/FlushOperator.java +58]
  • Local Operator
javatree.pl 'Operator' '' 1 0 'spark/tsfile'

输出结果

  ^Operator$
  └── Operator	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/Operator.java +28]
      ├── ActivateTemplateOperator	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/ActivateTemplateOperator.java +29]
      ├── AlterTimeSeriesOperator	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/AlterTimeSeriesOperator.java +31]
      ├── AuthorOperator	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/AuthorOperator.java +32]
      ├── ClearCacheOperator	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/ClearCacheOperator.java +27]
      ├── CreateAlignedTimeSeriesOperator	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/CreateAlignedTimeSeriesOperator.java +37]
      ├── CreateContinuousQueryOperator	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/CreateContinuousQueryOperator.java +30]
      ├── CreateFunctionOperator	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/CreateFunctionOperator.java +28]
      ├── CreateIndexOperator	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/CreateIndexOperator.java +34]
      ├── CreateSnapshotOperator	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/CreateSnapshotOperator.java +28]
      ├── CreateTemplateOperator	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/CreateTemplateOperator.java +34]
      ├── CreateTimeSeriesOperator	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/CreateTimeSeriesOperator.java +33]
      ├── CreateTriggerOperator	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/CreateTriggerOperator.java +33]
      ├── DataAuthOperator	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/DataAuthOperator.java +29]
      ├── DeleteDataOperator	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/crud/DeleteDataOperator.java +35]
      ├── DeletePartitionOperator	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/DeletePartitionOperator.java +31]
      ├── DeleteStorageGroupOperator	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/DeleteStorageGroupOperator.java +29]
      ├── DeleteTimeSeriesOperator	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/DeleteTimeSeriesOperator.java +30]
      ├── DropContinuousQueryOperator	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/DropContinuousQueryOperator.java +28]
      ├── DropFunctionOperator	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/DropFunctionOperator.java +28]
      ├── DropIndexOperator	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/DropIndexOperator.java +33]
      ├── DropTemplateOperator	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/DropTemplateOperator.java +27]
      ├── DropTriggerOperator	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/DropTriggerOperator.java +28]
      ├── FlushOperator	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/FlushOperator.java +30]
      ├── InsertOperator	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/crud/InsertOperator.java +33]
      ├── KillQueryOperator	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/KillQueryOperator.java +27]
      ├── LoadConfigurationOperator	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/LoadConfigurationOperator.java +28]
      ├── LoadDataOperator	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/LoadDataOperator.java +29]
      ├── LoadFilesOperator	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/LoadFilesOperator.java +35]
      ├── MergeOperator	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/MergeOperator.java +28]
      ├── RemoveFileOperator	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/RemoveFileOperator.java +30]
      ├── SelectIntoOperator	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/crud/SelectIntoOperator.java +35]
      ├── SetStorageGroupOperator	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/SetStorageGroupOperator.java +27]
      ├── SetSystemModeOperator	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/SetSystemModeOperator.java +28]
      ├── SetTTLOperator	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/SetTTLOperator.java +30]
      ├── SetTemplateOperator	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/SetTemplateOperator.java +29]
      ├── SettleOperator	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/SettleOperator.java +28]
      ├── ShowQueryResourceOperate	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/ShowQueryResourceOperate.java +27]
      ├── StartTriggerOperator	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/StartTriggerOperator.java +28]
      ├── StopTriggerOperator	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/StopTriggerOperator.java +28]
      ├── TracingOperator	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/TracingOperator.java +27]
      ├── UnSetTTLOperator	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/UnSetTTLOperator.java +30]
      ├── UnloadFileOperator	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/UnloadFileOperator.java +30]
      ├── UnsetTemplateOperator	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/UnsetTemplateOperator.java +29]
      ├── ShowOperator	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/ShowOperator.java +34]
      │   ├── CountOperator	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/CountOperator.java +31]
      │   ├── ShowChildNodesOperator	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/ShowChildNodesOperator.java +29]
      │   ├── ShowChildPathsOperator	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/ShowChildPathsOperator.java +29]
      │   ├── ShowContinuousQueriesOperator	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/ShowContinuousQueriesOperator.java +22]
      │   ├── ShowDevicesOperator	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/ShowDevicesOperator.java +28]
      │   ├── ShowFunctionsOperator	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/ShowFunctionsOperator.java +27]
      │   ├── ShowLockInfoOperator	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/ShowLockInfoOperator.java +24]
      │   ├── ShowNodesInTemplateOperator	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/ShowNodesInTemplateOperator.java +28]
      │   ├── ShowPathsSetTemplateOperator	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/ShowPathsSetTemplateOperator.java +28]
      │   ├── ShowPathsUsingTemplateOperator	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/ShowPathsUsingTemplateOperator.java +28]
      │   ├── ShowStorageGroupOperator	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/ShowStorageGroupOperator.java +29]
      │   ├── ShowTTLOperator	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/ShowTTLOperator.java +31]
      │   ├── ShowTemplatesOperator	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/ShowTemplatesOperator.java +22]
      │   ├── ShowTimeSeriesOperator	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/ShowTimeSeriesOperator.java +28]
      │   └── ShowTriggersOperator	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/sys/ShowTriggersOperator.java +27]
      └── QueryOperator	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/crud/QueryOperator.java +56]
          ├── FillQueryOperator	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/crud/FillQueryOperator.java +34]
          ├── LastQueryOperator	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/crud/LastQueryOperator.java +31]
          ├── UDAFQueryOperator	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/crud/UDAFQueryOperator.java +44]
          ├── UDTFQueryOperator	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/crud/UDTFQueryOperator.java +27]
          └── AggregationQueryOperator	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/crud/AggregationQueryOperator.java +41]
              └── GroupByQueryOperator	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/crud/GroupByQueryOperator.java +29]
                  └── GroupByFillQueryOperator	[vim server/src/main/java/org/apache/iotdb/db/qp/logical/crud/GroupByFillQueryOperator.java +29]
  • QueryPlan的执行
javatree.pl 'IPlanExecutor' '' 1 0
java_calltree.pl 'processQuery' '' 0 1 2
java_calltree.pl 'processQuery' 'process' 0 1 2

输出结果如下,包含了很多query和show相关的PhysicalPlan的执行逻辑

  + processQuery
  ├── processQuery	[vim server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +217]
  │   ├── processDataQuery	[vim server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +567]
  │   ├── processAuthorQuery	[vim server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +1978]
  │   └── processShowQuery	[vim server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +615]
  │       ├── processShowTTLQuery	[vim server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +893]
  │       ├── processShowFlushTaskInfo	[vim server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +939]
  │       ├── processShowVersion	[vim server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +926]
  │       ├── processShowTimeseries	[vim server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +884]
  │       ├── processShowStorageGroup	[vim server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +829]
  │       ├── processShowLockInfo	[vim server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +851]
  │       ├── processShowDevices	[vim server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +776]
  │       ├── processShowChildPaths	[vim server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +781]
  │       ├── processShowChildNodes	[vim server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +802]
  │       ├── processCountTimeSeries	[vim server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +771]
  │       ├── processCountNodeTimeSeries	[vim server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +674]
  │       ├── processCountDevices	[vim server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +695]
  │       ├── processCountStorageGroup	[vim server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +700]
  │       ├── processCountNodes	[vim server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +667]
  │       ├── processShowQueryProcesslist	[vim server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +2200]
  │       ├── processShowFunctions	[vim server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +965]
  │       ├── processShowTriggers	[vim server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +1149]
  │       ├── processShowContinuousQueries	[vim server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +1019]
  │       ├── processShowSchemaTemplates	[vim server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +1054]
  │       ├── processShowNodesInSchemaTemplate	[vim server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +1068]
  │       ├── processShowPathsSetSchemaTemplate	[vim server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +1118]
  │       └── processShowPathsUsingSchemaTemplate	[vim server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +1099]
  └── processQuery	[vim cluster/src/main/java/org/apache/iotdb/cluster/query/ClusterPlanExecutor.java +98]
      ├── processDataQuery	[vim server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +567]
      ├── processShowQuery	[vim server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +615]
      │   ├── processShowTTLQuery	[vim server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +893]
      │   ├── processShowFlushTaskInfo	[vim server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +939]
      │   ├── processShowVersion	[vim server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +926]
      │   ├── processShowTimeseries	[vim server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +884]
      │   ├── processShowStorageGroup	[vim server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +829]
      │   ├── processShowLockInfo	[vim server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +851]
      │   ├── processShowDevices	[vim server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +776]
      │   ├── processShowChildPaths	[vim server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +781]
      │   ├── processShowChildNodes	[vim server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +802]
      │   ├── processCountTimeSeries	[vim server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +771]
      │   ├── processCountNodeTimeSeries	[vim server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +674]
      │   ├── processCountDevices	[vim server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +695]
      │   ├── processCountStorageGroup	[vim server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +700]
      │   ├── processCountNodes	[vim server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +667]
      │   ├── processShowQueryProcesslist	[vim server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +2200]
      │   ├── processShowFunctions	[vim server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +965]
      │   ├── processShowTriggers	[vim server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +1149]
      │   ├── processShowContinuousQueries	[vim server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +1019]
      │   ├── processShowSchemaTemplates	[vim server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +1054]
      │   ├── processShowNodesInSchemaTemplate	[vim server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +1068]
      │   ├── processShowPathsSetSchemaTemplate	[vim server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +1118]
      │   └── processShowPathsUsingSchemaTemplate	[vim server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +1099]
      └── processAuthorQuery	[vim server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +1978]
  • processDataQuery: 这个应该是查询处理的入口
vim server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +567

  protected QueryDataSet processDataQuery(QueryPlan queryPlan, QueryContext context)
      throws StorageEngineException, QueryFilterOptimizationException, QueryProcessException,
          IOException, InterruptedException {
    QueryDataSet queryDataSet;
    if (queryPlan instanceof AlignByDevicePlan) {
      queryDataSet = getAlignByDeviceDataSet((AlignByDevicePlan) queryPlan, context, queryRouter);
    } else {
      if (queryPlan.getPaths() == null || queryPlan.getPaths().isEmpty()) {
        // no time series are selected, return EmptyDataSet
        return new EmptyDataSet();
      } else if (queryPlan instanceof UDAFPlan) {
        UDAFPlan udafPlan = (UDAFPlan) queryPlan;
        queryDataSet = queryRouter.udafQuery(udafPlan, context);
      } else if (queryPlan instanceof UDTFPlan) {
        UDTFPlan udtfPlan = (UDTFPlan) queryPlan;
        queryDataSet = queryRouter.udtfQuery(udtfPlan, context);
      } else if (queryPlan instanceof GroupByTimeFillPlan) {
        GroupByTimeFillPlan groupByFillPlan = (GroupByTimeFillPlan) queryPlan;
        queryDataSet = queryRouter.groupByFill(groupByFillPlan, context);
      } else if (queryPlan instanceof GroupByTimePlan) {
        GroupByTimePlan groupByTimePlan = (GroupByTimePlan) queryPlan;
        queryDataSet = queryRouter.groupBy(groupByTimePlan, context);
      } else if (queryPlan instanceof QueryIndexPlan) {
        throw new QueryProcessException("Query index hasn't been supported yet");
      } else if (queryPlan instanceof AggregationPlan) {
        AggregationPlan aggregationPlan = (AggregationPlan) queryPlan;
        queryDataSet = queryRouter.aggregate(aggregationPlan, context);
      } else if (queryPlan instanceof FillQueryPlan) {
        FillQueryPlan fillQueryPlan = (FillQueryPlan) queryPlan;
        queryDataSet = queryRouter.fill(fillQueryPlan, context);
      } else if (queryPlan instanceof LastQueryPlan) {
        queryDataSet = queryRouter.lastQuery((LastQueryPlan) queryPlan, context);
      } else {
        queryDataSet = queryRouter.rawDataQuery((RawDataQueryPlan) queryPlan, context);
      }    
    }    
    queryDataSet.setRowLimit(queryPlan.getRowLimit());
    queryDataSet.setRowOffset(queryPlan.getRowOffset());
    queryDataSet.setWithoutAllNull(queryPlan.isWithoutAllNull());
    queryDataSet.setWithoutAnyNull(queryPlan.isWithoutAnyNull());
    return queryDataSet;
  }
  • 有没有采用gorrila编码呢?
javatree.pl 'Gorilla' '' 1 0
javatree.pl 'Encoder' ''  1 0
  • Operator怎么产生的
java_calltree.pl 'GroupByFillQueryOperator' ''  1 1 3
java_calltree.pl '\w+Operator' 'visit\w+Statement'  1 1 3

输出结果为:

  \w+Operator
  ├── AggregationQueryOperator
  │   ├── visitGroupByLevelStatement	[vim server/src/main/java/org/apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java +1170]
  │   └── parseSelectClause	[vim server/src/main/java/org/apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java +2625]
  │       └── visitSelectStatement	[vim server/src/main/java/org/apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java +1032]
  ├── DeleteDataOperator
  │   └── visitDeleteStatement	[vim server/src/main/java/org/apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java +1665]
  ├── FillQueryOperator
  │   └── visitFillStatement	[vim server/src/main/java/org/apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java +1183]
  ├── FilterOperator
  │   └── parseWhereClause	[vim server/src/main/java/org/apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java +2693]
  │       ├── visitSelectStatement	[vim server/src/main/java/org/apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java +1032]
  │       └── visitDeleteStatement	[vim server/src/main/java/org/apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java +1665]
  ├── GroupByFillQueryOperator
  │   └── visitGroupByFillStatement	[vim server/src/main/java/org/apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java +1157]
  ├── GroupByQueryOperator
  │   └── visitGroupByTimeStatement	[vim server/src/main/java/org/apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java +1144]
  ├── InsertOperator
  │   └── visitInsertStatement	[vim server/src/main/java/org/apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java +1596]
  ├── LastQueryOperator
  │   └── parseSelectClause	[vim server/src/main/java/org/apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java +2625]
  │       └── visitSelectStatement	[vim server/src/main/java/org/apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java +1032]
  ├── QueryOperator
  │   ├── visitSelectStatement	[vim server/src/main/java/org/apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java +1032]
  │   ├── visitOrderByTimeStatement	[vim server/src/main/java/org/apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java +1134]
  │   ├── visitLimitStatement	[vim server/src/main/java/org/apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java +1196]
  │   ├── visitSlimitStatement	[vim server/src/main/java/org/apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java +1211]
  │   ├── visitWithoutNullStatement	[vim server/src/main/java/org/apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java +1226]
  │   └── visitAlignByDeviceClauseOrDisableAlignStatement	[vim server/src/main/java/org/apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java +1244]
  ├── SelectIntoOperator
  │   └── parseAndConstructSelectIntoOperator	[vim server/src/main/java/org/apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java +1055]
  │       └── visitSelectStatement	[vim server/src/main/java/org/apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java +1032]
  ├── UDAFQueryOperator
  │   └── parseSelectClause	[vim server/src/main/java/org/apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java +2625]
  │       └── visitSelectStatement	[vim server/src/main/java/org/apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java +1032]
  ├── UDTFQueryOperator
  │   └── parseSelectClause	[vim server/src/main/java/org/apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java +2625]
  │       └── visitSelectStatement	[vim server/src/main/java/org/apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java +1032]
  ├── addChildOperator
  │   └── parseWhereClause	[vim server/src/main/java/org/apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java +2693]
  │       ├── visitSelectStatement	[vim server/src/main/java/org/apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java +1032]
  │       └── visitDeleteStatement	[vim server/src/main/java/org/apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java +1665]
  ├── calcOperatorInterval
  │   └── parseDeleteTimeInterval	[vim server/src/main/java/org/apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java +1683]
  │       └── visitDeleteStatement	[vim server/src/main/java/org/apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java +1665]
  ├── getFilterOperator
  │   └── visitDeleteStatement	[vim server/src/main/java/org/apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java +1665]
  ├── parseAndConstructSelectIntoOperator
  │   └── visitSelectStatement	[vim server/src/main/java/org/apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java +1032]
  └── setQueryOperator
      └── parseAndConstructSelectIntoOperator	[vim server/src/main/java/org/apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java +1055]
          └── visitSelectStatement	[vim server/src/main/java/org/apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java +1032]
  • DDL和insert语句怎么执行的?
java_calltree.pl  'createTimeSeries' '' 1 2
java_calltree.pl  'processNonQuery' '' 0 1 1

输出结果为:

  processNonQuery	[vim server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +232]
  ├── plan.getOperatorType @ getOperatorType	[vim server/src/main/java/org/apache/iotdb/db/qp/physical/PhysicalPlan.java +139]
  ├── + insert
  ├── + insertTablet
  ├── operateAuthor	[vim server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +1737]
  ├── operateWatermarkEmbedding	[vim server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +1797]
  ├── + getUsers
  ├── deleteTimeSeries	[vim server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +1862]
  ├── createTimeSeries	[vim server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +1809]
  ├── + createAlignedTimeSeries
  ├── createMultiTimeSeries	[vim server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +1830]
  ├── alterTimeSeries	[vim server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +1899]
  ├── + setStorageGroup
  ├── + deleteStorageGroups
  ├── operateTTL	[vim server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +1460]
  ├── + loadConfiguration
  ├── operateLoadFiles	[vim server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +1182]
  ├── operateRemoveFile	[vim server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +1429]
  ├── operateUnloadFile	[vim server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +1441]
  ├── operateFlush	[vim server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +511]
  ├── operateMerge	[vim server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +470]
  ├── operateSetSystemMode	[vim server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +507]
  ├── operateClearCache	[vim server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +474]
  ├── + getFullPath
  ├── + p.getPartitionId
  ├── + StorageEngine.getInstance
  ├── + removePartitions
  ├── + getStorageGroupName
  ├── operateCreateSnapshot	[vim server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +479]
  ├── operateCreateFunction	[vim server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +438]
  ├── operateDropFunction	[vim server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +443]
  ├── operateCreateTrigger	[vim server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +448]
  ├── operateDropTrigger	[vim server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +454]
  ├── operateStartTrigger	[vim server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +459]
  ├── operateStopTrigger	[vim server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +465]
  ├── operateKillQuery	[vim server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +483]
  ├── + QueryProcessException
  ├── + e.getMessage
  ├── + createTemplate
  ├── + dropTemplate
  ├── + appendTemplate
  ├── + pruneTemplate
  ├── + setTemplate
  ├── activateTemplate	[vim server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +419]
  ├── + unsetTemplate
  ├── operateCreateContinuousQuery	[vim server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +528]
  ├── operateDropContinuousQuery	[vim server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +533]
  ├── + settle
  ├── processShowQueryResource	[vim server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +2192]
  ├── UnsupportedOperationException
  └── + plan.getOperatorName
  • UDF
javatree.pl  'UDF' '' 0 0


  ^UDF$
  └── UDF
      └── UDTF
          ├── Accumulator
          ├── Adder
          ├── Max
          ├── Multiplier
          ├── SlidingSizeWindowConstructorTester0
          ├── SlidingSizeWindowConstructorTester1
          ├── SlidingTimeWindowConstructionTester
          ├── TerminateTester
          ├── UDTFCast
          ├── UDTFConst
          ├── UDTFConstE
          ├── UDTFConstPi
          ├── UDTFContains
          ├── UDTFExample
          ├── UDTFMatches
          ├── UDTFTimeDifference
          ├── ValidateTester
          ├── Counter
          │   ├── DoNothingCounter
          │   ├── DropwizardCounter
          │   └── MicrometerCounter
          ├── UDTFMath
          │   ├── UDTFAbs
          │   ├── UDTFAcos
          │   ├── UDTFAsin
          │   ├── UDTFAtan
          │   ├── UDTFCeil
          │   ├── UDTFCos
          │   ├── UDTFCosh
          │   ├── UDTFDegrees
          │   ├── UDTFExp
          │   ├── UDTFFloor
          │   ├── UDTFLog
          │   ├── UDTFLog10
          │   ├── UDTFRadians
          │   ├── UDTFRound
          │   ├── UDTFSign
          │   ├── UDTFSin
          │   ├── UDTFSinh
          │   ├── UDTFSqrt
          │   ├── UDTFTan
          │   └── UDTFTanh
          ├── UDTFSelectK
          │   ├── UDTFBottomK
          │   └── UDTFTopK
          └── UDTFValueTrend
              ├── UDTFDerivative
              │   ├── UDTFCommonDerivative
              │   └── UDTFNonNegativeDerivative
              └── UDTFValueDifference
                  ├── UDTFCommonValueDifference
                  └── UDTFNonNegativeValueDifference

三. 结束语

细节略过,有兴趣的同学可以继续深入.

理论通识和工程落地之间是细节鸿沟,只有深入钻研细节, 才能感受代码之美.

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69946831/viewspace-3157664/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-09-09

  • 博文量
    2646
  • 访问量
    42202