数据库包括三部分内容_教程:更新数据库(上)

全篇目录

更新数据库:简介

更新数据库:过滤要素实现更新

更新数据库:使用变更检测实现更新

更新数据库:更新记录的各个字段

更新数据库:简介

一、介绍 存储在数据库中的信息不太可能保持不变。当这些来自其他数据集数据发生更改时,必须进行批量更新。 这些更新可能就像重新加载一整组数据一样简单,完全替换现有内容。在某些情况下,表在重新加载之前进行了重组,在其他情况下,表被截断(清空了其内容),但结构与以前一样保留。 更复杂的更新涉及处理单个记录(使其他记录不受影响)。 在某些情况下,整个记录被替换,在其他情况下,只更新记录的单个字段。 可以使用FME工具在数据库中进行所有类型的更新和删除。 二、数据库更新功能 FME定义更新的功能取决于所使用的格式。许多格式已经统一,以提供一致的用户体验,而一些格式则没有。这意味着有两种基本的功能可用。 简化、协调的对话:涵盖大多数主要格式 FME格式属性:用于没有统一接口的格式 有关基本更新功能的更多信息,包括统一对话框和格式属性之间的差异,请参见文章“增量数据库更新介绍。 三、数据库更新方法 在FME工作区中使用的方法不仅取决于数据库格式,还取决于更新的来源以及需要什么样的更新类型。 FME可以更新数据库中的所有数据,或特定表中的所有数据;它还可以在插入或删除其他特性的同时对单个特性进行更新。 FME还可用于检测两个源数据集之间的变化,将差异写入数据库作为更新。 下面的例子说明了功能和方法的不同组合。 四、数据库更新示例 这些例子都包括一系列步骤来学习所描述的技术。 虽然每个示例都针对特定的数据库格式,但同样的技术适用于使用FME进行的任何数据库更新。 示例1:更新整表 更新整个数据库表非常简单;特别是当数据库格式为FME中具有简化和统一接口时。 这个例子(实际上是Post GIS入门教程的一部分)展示了它是如何完成的。 示例2:执行混合操作 混合操作是单个工作区内插入、更新和删除命令的组合;例如,记录A需要删除,而记录B需要修改。 混合操作需要能够识别哪些特性需要哪些操作。此示例演示如何根据操作类型筛选数据,以及如何设置操作。 它使用统一格式进行说明,但包括如何使用格式属性fme_where应用相同技术的说明。 示例3:用更改检测识别更新 在与上述类似的工作区中,此示例执行混合操作,但标识使用更改检测方法应用的操作类型。同样,本练习使用统一格式进行说明,但包括如何使用格式属性fme_where应用相同技术的说明。 示例4:更新记录的单个字段 有时只需要更新特定记录中的单个字段,而不是整个记录。 这可以使用SQL(以及FME中的SQLExecutor转换器)来完成,但是对于批量更新,使用FME编写器更容易。此示例说明如何仅更新特定字段。  

更新数据库:过滤要素实现更新

一、介绍 存储在数据库中的信息不太可能保持不变。当这些更改的来源是其他地方的数据集时,必须进行批量更新。 此示例混合执行各种更新-首先执行插入,然后执行更新和删除操作-过滤数据以确定要执行的操作。 注意:尽管此示例使用PostGIS数据库,但是相同的技术也适用于其他数据库。 二、分步说明 1.创建数据库连接 如果尚未准备好数据库连接(如本教程的其他练习中所使用的),则必须立即创建它。 启动FMEWorkbench。从菜单栏中选择工具> FME选项,然后从选项列表中选择数据库连接。 如果已经有一个名为的连接,则可以跳到步骤2。否则,单击+按钮添加一个新连接: d7596fafdad83cbab351dd31fd6a98bd.png 在打开的对话框中,输入连接参数: 数据库连接:PostgreSQL 名称:PostGISTraining Database Host: postgis.train.safe.com 端口: 5432 数据库: fmedata 用户名:fmedata 密码: fmedata 9e0434f65697061f02a4b11c8ddb8e86.png ...然后单击保存以保存新连接。 2.生成工作区 使用“生成”选项(快捷键Ctrl +G)生成一个新的工作区。使用以下参数: 读取格式:MapInfoTAB(MITAB) 读取数据集:Parks.tab 写入格式:PostGIS 写入位置:PostGISTraining Database   1b980c78ee42e0ddfa1f13ab070764d6.png

单击“确定”关闭对话框并生成工作空间。

3.添加Tester转换器 该数据集包含所有公园特征,但我们仅需要市区内的公园。因此,将Tester转换器添加到读写器要素类型对象之间的工作空间中: 4df1b9360fad24126d1cb1b5b4b90ac2.png 确保Tester:Passed端口是连接到Parks表的端口。 现在打开Tester参数并将其设置为测试“Neighborhood”字段的值是否为“ Downtown” 8522a98ce2a4ce89992026ccc88827d9.png 4.检查表参数 现在,查看名为Parks的Writer要素类型的参数(单击齿轮图标)。 将表名称更改为DowntownParks并将表限定符设置为fmedemo。确保将功能操作设置为插入,并将表处理设置为放置并创建: 8fecbd465a1c66450f8bd36a1585d69f.png 注意:如果本教程的另一个用户已经创建了表,则在本练习中使用“拖放并创建”。否则,如果需要,我们可以使用创建。 单击“确定”关闭对话框。 5.运行工作区 现在保存工作区,然后运行它。19个要素将通过Tester并写入数据库表: 19a9ec2878c950fed344c59a3df42738.png 检查输出以证明转换正确。记下每个公园有多少棵树,并在地图上找到Portal Park(我们稍后将使用此信息)。 重要的是要注意,如果您重新运行工作空间,则每次都会删除并重新创建表。这意味着您不是要添加数据,而是要覆盖数据。如果源数据随时更改,那将是一个有效的过程。 6.筛选和更新数据 现在让我们想象六个月后。公园已进行了各种实际更新。Portal Park暂时关闭以进行重建,应将其从table中移除。作为植树计划的一部分,所有其他公园都增加了100%的树木。 我们需要编辑工作区以更新数据,并定义应执行的操作。 首先添加第二个Tester转换器。进行设置以测试PaarkName= Portal Park的位置: 6a53222a8381aa8dafdd9c644ab773ad.png 这会将数据分为应删除的记录(Tester:Passed)和需要更新的记录(Tester:Failed)。 7.更新树计数 将ExpressionEvaluator转换器连接到Tester:Failed端口。将EvaluationMode参数设置为覆盖现有属性,然后选择TreeCount作为要更新的属性。 将算术表达式设置为@Value(TreeCount)* 2(即,将树的数量增加100%): 9d96d010957aae606f78569ac5eaffba.png 9c5475d4f1a5f04755137cd920305336.png 8.设置更新类型 由于此处存在多种混合操作(某些更新,某些删除),因此我们必须使用其操作分别标记每个功能。 将AttributeManager转换器添加到每组过滤的数据,确保两者都连接到Writer功能类型: 6cf61a73f67e6b1bca62470b0815198c.png 检查连接到Tester:Passed的AttributeManager的参数。创建一个名为fme_db_operation的新属性,并为其赋予DELETE值: 3be254b02789108969b98913a749e4c6.png 输入属性名称和值时,如果您选择使用FME,FME将提供一个下拉自动完成选项。 现在检查另一个AttributeManager的参数。这次创建fme_db_operation,给它一个UPDATE值。 4a40bd71cf16906e37eec65c0db1662b.png 9.设置条款 现在,我们设置了要执行的操作。最后一步是告诉FME应该将操作应用于数据库中的哪些要素。 再次打开Writer要素类型(表)的参数。 将功能操作设置为fme_db_operation并确保将表处理设置为使用现有的(更改功能操作时,FME应该自动设置该功能)。 对于“MatchColumns”参数,选择字段parkid: 3e7b09d19a3768affe90f4e8902e4bc2.png 这意味着parkid用于将传入特征与表中的记录进行匹配。如果存在匹配项,则将执行fme_db_operation定义的操作。 10.检查属性映射和运行工作区 我们运行工作区之前的最后一项检查。确保所有属性都已正确地从AttributeManager转换器映射到要素类型。如果没有,则将有黄色的连接箭头(如果没有连接,则在特征类型上有红色的箭头): a64fd0e1939e71882d92a571dc0f0d9f.png 可以通过右键单击连接线并选择“自动连接属性”来简单地解决此问题: e18c0da8c3e1dd127767604885b345f2.png 一旦检查/映射了两组属性,请保存然后重新运行工作空间。再次检查结果。 这次应该有18个公园景点。所有TreeCount属性将是以前的两倍,并且PortalPark不应该存在。 三、非统一格式 上面概述的过程已在PostGIS上进行了演示。但是,完全相同的过程适用于已 统一的 大多数主要数据库格式。 如果您的数据库格式具有不统一的界面,则必须应用以下内容。 可能有也可能没有功能操作参数要设置。一般来说,如果有的话,应该改为fme_db_operation,如果没有fme_db_operation的选项,则改为UPDATE。 可以设置或可以不设置“MatchColumns”参数,并且名称可以不同。 如果有这样的参数,则将其设置为parkid 如果没有这样的参数,那么在AttributeManager转换器中,以及创建fme_db_operation,还要创建fme_where 将fme_where的值设置为parkid = @Value(ParkId) fme_where属性等效于在统一的GUI中设置“Match Columns”参数。它的格式应为[数据库字段] [操作员] [属性](即数据库字段应排在首位)。该运算符通常是一个等于运算符(=)。 四、故障排除 如果工作空间更新失败,则比现在更难修复错误和重新运行工作空间,因为数据库现在已部分更新。 因此,第一步是将其重置。使用FME的最简单方法是将表参数更改回Insert(用于功能操作)和Drop and Create(用于表处理)。然后将第一个Tester:Passed端口重定向回表中(绕过其他转换器): 305b99b60ec1b870f59107158274bbcb.png 确保正确映射属性(必要时使用“自动连接属性”),然后重新运行工作空间。现在您将回到开始应用更新的位置,并且可以将工作空间改回原来的位置(将Tester重新连接到Tester并设置表参数以再次进行更新)。 要解决更新过程中的问题,请检查以下内容: 如果输出中仍然有19个停车要素,则删除操作无效。检查fme_db_operation是否正确设置为DELETE。还要检查AttributeManager的属性是否已正确映射到写模块。 如果有18个公园要素,但树数与以前相同,则更新操作可能无法正常进行。检查fme_db_operation是否正确设置为UPDATE。还要检查AttributeManager的属性是否已正确映射到写模块。您可能还需要检查ExpressionEvaluator的设置是否正确(也许更新有效但值尚未更改) 检查架构映射非常重要,因为如果没有传入的属性映射到parkid,则FME将不知道如何将功能与记录进行匹配以进行更新。(未完待续)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值