span8
span4
注意:内容已更新到FME 2018.1,但视频仍显示2016.1,具有略微不同的例子。
存储在数据库中的信息不太可能保持不变。当这些更改的来源是别处的数据集时,必须进行批量更新。
这个示例执行混合的更新—首先执行插入操作,然后执行更新和删除操作—过滤数据以确定执行哪个操作。
注:虽然这个例子使用的PostGIS数据库,相同的技术也适用于其他数据库。
源数据是温哥华市公园的数据集:
的瓷砖礼貌MapQuest的
第一个任务是将市中心的公园加载到PostGIS中。第二个任务是根据最新的公园重建信息更新表格。
1。创建数据库连接
如果您还没有准备好数据库连接(在本教程的其他几个练习中使用),那么您必须现在就创建它。
开始FME工作台。从菜单栏中选择Tools > FME选项,然后从选项列表中选择Database Connections。
如果已经有一个名为PostGIS Training Database的连接,那么可以跳到步骤2。否则单击+按钮添加新连接:
在打开的对话框中,输入连接参数:
…and click Save to save the new connection.
2。生成工作区
使用Generate选项(快捷键Ctrl+G)来生成一个新的工作区。使用以下参数:
单击OK关闭对话框并生成工作区。
3。加入测试仪变压器
这个数据集包含了所有的公园特征,但我们只需要市中心的公园。因此,在读写器特性类型对象之间的工作空间中添加一个测试转换器:
确保Tester:Passed端口是连接到Parks表的端口。
现在打开测试器参数并将其设置为测试邻域值为“Downtown”的位置
4。检查表参数
现在查看名为Parks的Writer特性类型的参数(单击cogwheel图标)。
将表名更改为DowntownParks并将表限定符设置为fmedemo。确保将Feature操作设置为插入表处理被设置为Drop和Create:
注意:我们使用删除并创建了这项工作的情况下,本教程中的其他用户已经创建的表。否则,我们可以使用创建如果需要的话。
单击OK关闭对话框。
5。运行工作区
现在保存工作区,然后运行它。19个特性将通过测试并写入数据库表:
检查输出,以证明翻译工作正确。请注意每个公园有多少棵树,并在地图上找到Portal park(稍后我们将使用此信息)。
需要注意的是,如果重新运行工作区,那么每次都会删除并重新创建表。这意味着您不是在添加数据,而是覆盖它。如果源数据在任何时候发生更改,那么这将是一个有效的过程。
6。筛选和更新数据
现在让我们假设是六个月后。对公园进行了各种真实的更新。门户公园因重建而暂时关闭,应将其从桌面上移除。作为植树计划的一部分,所有其他公园都增加了100%的树木。
我们需要编辑工作区来更新数据,并定义应该执行的操作。
首先添加第二个测试变压器。将此设置为测试PaarkName=Portal Park的位置:
这将数据分为应删除的记录(Tester:Passed)和需要更新的记录(Tester:Failed)。
7。更新树计数
将ExpressionEvaluator变压器连接到测试仪:失败端口。设置评估模式参数以覆盖现有的属性,并选择TreeCount作为更新的属性。
将算术表达式设置为@Value(TreeCount)*2(即。增加100%的树木:
8。设置更新类型
因为这里有多个混合操作(一些更新,一些删除),我们必须用操作分别标记每个功能。
将AttributeManager转换器添加到每个筛选数据集,确保两者都连接到Writer功能类型:
检查连接到Tester的AttributeManager的参数:Passed。创建一个名为fme_db_operation的新属性,并将其值设为DELETE:
当您输入属性名和值时,如果您选择使用它,FME将提供一个下拉的自动完成选项。
现在检查其他AttributeManager的参数。这次创建fme_db_操作,但给它一个UPDATE值。
9。设置Where子句
我们现在已经确定了要执行的操作。最后一步是告诉FME数据库中的哪些特性应该应用这些操作。
再次打开Writer功能类型(表)的参数。
将功能操作设置为fme_db_操作并确保将表处理设置为利用现有的(FME应在您更改功能操作时自动设置)。
对于Match Columns参数,选择字段parkid:
这意味着parkid用于将传入特性与表中的记录相匹配。如果存在匹配,则将执行由fme_db_操作定义的操作。
10。检查属性映射和运行工作区
在运行工作区之前进行最后一次检查。确保所有属性都从AttributeManager转换程序正确映射到功能类型。如果没有,则会有黄色的连接箭头(如果两个箭头都没有连接,则功能类型上会有红色箭头):
可以通过右键单击连接线并选择“自动连接属性”来简单地解决此问题:
一次都已检查/映射属性集,保存并重新运行工作区。再次检查结果。
这次应该有18个公园特色。所有的树属性将是以前的两倍,门户公园不应该存在。
上述步骤在PostGIS上得到了演示。然而,同样的过程也适用于大多数主要的数据库格式统一。
如果数据库格式具有非协调接口,则必须应用以下内容。
fme_where属性相当于在协调的GUI中设置Match Columns参数。它的格式应该是[数据库字段][运算符][属性](即。数据库字段应该排在第一位)。运算符通常是等号运算(=)。
如果工作区更新失败,那么修复错误并重新运行工作区就比通常困难,因为数据库现在已部分更新。
所以,第一步是重置它。FME最简单的方法是将表参数改回Insert(用于特征操作)和Drop-and-Create(用于表处理)。然后将第一个Tester:Passed端口重定向回直接到表中(绕过其他变压器):
确保属性映射正确(必要时使用自动连接属性),然后重新运行工作区。现在,您将回到开始应用更新的位置,并可以更改工作区(将Tester重新连接到Tester并设置表参数以再次进行更新)。
要修复更新过程中的问题,请检查以下内容:
检查模式映射很重要,因为如果没有传入的属性映射到parkid,那么FME将不知道如何将这些特性与记录匹配以进行更新。
这里使用的数据来源于不列颠哥伦比亚省温哥华市提供的公开数据(data.vancouver.ca).它包含根据开放的政府许可证-温哥华许可的信息。
©2019安全亚搏在线软件公司法律