跳到主要内容
版本:6.6.0

如何正确替换增量更新数据集的历史数据

场景

数据集设置的增量更新,每天定时运行。

过了几天或者一段时间后才发现某段时间范围的历史数据不正确或者不完整。

可能原因:数据库数据更新延迟,没有更新完就被抽取到BI里,需要重新抽取。

例如:MySQL抽取数据集2021-02-21当天数据不完整,需要重新更新这一天的数据。

推荐方法

1. 进入数据集概览页面,点击 “更新” 按钮后的菜单(…),找到“数据清理”。

image.png

2. 点击“新建规则”,然后选择时间字段,选择要清理的数据时间范围,点击“确定”保存。

注意:日期时间类型字段可以按照日期(天)来清理,清理范围不能精确到时分秒。

image.png

3. 点击左下角“预览”确认数据,然后点击“立即清理”, 2021-02-21当天数据被删除。

image.png

4. 再次点击更新按钮,在SQL输入框里直接修改原来的SQL where查询条件。

如果原来的日期字段格式为日期时间(timestamp/datetime), 那需要先用对应数据库函数转换为日期格式,然后和日期进行对比;当然也可以用日期时间和日期时间作对比,只要确保字段类型一致即可。

image.png

5. 预览数据无误后,确保更新方式为“添加新数据”,然后点击“确定”触发数据集更新。

此时历史数据已经替换更新完毕,如果有关联ETL,需要重新运行ETL,这样最终卡片上数据才会更新。

❌ 不建议方法:

1. 跳过“数据清理”,直接点击更新按钮,修改SQL,希望通过去重主键覆盖历史数据。

原因:去重主键可以自由选择字段,不一定能确保完整识别到重复数据并删除原来的历史数据,可能更新后保留在数据集里的不一定都是最新数据。

2. 直接修改模型结构里的SQL。

原因:修改模型结构里的SQL会导致原来的数据被清空然后重新抽取,数据量大的话更新时间会很长。

3. 直接修改增量更新里的SQL。

原因:一旦修改日期条件更新后,必须重新手动修改增量更新SQL语句,相当于要操作两次。忘记的话,之后每次更新都只会增量更新历史数据而不是最新数据。