You are viewing a plain text version of this content. The canonical link for it is here.
Posted to reviews@iotdb.apache.org by GitBox <gi...@apache.org> on 2020/02/11 01:36:03 UTC

[GitHub] [incubator-iotdb] EJTTianYu commented on a change in pull request #713: [IOTDB-418] New series reader

EJTTianYu commented on a change in pull request #713: [IOTDB-418] New series reader
URL: https://github.com/apache/incubator-iotdb/pull/713#discussion_r377412769
 
 

 ##########
 File path: docs/Documentation-CHN/SystemDesign/1-TsFile/4-Read.md
 ##########
 @@ -21,7 +21,545 @@
 
 # TsFile 读流程
 
-* org.apache.iotdb.tsfile.read.*
+本章节介绍 TsFile 的读取流程,内容总体上分为两部分,对过滤条件和时间表达式的介绍,以及对查询流程的详细介绍。
+
+* 1 过滤条件和查询表达式
+    * 1.1 Filter
+    * 1.2 Expression表达式
+        * 1.2.1 SingleSeriesExpression 表达式
+        * 1.2.2 GlobalTimeExpression 表达式
+        * 1.2.3 IExpression 表达式
+        * 1.2.4 可执行表达式
+        * 1.2.5 IExpression 转化为可执行表达式的优化算法
+* 2 TsFile 查询执行过程
+    * 2.1 设计原理
+    * 2.2 三大查询组件
+        * 2.2.1 FileSeriesReader 组件
+        * 2.2.2 FileSeriesReaderByTimestamp 组件
+        * 2.2.3 TimeGeneratorImpl 组件
+    * 2.3 归并查询
+    * 2.4 连接查询
+    * 2.5 查询入口
+    * 2.6 相关代码介绍
+
+## 1 过滤条件和查询表达式
+
+本章节首先介绍 Tsfile 文件读取时需要用到的过滤条件和查询表达式的相关定义;其次介绍如何将用户输入的过滤条件转化为系统可以执行的查询条件。
+
+### 1.1 Filter
+
+Filter 表示基本的过滤条件。用户可以在时间戳上、或某一列的值上给出具体的过滤条件。将时间戳和列值的过滤条件加以区分后,设 t 表示某一时间戳常量,Filter 有以下12种基本类型,在实现上是继承关系。
+
+Filter|类型|含义|示例
+----|----|---|------
+TimeEq|时间过滤条件|时间戳等于某个值|TimeEq(t),表示时间戳等于 t 
+TimeGt|时间过滤条件|时间戳大于某个值|TimeGt(t),表示时间戳大 t
+TimeGtEq|时间过滤条件|时间戳大于等于某个值|TimeGtEq(t),表示时间戳大于等 t
+TimeLt|时间过滤条件|时间戳小于某个值|TimeLt(t),表示时间戳小 t
+TimeLtEq|时间过滤条件|时间戳小于等于某个值|TimeLtEq(t),表示时间戳小于等 t
+TimeNotEq|时间过滤条件|时间戳不等于某个值|TimeNotEq(t),表示时间戳不等 t
+ValueEq|值过滤条件|该列数值等于某个值|ValueEq(2147483649),表示该列数值等于2147483649
+ValueGt|值过滤条件|该列数值大于某个值|ValueGt(100.5),表示该列数值大于100.5
+ValueGtEq|值过滤条件|该列数值大于等于某个值|ValueGtEq(2),表示该列数值大于等于2
+ValueLt|值过滤条件|该列数值小于某个值|ValueLt("string"),表示该列数值字典序小于"string"
+ValueLtEq|值过滤条件|该列数值小于等于某个值|ValueLtEq(-100),表示该列数值小于等于-100
+ValueNotEq|值过滤条件|该列数值不等于某个值|ValueNotEq(true),表示该列数值的值不能为true
+
+Filter 可以由一个或两个子 Filter 组成。如果 Filter 由单一 Filter 构成,则称之为一元过滤条件,及 UnaryFilter 。若包含两个子 Filter,则称之为二元过滤条件,及 BinaryFilter。在二元过滤条件中,两个子 Filter 之间通过逻辑关系“与”、“或”进行连接,前者称为 AndFilter,后者称为 OrFilter。AndFilter 和 OrFilter 都是二元过滤条件。UnaryFilter 和 BinaryFilter 都是 Filter。
+
+下面给出一些 AndFilter 和 OrFilter 的示例,其中“&&”表示关系“与”,“||”表示关系“或”。
+
+1. AndFilter(TimeGt(100), TimeLt(200)) 表示“timestamp > 100 && timestamp < 200”
+2. AndFilter (TimeGt(100), ValueGt(0.5)) 表示“timestamp > 100 && value > 0.5”
+3. AndFilter (AndFilter (TimeGt(100), TimeLt(200)), ValueGt(0.5)) 表示“(timestamp > 100 && timestamp < 200) && value > 0.5”
+4. OrFilter(TimeGt(100), ValueGt(0.5)) 表示“timestamp > 100 || value > 0.5”
+5. OrFilter (AndFilter(TimeGt(100), TimeLt(200)), ValueGt(0.5)) 表示“(timestamp > 100 && timestamp < 200) || value > 0.5”
+
+下面,给出“Filter”、“AndFilter”和“OrFilter”的形式化定义:
+
+    Filter := Basic Filter | AndFilter | OrFilter
+    AndFilter := Filter && Filter
+    OrFilter := Filter && Filter
 
 Review comment:
   OrFilter :=Filter && Filter? 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services