免费视频|新人指南|投诉删帖|广告合作|地信网APP下载

查看: 1367|回复: 7
收起左侧

更新插入和遛狗: FME 2019中变化检测的新功能

[复制链接]

665

主题

2万

铜板

34

好友

传奇会员

Rank: 30Rank: 30Rank: 30Rank: 30Rank: 30Rank: 30Rank: 30Rank: 30

积分
20649

精华勋章爱心勋章地信专家组贡献勋章冰雪节勋章

发表于 2021-5-20 14:58 | 显示全部楼层 |阅读模式

原文链接:

https://blog.safe.com/2019/01/change-detection-2019-fmeevangelist184/


最近我讨论了关于数据库的更新,提到有两个常见的场景。

一种是你收到更新日志——要更新的列表——将它们应用到你的控制数据库。这是简单的一种情况,因为你提前知道变化的内容以及需要更新的要素。


第二种更新是你收到一个完整的新数据集,没有任何提示告知哪些是新增的或更新的。这种情况就需要你进行变化检测。这之前,我们经常使用FME Hub转换器的一个叫做UpdataDetector的转换器。但是在2019中,我们对ChangeDetector转换器做了很好的更新升级,从现在开始,它应该成为你的首选转换器。


一、变化检测: 有什么新的功能?

在2018及之前的版本中,ChangeDetector转换器将“original”端口的数据集与“revised”端口的进行比较,然后将要素分别输出到Added,Deleted和Unchanged端口。

  • Added: 在修订(revised端)数据集中存在,而原始数据集中不存在的记录
  • Deleted: 在原始数据集中存在,而修订(revised)数据集中不存在的记录
  • Unchanged: 修订(revised)数据集中与原始数据集中匹配的记录

但是,它无法识别更改的记录。如果一个记录在修订数据和原始数据中都存在,但是现在它的属性值不同,那么将被当作一个新的要素(从Added输出)。这使得执行“更新”(记录已经存在时,进行数据库更新)变得困难,因为很难判断某个要素是否是真正的新要素。


在2019中,这个转换器能够处理更新记录。新转换器的设计将更新的要素通过Updated输出端口输出:

所以这是非常重要的。它极大的拓宽了这个转换器的变化检测范围。

但是,存在原始要素与修订要素进行匹配时的问题。没有原始记录进行比较,FME无法判断修订要素是否被更新。这个通过关键属性值来完成,意味着2019中ChangeDetector具有新的参数:

我们马上来看一个例子。现在先观察,在参数对话框中有一个叫做Update Detection Key Attributes的参数,通过它来选择ID或关键值。

如果这个功能听起来很熟悉,很可能是因为我们在FME Hub转换器中有个叫做UpdateDetector的转换器……


二、替换FME HubUpdateDetector

创建UpdateDetector是为了填补ChangeDetector功能的空白。根据它的下载数量可知它是一个非常受欢迎的转换器。但是现在它已经被弃用了:


新的ChangeDetector不止替换hub上的这个转换器,它还在功能和性能两个方面进行了提升。已经有UpdateDetector的工作空间还是可以使用,但是我们建议你使用新的ChangeDetector进行替换。

现在我们来看一个关于新的ChangeDetector如何工作的例子……


三、ChangeDetector 例子

假设我有一个地址数据库:


除此之外我还收到一个数据的新版本。现在我必须知道哪些地址记录发生了变化,这样我才能把变化推送到数据库中。我只需对每个数据集添加读模块,并将它们连接到ChangeDetector:


这里我看到在原始数据和修订数据之间,有35条记录发生了变化,其中2条新增记录。同时在修订数据中删除了13条记录。大部分记录都没有发生变化。

现在看一下我的转换器参数设置:


  • GlobalID是更新检测的关键属性。这个属性告诉FME如何对原始数据和修订数据进行匹配。
  • Selected attribues(选中属性)是我用于检查变化的属性。例如,如果两个记录具有匹配的GlobalID,检查这些属性之间的差异。
  • 这个标记告诉转换器对于空间数据集,同时检测几何图形。一些高级参数用于控制精确的检测(如下)。
  • 这个参数定义了一个列表,用来存储发生的变化;例如:哪个属性不同以及如何发生变化。

正如参数稍有不同,输出的结果也如此……

3.1 新的变化检测输出

由于ChangeDetector转换器现在检测匹配——不是每个属性都必须检测——所以原始记录和修订记录并不完全相同时,也可能被当作匹配记录。例如,属性a,b和c相同,但是属性d不同。这样的要素仍然匹配,这是因为在匹配选中属性(Selected Attributes)这里没有选择属性d。

要处理该场景,参数允许你输出匹配要素中的任何一个或两个:

如果你输出所有要素,将为要素添加属性Match ID,这样便于你区分相互匹配的要素。

另外,通过设置列表名称,输出要素记录原始数据和修订数据间的不同。例如,这个记录具有两处不同:

列表告诉我们有两个属性(OWNERNM1 和OWNERNM2)的属性值被修改,而这个列表:

…告诉我们要素的几何对象被修改。

同样如UpdateDetector已有,这个转换器设置fme_db_operation 属性。这里时删除记录(在原始数据中有,而修订数据中没有的记录)的例子:

这意味着我可以直接把要素输入到数据库写模块,指定要素操作(fme_db_operatio)和匹配字段(这里为GlobalID)……

…我的地址数据库将自动进行必要的更新、增加和删除的修改操作。

四、新的容差算法

你应该注意到一个叫做Vector Tolerance的新的高级几何参数:

尽管有这个名字,但是与之前在FME 2018时讨论的容差设置不一样。为何这个容差不同呢?因为这里它不是试图找到两条线在哪里相交或者试图调整已有的点。相反,它是使用叫做Fréchet distance(费雷歇距离)的方法来查找两个要素是否在设定的容差范围内,

Fréchet distance(费雷歇距离)是利用两个要素间的距离得到两个空间要素(通常是“曲线”)相似性的度量。

常见而简单解释就是遛狗。比如说你牵着狗走在小路上。你走在一条相对较直的线上(红线,A,下方),但你的狗会左右移动,以便闻树(蓝线,B):

问题在于你们每个人走自己的路需要多长时间?在上图中,小狗和步行者路线间的最大距离标记为F。如果小狗的牵引距离至少为F,那么我们可以各自走自己的路,而不会被相互牵引。

这个概念给变化检测提供了很好的解决方案。在FME中,如果原始要素和修订要素间的Fréchet distance(费雷歇距离)小于指定的容差值,则认为要素没有发生变化。

我们觉得这个算法比以前的方法有改进。它适用于更多的几何类型,也可以应用于有容差的宽松匹配模式,这在以前是不可能的。

4.1 Fréchet? 哪个Fréchet?

如果你不参与几何计算,请跳过这个部分。然而,对于你熟悉的Fréchet distances(费雷歇距离),你会发现这是真正的费雷歇,而不是离散的费雷歇(只有计算顶点之间的距离)。当Lenient Geometry Matching(宽松几何匹配)参数启用时,FME将使用Weak Fréchet(弱费雷歇)

当步行者或小狗被允许回退时,这就是Weak Fréchet(弱费雷歇)。在True Fréchet(真费雷歇)中,他们需要保持前进。

在这个例子中,遛狗者(A)保持走在一条直线上。小狗刚开始保持直线(b1),但是一下转到右边(b2)。他们仍然沿着路线向前,但是他们的路线方向不同:

在True Fréchet(真费雷歇)中,步行者无法改变他们的路线来消灭这种偏差。他们最多能做的是停在当前的位置。例如步行者在点a1停下等待缩小牵引距离,而狗则遵循它们的蜿蜒路径:

也许,这可能是类比分解的地方。 Frechet distances(费雷歇距离)是在事先知道路径的情况下计算出来的,而在现实生活中不可能知道狗会走哪条路线!

无论如何,在弱费雷歇(Weak Fréchet)中,步行者被允许改变他们的路线。当小狗开始从b1到b2时,步行者可以折回到a2,以缩短Fréchet(费雷歇)距离:

如果你不理解,你也不必担心。只需要观察这两个路线,并记住Lenient Geometry Matching(宽松几何匹配)选项意味着这两个要素更有可能被归类为一个匹配。

五、更多变化检测信息

上述的例子展示了新的变化检测效果。但是,在很多情况下你可能希望执行旧的ChangeDetector的Added/Deleted/Unchanged(增加/删除/未变化)的效果,你不需要查找修改的记录。

如果需要这样的情况,只需要简单的将Update Detection Key(更新检测键值)参数留空:

这样要素将根据他们来自Original输入端口或Revised端口分别被识别为插入(Inserted)或删除(Deleted):

然后如果你没有2019,你仍然可以下载UpdateDetector。现在,术语“UpdateDetector”仅作为ChangeDetector的别名出现在Workbench中; 因此,通过FME Hub访问转换器,确保在界面中选中Show Deprecated选项。


另外,Matcher转换器在2019中做了一个小的改动。它的参数对话框已更新,并获得与ChangeDetector相同的容差参数和算法。

六、总结

这就是关于变化检测更新的内容。现在你读了这篇文章,当你升级到FME2019后,看到ChangeDetector新的对话框后,就不会那么惊讶了。

我相信这是一个很有用的更新,我也很期待使用它。


本文转载来自CSDN作者:fmechina  版权归作者所有

原文链接:https://blog.csdn.net/fmechina/article/details/88655242?spm=1001.2014.3001.5501

6

主题

1万

铜板

20

好友

地信院士

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

积分
2985
发表于 2021-5-20 15:15 | 显示全部楼层
多谢分享
回复

使用道具 举报

0

主题

1万

铜板

1

好友

高级工程师

Rank: 9Rank: 9Rank: 9

积分
722
发表于 2021-5-20 15:30 | 显示全部楼层
学习了学习了学习了
回复 支持 反对

使用道具 举报

1

主题

899

铜板

2

好友

助理工程师

Rank: 5Rank: 5

积分
150
发表于 2021-5-20 16:53 | 显示全部楼层
谢谢分享!
回复

使用道具 举报

头像被屏蔽

141

主题

980万

铜板

3万

好友

管理员

Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

积分
627184
发表于 2021-5-20 17:23 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

10

主题

2万

铜板

34

好友

黄金会员

Rank: 23Rank: 23Rank: 23Rank: 23Rank: 23Rank: 23Rank: 23

积分
4394

精华勋章灌水勋章活跃勋章贡献勋章

发表于 2021-5-21 16:42 | 显示全部楼层
谢谢分享
回复

使用道具 举报

0

主题

3万

铜板

10

好友

钻石会员

Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26

积分
6105
发表于 2021-12-6 14:52 | 显示全部楼层
谢谢分享
回复

使用道具 举报

0

主题

1047

铜板

4

好友

助理工程师

Rank: 5Rank: 5

积分
399
发表于 2022-8-12 16:58 | 显示全部楼层
感谢分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

在线客服
快速回复 返回顶部 返回列表