DatabaseJoiner
基于一个或多个通用键,将外部表的属性连接到工作空间中已经存在的特性。
典型的用途
- 将外部数据库表的属性连接到工作空间中已有的特性。
它是如何工作的?
DatabaseJoiner查询一个外部表,以检索与某个特性关联的属性。将一个或多个特性属性(主键)与数据库中一个表中的一个或多个列(外键)匹配,并将来自匹配表行的值作为属性添加到特性中。
有许多匹配方法(基数)可用 - 匹配所有(1:m),第一(1:0..1 +),恰好一个(1:1)或零或一(1:0..1).不符合匹配条件的功能通过<拒绝>端口输出。
这_matched_recordsattribute指定数据库中的数据库中的记录匹配。多个匹配可以创建多个功能或将列表属性添加到单个功能。
DatabaseJoiner允许基于多个属性键的简单连接关系,并且不需要对SQL的了解 - 这通常对简单的查找表来说非常有效。
在本例中,我们希望从PostGIS数据库中的表中检索属性,并将这些属性添加到存储在shapefile中的park多边形中。这些公园都有一个身份证号码,人们可以用它来加入。
在这个工作空间中,我们首先读取Parks shapefile,然后将park特性路由到DatabaseJoiner中,在那里我们将检索所需的其他属性。
在参数对话框中,第一步是定义外部数据库—很像配置常规数据库格式阅读器。
建立数据库连接后,我们现在通过table旁边的浏览按钮选择所需的表(public.Parks)。这将载入一个可供选择的可用表列表。然后,我们从进入的公园(Feature attribute)和连接的表(table Field)中选择要连接的属性。在这两种情况下,都会调用属性ParkId.
要添加的字段确定将外部数据库表中的哪些属性添加到Park特性中。我们全选它们。
默认值基数那多个匹配,并且属性合并将提供我们想要的结果。
join端口的输出特性现在具有从外部数据库表检索的附加属性。请注意,_matched_records属性显示遇到了多少匹配—在本例中是一个。
使用笔记
- 为了获得最佳性能,请确保键(要连接的属性)在数据库中建立了索引。如果键被索引,DatabaseJoiner可以比其他连接转换器更有效。
- 要连接工作区中已经存在的两个特性流,请考虑使用featuremerger.,这也提供了几何合并选项。
- 如果所有数据都驻留在支持sql的源中,请考虑使用SQLCreator.或者SQLExecutor.,它还可以执行在源数据库中处理的更复杂的连接查询。对于简单的连接,DatabaseJoiner可能是最有效的方法。
- DatabaseJoiner不需要SQL知识。
- 要在非SQL数据源上执行SQL连接查询(简单或复杂),请考虑使用inlinequerier.
选择功能加入方法
许多转换器可以根据匹配的属性、表达式和/或几何图形执行数据连接。在为特定的连接任务选择一个连接时,需要考虑连接的复杂性、数据格式、索引、冲突处理和期望的结果。有些转换器使用SQL语法,有些则直接访问外部数据库。他们可能支持,也可能不支持列表属性阅读和创造。
一般来说,选择一个最具体的任务,您需要完成将提供最佳的性能结果。如果有不止一种方法可以完成(通常是这样),那么在性能测试替代方法上花费时间可能是值得的。由于读取外部表时是否存在关键索引(与工作空间中已经存在的功能相反),性能可能会有很大差异。
变压器 |
匹配的 |
使用SQL语句 |
可以创建列表 |
输入类型 |
值得注意的 |
描述 |
---|---|---|---|---|---|---|
featurejoiner. | 属性 | 不 | 不 | 特性 |
|
通过基于公共键属性值组合特性的属性和/或几何形状来连接特性。执行等同于Inner、Left和Full SQL连接的操作。 |
featuremerger. | 属性 | 不 | 是的 | 特性 |
|
将一组功能的属性和/或几何合并到另一组特征上,基于匹配的密钥属性值和表达式。 |
listbasedfeaturemerger. | 列表属性为单一属性 | 不 | 是的 | 特性 |
|
根据匹配,将一组特征的属性和/或几何形状合并到另一组特征上列表属性带有键属性值和表达式的值。 |
inlinequerier | SQL查询 | 是的 | 不 | 特性 |
|
从引入的特性创建一组SQLite数据库表,对它们执行SQL查询,并将结果作为特性输出。 |
SQLCreator. | SQL查询 | 是的 | 不 | 外部DB. |
|
根据对数据库执行一次SQL查询的结果生成FME特性。为SQL查询结果的每一行创建一个FME特性。 |
SQLExecutor. | SQL查询 | 是的 | 不 | 外部DB. |
|
针对数据库执行SQL查询。为进入变压器的每个发起功能发出一个查询。查询的启动功能和结果都可以作为特征输出。 |
DatabaseJoiner | 属性 | 不 | 是的 | 外部DB和功能 |
|
基于一个或多个通用键,将外部表的属性连接到工作空间中已经存在的特性。不需要SQL知识。非阻塞的变压器。 |
匹配 | 几何和/或属性 | 不 | 是的 | 特性 |
|
检测彼此匹配的功能。在具有匹配的几何形状,匹配属性值或两者匹配时,将声明要匹配。也可以指定必须在要素之间不同的属性列表。 如果仅在属性上匹配(不是几何),则使用FeatureMerger或其他方法将提供更好的性能。 |
配置
输入端口
要与外部表中的属性连接的特性。
输出端口
成功匹配的功能。
没有匹配的特征。
参数
DatabaseJoiner是一个非常强大的转换器,具有许多与性能相关的设置。
格式 | 选择外部数据集的格式,或允许它从所选数据集中猜到。 |
数据集或连接 | 选择要读取的数据集。根据格式,这可以是文件,文件夹或数据库连接。 |
参数 | 访问特定于所选读取器和数据集的读取器参数。 |
表格 | 指定要连接的表。单击Browse按钮从列表中选择表。注意,只有在完全指定阅读器格式、数据集和特定于格式的参数之后才能选择此选项。 | ||||||||
加入在 | 从传入功能中选择属性及其将用于查找匹配的相应表字段。当所有属性的值等于其对应表字段的值时,会匹配。 表条目小部件中的每个属性和列对都有一行。您可以通过单击右侧右侧的加号(+)按钮添加更多对。同样,通过按下减号( - )按钮,您可以删除对。必须为加入工作指定至少一对。 从“功能属性”列中的下拉列表中选择属性。(您可以直接在相应的表字段中输入或通过单击“浏览”按钮从列表中进行选择。)对于列出可用表字段的浏览按钮,需要指定从表中读取所需的所有信息。 加入行工具: 这些工具可以用来添加那删除那切那复制, 和粘贴行。 |
||||||||
要添加的字段 | 指定匹配表行中的字段列表,以加入传入功能。 要从列表中选择字段,请单击“浏览”按钮。将出现显示可能字段列表的对话框。在您要添加的每个字段旁边的选中,然后单击“确定”。 如果未指定字段,则将添加来自匹配行的所有字段。 |
||||||||
基数 | 指示数据库行和每个特性之间的关系类型。这将描述与每个特性匹配的行数,以及如果没有找到预期的行数,DatabaseJoiner将采取什么行动。 选择包括:
这必须匹配规则非常严格。当有疑问时,使用匹配第一或者匹配所有. |
||||||||
多个匹配 | 指定如何给出多个匹配的结果。 为每种匹配创建一个功能:匹配的每一行被添加到传入功能的副本中。在这种情况下,对于每个功能,将有匹配的功能。如果没有匹配,则该功能退出unjoined.输出端口。 在列表属性上添加字段:匹配的每一行都被添加到特性的list属性中。如果没有匹配,则该功能退出unjoined.输出端口。 |
||||||||
加入列表名称 | 用于追加多个匹配项的列表属性的名称。 笔记:属性列表不能从Workbench中的输出模式访问,除非首先使用对它们进行操作的转换器来处理它们,例如list exploder.或者ListConcatenator.或者,attributeexposer.可以使用。 |
累积模式 | 如果合并加入被选中,从功能和表中的属性将被合并,并且在冲突中的情况下解决冲突将使用参数。 如果前缀加入选择,然后所有传入属性都将以前缀设置为呈现字首参数。 |
解决冲突 | 当累积模式被设定为合并加入. 使用原来的和使用加入在属性冲突的情况下,将分别优先考虑原始属性和传入属性。 |
字首 | 指定的值用作传入属性的前缀累积模式是前缀加入. |
提示:
预取查询 | 仅用于数据库格式。 对于支持SQL的格式,可以通过发出预取查询将DatabaseJoIner缓存预加载(即,填充匹配之前的特定数据集)。此预取查询可以选择整个表或最有可能由要素属性匹配的表的选定部分。 例如,“高速公路”类型的许多FME特征需要数据库匹配。数据库表(myRecords.)有一个领域(record_type),使用多个值;道路,公路,大道,街道。FME功能将永远只匹配到哪里record_type =高速公路因此,如果发出以下预取,则整体连接过程将更有效: 从MyRecords中选择*,其中Record_type ='Highway' 笔记:除非预取查询穷定,否则缓存大小限制适用。请参阅预取令人遗憾,以了解什么构成详尽预取查询 |
预取的 | 仅用于数据库格式。 已知检索所有可能匹配的预取查询被称为详尽的查询.在这种情况下,永远不会进一步查询数据库以寻找匹配。当在详尽查询的缓存结果中找不到匹配时,就假定不存在匹配。 如果预取的被设定为是的,这表示预取是否详尽(并且用户不希望进一步查询数据库)。即使它被设置为不,但是,任何不包含WHERE子句的预取查询都被认为是穷举的,其形式为: 从桌面中选择* 笔记:当FME考虑要穷的预取查询时,将忽略缓存大小限制。这是因为缓存必须包含查询中的所有结果。 |
缓存大小 | 仅用于数据库格式。 如果您不想接受5000的默认值,请在本地指定要缓存的行数。您可以选择指定SQL查询以预加载缓存。请注意,如果预取查询穷举,则忽略缓存大小。 |
修剪关键字段 | 出现字符字段。 对关键字段进行调整可能会显著降低性能,只有在知道数据库中的键列值包含尾随空格时才应该这样做。 如果使用穷举预取查询则没有效果(参见上面的解释)预取的). 笔记:包含这个参数是为了向后兼容,大多数用户将不需要使用它。只能使用Workbench的窗格访问该参数。 |
编辑变压器参数
使用一组菜单选项,可以通过引用工作区中的其他元素来分配变压器参数。一些变压器也可提供更高级的功能,例如高级编辑器和算术编辑器。要访问这些选项的菜单,请单击除适用的参数旁边。有关更多信息,请参阅变压器参数菜单选项.
定义值
有几种方法可以定义在Transformer中使用的值。最简单的方法是简单地输入值或字符串,其中可以包括各种类型的函数,如属性引用、数学和字符串函数以及工作空间参数。有许多工具和快捷方式可以帮助构造值,通常可以从值字段附近的下拉上下文菜单中获得。
使用文本编辑器
文本编辑器提供了一种方便的方法来构建来自各种数据源的文本字符串(包括正则表达式),例如属性,参数和常量,其中结果直接在参数内使用。
使用算术编辑器
算术编辑器提供了一种方便的方法来从各种数据源(如属性、参数和功能函数)构造数学表达式,其中结果直接在参数中使用。
条件值
根据通过或失败的一个或多个测试条件设置值。
内容
表达式和字符串可以包含许多函数、字符、参数等等——无论是直接在参数中输入,还是使用其中一个编辑器构造。
参考
处理行为 |
|
功能持有 |
不 |
依赖性 | 格式依赖-某些格式可能需要第三方驱动程序 |
FME授权级别 | FME基本版及以上 |
别名 | 木匠 |
历史 | |
类别 |
FME社亚搏国际在线官网区
FME社区是演示亚搏国际在线官网、操作指南、文章、faq和更多内容的地方。获得问题的答案,向其他用户学习,并对新功能提出建议、投票和评论。
搜索关于DatabaseJoiner的所有结果关于FME社区。亚搏国际在线官网
例子可能包含在开放政府许可证-温哥华下许可的信息