如何使用FME连接数据

本文介绍了FeatureJoiner转换器,一种用于连接数据集的工具。它支持左连接、内连接和全连接模式,并详细解释了每种模式的工作原理及输出特点。此外还对比了FeatureJoiner与FeatureMerger的不同之处。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文发布时间:2018-05-17 09:59:03

什么是FeatureJoiner?

FeaturesJoiner是将数据连接在一起的转换器,它最接近FeatureMerger(并且可能最终取代它)。它在工作空间中是这样的:

 

该工作区将Facility要素与PostalAddress要素相结合。你可以看到,代替Requestor/Supplier这个转换器有Left/Right端口,少一个输出端口; 但除此之外它确实看起来像FeatureMerger。

但是,查看参数对话框会发现更多差异:

 

Join On,Conflict Resolution和Geometry Handling参数非常明显,与FeatureMerger中已有的类似。但是关键参数是Join Mode。

Join Modes

要了解Join Mode就有必要了解左连接和内连接。Join Mode选择的三种模式是左连接,内连接和全连接。

模式

描述

图片描述

Joined

Unjoined Left

Unjoined

Right

Left

Left端口要素寻找匹配的要素并且无论是否找到匹配要素都输出

 

所有的匹配要素加上没有匹配的要素

没有用上的Right端口要素

Inner

Left端口要素寻找匹配的要素并且只输出匹配了的要素

 

只输出匹配了的要素

没有找到匹配的Left要素

没有用上的Right端口要素

Full

无论是否找到连接,Left和Right要素都会成Joined output端口输出

 

所有匹配上的要素加上没有找到匹配的Left和Right要素

理解操作的最简单方法是:每个图中的重叠部分总是输出。这是一个连接,所以这些功能通过连接端口输出。

Left / Inner / Full参数不控制连接了的的要素,而是未连接的要素。

l  在Inner模式下,没有连接的要素通过Unjoined Left或Unjoined Right端口输出。

l  在Left模式下,没有匹配的Left要素仍然通过Joined端口输出,没有匹配的Right要素通过Unjoined Right端口输出。

l  在Full模式下,没有匹配的Left和Right要素仍然通过Joined端口输出。

Facility例子

接下来以Facility/Address为例,如何实现将Facility要素和 Address记录相匹配。

 

在Inner模式下,只有匹配了Address的Facility才会通过Joined端口输出,如果你想得到没有匹配的要素,那么通过UnjoinedLeft端口输出的就是。

但是在Left模式下,不管Facility要素是否有匹配的,都会通过Joined端口输出。输出的数据质量并不是很好,但是如果我们知道并不是所有的Facility都有匹配的Address,那这个模式也很好。

在Full模式下,Joined端口输出的要素包括了所有的Address,在这个例子的情况下可能不需要,但是在其他时候可能会用上。

到这里,你会注意到FeaturesJoiner没有 与FeaturesMerger“handle duplicate suppliers”参数等效的功能。要理解这点你需要知道我们的主旨是“Match”

Multiple Join Matches

为了理解这一点我们来看看包含了要素计数的数字:

 

多少要素将从Joined端口输出呢?这得看情况。

如果我们假设每个Facility和一个Address之间严格1:1匹配,则8个要素将以连接的方式输出。为什么?因为我们有8对匹配。计数将如此:

 

Full模式下的Joined端口输出的1463442个要素包括了连接上了的8个要素,以及没有连接上的1463434个要素。

这很好。但是,我们可能在Facility和Address表之间没有这样一个纯粹的1:1匹配。我们可能会遇到1:M,M:1,甚至M:M的情况。

假设每个Facility在Address中有两个匹配项,我们会得到这个:

 

为什么我们会得到比Left端口输入的更多的要素呢?因为每一次匹配我们都会得到一条要素,这里出现了16次匹配。

这是FeaturesMerger做不到的,它会忽略掉第二个匹配或者创建一个列表,但是FeaturesJoiner是按照SQl等价的方式设计的,所以它工作的方式不同。事实上在极端的情况下,我们假设每个Facility都有AddressID=1,并且每个Address都有AddressID=1,那么每个Facility都会匹配到每个Address!

那么我们会得到8 x 1463442个匹配。

换句话说,在Left或Inner模式下我们可以输入8个“requestor”要素并且得到11707536个要素,这没有错只是可能和你的习惯不同。

输出顺序

作为高级主题的一部分,匹配要素从转换器输出的顺序和从Left端口输入的顺序相同。因此如果Left要素在进入转换器时安装特定的顺序排序,那么对于Left模式或者Inner模式,该顺序在输出中将保持不变。

如果在Full模式下要保持完整的顺序不变,那么Left和Right要素必须按照顺序排序。

使用哪个转换器?

那么你应该使用哪种转换器?那么需要考虑两个方面:功能和性能。

对于使用数据库术语和功能的用户来说,FeatureJoiner在功能上来说肯定更好。它旨在模仿SQL,因此结果应该与输入相同的SQL连接命令相同。

关键的输出差异是FeatureJoiner的每个要素匹配概念。FeatureMerger会让你创建一个列表。但是我想说,很多时候你立即使用ListExploder将列表分解为要素,所以我不确定在FeatureJoiner中没有List参数会带来多大的不便。

另外,如果你确实需要列表,使用ListBuilder对Joined端口输出的要素进行创建列表,并且按照连接关键属性进行分组。这是输出顺序很重要的地方,因为如果FeatureJoiner输入适当排序,你可能可以在ListBuilder中设置按组排序的输入。

至于性能,FeatureJoiner拥有改进的设计,并通过使用加速许多其他读模块,写模块和转换器的“要素表”技术获得更多的提升。所以如果性能很重要,那么你绝对应该试用FeatureJoiner。

总结

起初,您可能会更熟悉熟悉的FeatureMerger,但至少尝试使用FeatureJoiner是值得的。

   你甚至可以学习一些术语来帮助你实现理想的工作!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值