0

准确命名和解释的棘手问题 - 如果有任何不清楚的地方,请告诉我。

我有一个非规范化的数据流,请考虑:

Input one:

ID
Value
FKID

Input two:
FKID
DiffValue
CheckValue

输入一可以有多个输入两行,显然与FKID有关。

现在,加入后我可能会有类似的东西:

[ID] - [Value] - [DiffValue] - [CheckValue]
1 - A - D1 - C1
1 - A - D2 - C1
1 - A - D3 - C2

然后,我根据 CheckValue 进行条件拆分 - 搜索值:C2。如果是 C2,将 Value 更改为 DiffValue。留给我:

拆分一:

1 - A - D1 - C1
1 - A - D2 - C1

拆分二:

1 - D3 - D3 - C2

现在我想确保我的所有行都具有该 D3 值。这里的问题是,拆分可能永远不会变为真,在这种情况下,我需要它继续下去,保持原始 A 值,但如果只有 ONE 行满足校验值条件,则所有行都需要差异值。

脚本转换组件不起作用,因为它基于缓冲区,并且我无法缓存所有行,在将它们发送到输出之前一次对整个行集合执行代码。我什至不能对临时 SQL 做一个简单的保存 ID 并在之后基于 ID 进行查找,因为在条件拆分之后它是两个并行异步路径,所以我不能停止第一个拆分,直到临时 SQL 表已经被填充。

我可以做一个脚本目标,然后缓存所有行,在缓存每一行后执行我的操作,然后使用相关列进行自定义输出,但是,还有更多列(这是一个简化的示例),并且必须处理该自定义输出的维护是压倒性的。

我该怎么办?

4

1 回答 1

0

我通过在拆分之前添加一个额外的列来解决这个问题,称为 HasNeededValue(为了简单起见)。然后我删除了拆分,替换为单个脚本转换。

在流程行上,我检查了我需要满足的值(在示例中它是 CheckValue = C2),如果它满足我的条件,我将 HasNeededValue 设置为 1。然后我在 HasNeededValue 上的脚本之后添加了一个排序(desc ),将其全部汇集到一个新的脚本转换中,其中包含 [ID] 的列表。

在流程行上,我检查 HasNeededValue = 1,如果是,则将 DiffValue 复制到 Value,并将 ID 插入列表中。如果它不 = 1,那么我检查列表是否包含 ID,并将 DiffValue 复制到 Value。

这确保了可能具有在所有行上设置值所需的值的一行始终是第一个,并且我知道它是哪个 ID,对于不具有必要条件的行。

于 2013-08-22T16:37:51.977 回答