西班牙
斯潘4
注意:内容已经更新到FME 2018.1,但是视频仍然显示2016.1,只是示例略有不同。
存储在数据库中的信息不可能保持不变。当这些更改的源是其他地方的数据集时,必须进行批量更新。
此示例执行更新的混合操作—首先是插入,然后是更新和删除操作—使用更改检测来确定要执行的操作。
注意:虽然本例使用PostGIS数据库,但同样的技术也适用于其他数据库。
源数据是温哥华市公园的数据集:
地图的雄蕊设计下,cc - - 3.0。数据开放地图下,使用。
首先,数据必须上传到PASGIS数据库(一个工作空间已经存在)。然后,由于各种更新和重新评估,更新的数据集变得可用。更新必须应用于PostGIS表。
1.创建数据库连接
如果尚未准备好数据库连接(如本教程中的其他几个练习中所使用的),则必须立即创建它。
启动FME工作台。从菜单栏中选择工具>FME选项,然后从选项列表中选择数据库连接。
如果已经有一个名为PostGIS Training Database的连接,则可以跳到步骤2。否则,请单击+按钮添加新连接:
在打开的对话框中,输入连接参数:
…然后单击“保存”以保存新连接。
2.开放式工作区
启动FME Workbench并打开附加的模板进行数据加载。
注意:如果Navigator窗口的Database Connections部分有一个红色高亮,那么您要么跳过了第1部分,要么您的连接的名称不正确:
如果你没有任何联系,一定要执行第一步。如果您确实创建了一个连接,但是它有一个不同的名称,那么您可以双击这个参数来选择不同的版本。
3.运行工作空间
工作区如下所示:
请注意,它只是从MapInfo TAB格式读取parks数据(用于市区)并将其加载到PostGIS上的数据库表中。表处理处于Drop and Create模式(即。它将被删除,并被这个新的数据集完全替换)。
运行工作区。一旦完成并检查数据以确保其正确无误,就可以关闭工作区。
4.生成的工作区
使用“生成”选项(快捷键Ctrl+G)生成新工作空间。使用以下参数:
因为要写入的表已经存在,所以我们应该将它的模式(数据模型)导入到工作区中。所以也要检查按钮导入特性类型定义:
单击“确定”关闭对话框并生成工作空间。导入选项将提示您选择要导入的表。将格式设置为PostGIS并选择先前定义的数据库连接。然后单击参数按钮。选择fmedemo架构和DowntownParks表格:
再次单击“确定”关闭对话框并完成工作区生成过程。
5.添加PostGIS读者
我们需要根据需要执行的操作,将每个传入的功能标记为更新、删除或插入。为了确定操作,我们必须将记录与原始数据库表进行比较,为此我们需要PostGIS阅读器。
所以选择Reader >从菜单栏中添加Reader。
与上一步一样,将格式设置为PostGIS并选择先前定义的数据库连接。然后单击参数按钮。选择fmedemo架构和DowntownParks表格
现在,当您关闭这些对话框时,该表将作为阅读器添加到工作区。为了达到最佳实践的目的,您可能希望在其周围添加一个书签,或扩展现有的书签:
6.添加UpdateDetector变压器
要检测更改,请添加一个UpdateDetector transformer。
注意:这个变压器是变化探测器的延伸。虽然它是存储在FME集线器,它仍然可以添加使用快速添加。对于FME2019, ChangeDetector已经更新,以包含所需的功能。
将PostGIS reader功能类型连接到UpdateDetector:原始输入端口,将MapInfo ParksUpdate功能类型连接到UpdateDetector:修订输入端口:
请注意,在上面的屏幕截图中,为了避免连接重叠,修改后的/原来的端口被颠倒了。
7.设置UpdateDetector参数
现在检查UpdateDetector参数。Key属性参数应该设置为parkid。要匹配的属性可能已经更改。在这个练习中,游客数量已经更新了新的信息,种植了更多的树,所以选择visitorcount和treecount:
还要确保将匹配几何体设置为2D。
UpdateDetector现在将根据所做的更改分离我们的数据。您现在可以运行工作区并在数据检查器中检查结果—但是请确保没有连接写入器功能类型!
现在可以看到新数据集中有14个特性已经更新,1个已经删除,4个没有改变。
请注意,fme_db_operation属性已在这些特性上设置!因此,我们不需要担心为自己设置:
当然,如果使用另一个转换器来检测更改,那么每个输出端口都可以连接到一个AttributeManager和fme_db_operation手动设置。
8.更新PostGIS作家
现在将UpdatedDetector:Updated和UpdateDetector:Deleted输出端口连接到PostGIS writer特性类型。注意,不需要连接未更改的输出端口,因为这些特性不需要更新数据库表。事实上,如果这是连接的,那么结果将是一组重复的功能:
现在检查写入器特性类型参数。设置特征操作为fme_db_operation,并确保将表处理设置为使用现有的。
选择parkid作为更新的匹配列:
将特征操作设置为fme_db_operation表示属性值fme_db_operation将指导该特性在数据库表中是更新还是删除。匹配列是where子句用于确保更新或删除数据库表中的适当行。
9.检查数据并运行工作区
运行工作区之前,请检查DowntownParks表格做个笔记visitorcount和treecount多个记录的字段。这将确保我们可以比较结果,以证明更新过程是成功的。
现在运行工作区。数据预定期内进行复检。你会看到aparkid匹配,treecount和visitorcount字段可能已经更新:
还要注意,修改后的表中少了一个park。大教堂广场公园已被拆除。
上述过程在PostGIS上进行了演示。然而,同样的过程也适用于大多数主要的数据库格式和谐。
如果您的数据库格式具有不协调的接口,则必须应用以下内容。
fme_where属性相当于在协调的GUI中设置匹配列参数。它的格式应该是[数据库字段][操作符][属性](即数据库字段应该放在前面)。操作符通常是一个equals操作(=)。
如果工作空间在更新中失败,那么修复错误并重新运行工作空间将比通常更困难,因为数据库现在已经部分更新了。
第一步是重置它。最简单的方法是重新打开数据加载模板并重新运行它。这将把表重置回原来的状态。
要修复更新过程中的问题,请检查以下内容:
重要的是不要连接未更改的端口,因为这些特性已经存在,而且这些数据只会添加到表中。
这里使用的数据来源于不列颠哥伦比亚省温哥华市(data.vancouver.ca)。它包含在开放政府许可下的信息-温哥华。
?2019安全亚搏在线软件公司|法律