关于数据重复计算的问题

一个字段的标识符。展示的信息:从另一个字段到该字段的路径算子,

此刻有2个问题:
1.另一个字段是否是最近路径字段,如果不是,是最原始字段吗,如果是,当最近路径因为环境发生改变时,要更新该字段的标识符吗
2.字段的过滤判断等功能会添加其他字段进入,在每个表中的判断不一样,是否将表的元数据加入标识符中

路径算子提供的功能:
1.高路径算子可以包含低路径算子,当包含时,如a->b->c,当你要计算c的时候,你计算c的路径是abc,此刻b的标识符是ab,此时将算子abc转化为bc,省去a->b的重复计算
2.高路径算子不完全包含低路径算子时,可以通过标识符转化,如a-b-c-d-e-f,当你要计算f时,你有一个a-b-c-d-e2,此刻e2可以反向计算到d,则路径转化为e2-d-e-f


如何通过标识符实现这两种功能。

最简单的例子:

A1表有字段a+1 得到 B1表字段b,并且A1表为最原始字段,则a字段标识符为 :A1a, b字段为 A1a+1

然后加入一个过滤条件

A1表有字段a+1 where a2!=0 得到 B1表字段b,并且A1表为最原始字段,
则a字段标识符为 :A1a, b字段为 A1a+1wherea2!=0

加入B2表

A1表有字段a+2 where a2!=2 得到 B2表字段b,并且A1表为最原始字段,
则a字段标识符为 :A1a, b字段为 A1a+2wherea2!=2

此刻求C表c,C表c计算逻辑为 A1a+3wherea2!=2

所以要按算子顺序写,将B2.b 写为 (where A1.a2!=2)|(A1.A+2)
B1.b 写为 (where A1.a2!=0)|(A1.A+1)
C.c根据工程师的sql 解析为 (where A1.a2!=2)|(A1.A+3) 由于第一个算子和B2.b一样,第二个算子是加法具有可转化性,
工程师的sql被转化为 b2.b+1, 省去了A1的重复where计算。

接下来要面临的问题:
聚合等复杂的算子如何转化?
如果一串长sql不能完全转化,是否可以使用部分转化?若是部分转化,那如何将转化的部分和不转化的部分合起来?

posted @ 2021-01-04 20:47  肥仔佳文猪  阅读(200)  评论(0)    收藏  举报