数据流更新失败问题排查
1. 简介
在数据工厂的使用过程中,会存在数据流更新失败的情况。
以下是导致数据更新失败的几种情况:
- 存在笛卡尔积
- 输出数据量超出限制
- 横向连接配置不正确
出现更新失败时可以查看 更新日志 排查问题,具体原因及解决方案参见下文详解👇
2. 笛卡尔积结果数据量过大
2.1 问题描述
当执行日志中出现如下图所示的数据更新失败的报错时,表示存在笛卡尔积且经过笛卡尔积输出的数据条数大于 10 w 条:
2.2 原因分析
当数据流节点为 横向连接 时,可能会出现笛卡尔积。
1)如何判断出现笛卡尔积?
判断是否出现笛卡尔积的公式为:
经横向连接计算后的数据总量 >(n+m)*2
n:表 A 的数据量
m:表 B 的数据量
在数据预览时,如果出现笛卡尔积,系统也会给出提示:
2) 笛卡尔积示例
以下为两个表数据经过横向连接后的计算结果(3 种连接方式均可导致更新失败):
横向连接后的总数据量=5*5+4*4=41
(m+n)*2=(9+9)*2=36
41>36
由于图中横向连接后的数据总量大于(表A+表B)的数据总和的 2 倍,所以计算结果将出现笛卡尔积。因计算的结果数据不超过 10 w 条,所以触发笛卡尔积也不会更新失败。
如果实际业务中,同时满足笛卡尔积且输出的数据超过 10 w 条时,将触发数据流更新失败。
注:不论是左连接、右连接、内连接还是全连接,只要计算出来的结果符合笛卡尔积且输出数据大于 10 w 条,均会导致数据流更新失败。若数据结果少于 10 w 条,则正常更新。
2.3 解决方案
当结果出现笛卡尔积且输出数据量大于 10 w 条时,需要调整数据工厂配置或者修改原始数据(删除或新增数据,使得上述限制不成立即可)。
如上述示例中的笛卡尔积,我们可以通过修改横向连接的配置解决。
将产品对应的「规格」也设为连接字段,这样就可以将产品规格对应的数量和价格连为一张表了,而且也不会触发笛卡尔积限制。
3. 输出数据量超出100万条
3.1 问题描述
当执行日志中出现如下图所示的报错时,表示输出数据量超出限制导致数据更新失败。
3.2 原因分析
通过数据工厂计算的数据最终输出结果上限为 100万条,若超过限制则数据流将更新失败。
3.3 解决方案
当输出数据量超出限制时可以:
- 减少输入源表单个数或删除输入源表单部分数据来减少输入总数据量;
- 调整数据流配置减少输出数据量大小。
4. 输出数据量大于输入的2倍
4.1 问题描述
当执行日志中出现如下图所示的报错时,表示输出数据量超出限制导致数据更新失败。
4.2 原因分析
如下图,便会导致输出数据总量为输入数据总量的 3 倍,因此会触发输出数据量的限制,而导致数据流更新失败。
4.3 解决方案
当输出数据量超出限制时可以:
- 增加输入源表单个数(增加输入节点)以增加输入总数据量;
- 调整数据流配置减少输出数据量大小。
5. 横向连接配置不正确
5.1 问题描述
当执行日志中出现如下图所示的报错时,表示横向连接配置不正确。
5.2 原因分析
当数据源的表单字段删除后,若横向连接配置了该字段作为连接字段,数据流将会更新失败。
5.3 解决方案
点击更新失败的数据流,重新配置横向连接节点。