Samsara v2.0 高级技巧

 

高级技巧


Samrara包含四大概念:单流、多流、分流、合流。


单流与多流(流量)

一张订单主表包含4张订单子表,那么主表就是单流、子表就是多流,有4条流。

由于在脚本里面并没有体现出数据的流量,那么此模块需要运行几次?生成多少结果?为了解决这些问题,引入了单流多流概念。

如果用户输入数据只有一条,则是单流,否则就是多流。

EXCHANGER TABLE1 E1
{COLUMN1 = TABLE2.COLUMN2}

TABLE1单流、TABLE2单流:正确
TABLE1单流、TABLE2多流:错误,无法匹配
TABLE1多流、TABLE2单流:正确,TABLE2将被运行多次
TABLE1多流、TABLE2多流:如果两表流量一致则正确。

唯一能够消除单流:多流错误的情况就是引入函数运算。

EXCHANGER TABLE1 E1
{
COLUMN1 = SUM(TABLE2.COLUMN2)
}

单流:多流。此时函数运算结果是一个值,所以正确。


流量如何判断?
通过用户输入初始化流量。单流则使用流量标记-1,多流则从0开始排序。
模块首先判断处理的表对象是否单流,else 判断表达式是否单流。
确定是单流后,凡是遇到需要引用多流对象,则默认其是参与函数运算,因此有多少引入多少。
确认是多流后,则需要根据流量标记进行引用。

如果用户不输入数据,全部由Loader产生怎么办?
处理方法可以参考用户输入的情况,只是输入的动作由samsara完成了。


分流与合流



当遇到Loader、Ifer、Switcher的时候会产生分流,此时需要特别考虑多流。
由于多流被流量标记标识,则分流之后,需要分离流量标识。可以认为分流后的模块所有流量标识之和就是分流前的模块。
分流后,所有多流数据会根据流量表示进行分离,保证后续单流引用多流的操作正确。

例如:
如果订单主表的到货数量 为 子表到货数量==要货数量的子表和。那么这个判断就会产生分流,之后计算主表的要货数量就是一个子集的求和。
原文地址:https://www.cnblogs.com/zc22/p/973403.html