span8
span4
注:内容已更新为FME 2018.1,但视频仍显示2016.1,示例略有不同。
存储在数据库中的信息是不太可能保持不变。当这些变化的根源是一个数据集的其他地方,散货更新必须发生。
本实施例中执行的更新的混合物 - 使用变化检测,以确定执行哪个动作 - 首先插入,然后两个更新和删除操作。
注:尽管本例使用postgis数据库,但同样的技术也适用于其他数据库。
源数据是温哥华市的公园的一个数据集:
按映射平铺雄蕊设计,在CC-BY-3.0型是的。数据依据OpenStruts地图,在CC-BY-SA公司是的。
首先必须将数据上传到数据库的PostGIS(工作区已经存在这一点)。然后一个更新的数据集变得因为各种更新和重新评估的可用。然后,更新必须应用到PostGIS的表。
1.创建数据库连接
如果您还没有准备好一个数据库连接(如本教程中其他几个练习中使用),你必须现在创建它。
启动FME工作台。选择Tools>从菜单栏FME选项,然后从选项列表然后选择数据库连接。
如果您已经有一个名为连接PostGIS的培训数据库,则可以跳过步骤2。否则,请单击+按钮添加一个新的连接:
在打开的对话框中,输入连接参数:
...,然后单击保存以保存新的连接。
2.打开工作空间
启动FME Workbench和打开数据加载附加的模板。
注:如果“导航器”窗口的“数据库连接”部分有红色突出显示,则您可能跳过了第1部分,或者您的连接的名称不正确:
如果根本没有连接,请务必执行步骤1。如果确实创建了一个连接,但它有不同的名称,则可以双击此参数以选择不同的版本。
三。运行工作区
工作区是这样的:
请注意,这仅仅是从MapInfo的TAB格式读取公园数据(Downtown地区),并将其加载到上PostGIS的数据库表。该表处理在删除并创建模式(即它会被删除并通过这个新的数据集完全替换)。
运行工作区。一旦完成 - 和数据检查,以确保它是正确的 - 在工作空间可以被关闭。
四。生成工作区
使用生成选项(快捷键Ctrl + G)来生成一个新的工作区。使用下面的参数:
因为我们要写入表已经存在,我们应导入其架构(数据模型)到工作区。所以也检查按钮导入要素类型定义:
单击确定关闭对话框并生成工作区。导入选项将导致你被提示选择一个表来导入。设置格式邮政总局并选择先前定义的数据库连接。然后,单击参数按钮。选择弗梅德莫架构和市中心公园表:
单击确定,确定关闭对话框并完成工作区生成过程。
5个。添加Postgis阅读器
我们需要根据需要执行的操作,将每个传入的功能标记为更新、删除或插入。为了确定操作,我们必须将记录与原始数据库表进行比较,为此我们需要一个postgis阅读器。
所以从菜单栏中选择readers>add reader。
正如您在上一步中所做的,将格式设置为邮政总局并选择先前定义的数据库连接。然后,单击参数按钮。选择弗梅德莫架构和市中心公园桌子。
现在,当您关闭这些对话框时,此表将作为读卡器添加到工作区。为了达到最佳实践目的,您可能希望在其周围添加书签,或扩展现有书签:
6.添加updatedetector transformer
要检测更改,请添加updatedetector转换器。
注:此变压器是ChangeDetector的扩展。尽管它存储在FME集线器上,但仍然可以使用快速添加来添加。对于FME2019,变更检测器已经更新,包括所需的功能。
将Postgis读取器要素类型连接到updatedetector:原始输入端口,将Mapinfo Parksupdate要素类型连接到updatedetector:修订输入端口:
请注意,在上面的屏幕截图中,修改后的/原始端口已反转,以避免重叠连接。
第七章。设置updatedetector参数
现在检查updatedetector参数。key属性参数应设置为parkID。要匹配的属性是那些可能已更改的属性。在本练习中,已使用新信息更新了访客数,并种植了更多的树,因此选择VisitorCount和TreeCount:
还要确保“匹配几何体”设置为“二维”。
updatedetector现在将根据所做的更改来分离我们的数据。现在您可以运行工作区并在数据检查器中检查结果-但请确保没有连接writer功能类型!
现在可以看到,新数据集中的14个功能已更新,1个已删除,4个未更改。
请注意fme_db_操作属性已设置在这些功能上!因此,我们不必担心为自己设置:
当然,如果使用另一个转换器来检测更改,那么每个输出端口都可以连接到attributemanager,并且fme_db_操作手动设置。
8个。更新postgis writer
现在将updatedetector:updated和updatedetector:deleted输出端口连接到postgis writer要素类型。注意,不需要连接未更改的输出端口,因为这些功能不需要在数据库表中更新。事实上,如果这是连接的,那么结果将是一组重复的功能:
现在检查writer特征类型参数。将功能操作设置为fme_db_操作,并确保将表处理设置为使用现有是的。
选择ParkID作为更新的匹配列:
将功能操作设置为fme_db_操作意味着fme_db_操作上的功能将指导是否在数据库表中更新或删除该功能。匹配列是where子句用于确保在数据库表中更新或删除适当的行。
9号。检查数据并运行工作区
在运行工作区之前,请检查市中心公园桌子。记下探视人数和树计数多条记录的字段。这将确保我们可以比较结果以证明更新过程是成功的。
现在运行工作区。重新检查数据。你会发现派克ID火柴树计数和探视人数字段可能已更新:
另外,请注意,修订后的表中少了一个公园。大教堂广场公园已被拆除。
上述步骤在postgis上得到了演示。然而,同样的过程也适用于大多数主要的数据库格式协调的是的。
如果数据库格式具有非协调接口,则必须应用以下内容。
fme_where属性相当于在协调的gui中设置match columns参数。它的格式应该是[数据库字段][运算符][属性](即。数据库字段应该排在第一位)。运算符通常是等号运算(=)。
如果工作区更新失败,那么修复错误并重新运行工作区就比通常困难,因为数据库现在已部分更新。
所以,第一步是重置它。最简单的方法是重新打开数据加载模板并重新运行它。这会将表重置回原始状态。
要修复更新过程中的问题,请检查以下内容:
不连接未更改的端口是很重要的,因为这些特性已经存在,并且这些数据将被添加到表中。
这里使用的数据来源于不列颠哥伦比亚省温哥华市提供的公开数据(data.vancover.ca.温哥华)中。它包含根据开放的政府许可证-温哥华许可的信息。
©2019安全亚搏在线软件公司|法律