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的时候会产生分流,此时需要特别考虑多流。
由于多流被流量标记标识,则分流之后,需要分离流量标识。可以认为分流后的模块所有流量标识之和就是分流前的模块。
分流后,所有多流数据会根据流量表示进行分离,保证后续单流引用多流的操作正确。
例如:
如果订单主表的到货数量 为 子表到货数量==要货数量的子表和。那么这个判断就会产生分流,之后计算主表的要货数量就是一个子集的求和。