概述
使用新的FeatureJoiner转换器,可以快速轻松地在FME 2018.0中关联数据库表。FeatureJoiner基于公共属性值来组合要素的属性,类似于SQL连接操作。在本教程中,您将学习如何基于主键连接两个数据库表中的要素,但可以修改此方法以组合多种数据类型的要素(例如,shapefile和 database表)。
下载
注意:由于您正在处理面向公众的数据库,因此有时可能会覆盖和/或修改表。如果您的转换产生意外结果,请参阅重置PostGISTraining Database文章。或者,您可以下载提供的文件,并使用适当格式的读模块替换PostGIS读模块。
练习1 - 使用FeatureJoiner关联数据库表
在本练习中,您将学习如何基于主键连接两个表。在这种情况下,您有兴趣根据地址ID连接两个表,因为您希望拥有一个包含完整邮件地址的数据集。
说明
1.启动FME Workbench
- 如果尚未打开,请启动FME Workbench。
2.创建一个新工作空间
- 在“开始”页面的“创建工作空间”部分中,选择“创建新工作空间”选项。
3.添加PostGIS 读模块
- 在工作空间中未选择任何内容的情况下开始键入“PostGIS”,然后通过双击或使用箭头键从读模块列表中选择PostGIS格式,接着按回车键将其添加到工作空间,。
- 接下来,从读模块连接列表中选择PostGIS Training Database。如果尚未设置数据库连接,请选择“添加数据库连接”并输入以下参数:
- 主机:postgis.train.safe.com
- 端口:5432
- 数据库:fmedata
- 用户名:fmedata
- 密码:fmedata
- 接下来,打开读模块参数并从表列中选择AddressPoints和VanHomes表。
4.添加PostGIS 写模块
- 与添加读模块类似,键入“PostGIS”,然后从写模块列表中选择PostGIS格式。
- 将写模块格式设置为PostGIS,并将写模块数据集连接到与读模块(PostGIS Training Database)相同的数据集。将表定义设置为自动,然后单击确定。
5.设置表名,要素操作和表处理
- 添加写模块要素类后,它将打开写模块参数。将表名设置为“JoinedAddresses”,默认情况下该表将放在“public”模式中。
- 接下来,确保将要素操作设置为插入并将表处理设置为Drop and Create。
注意:如果表名与现有表匹配,则数据将被覆盖。
6.添加BulkAttributeRenamer
- 由于您将关联字段,因此您需要确保大小写在连接字段中匹配。添加BulkAttributeRenamer并将其连接到AddressPoints表。
7.转换属性为小写
- 打开BulkAttributeRenamer参数并将Action设置为Change Case并将Case Change Type更改为小写。这将确保AddressPoints表中的字段名称与VanHomes表中的字段名称匹配。
注意:通过单击读模块上的箭头,您将显示已读入的属性列表。如果在AddressPoints和VanHomes读模块上展开属性,您会注意到AddressPoints表使用首字母大写(TitleCase),而VanHomes表使用小写。
8.添加FeatureJoiner
您将执行内部连接,因此输入的位置(左侧和右侧)并不重要,因为输出仅包含匹配的要素; 但是,如果您正在执行左连接(匹配的要素和所有不匹配的左侧要素),则位置很重要,否则您将获得意外结果。有关如何使用连接转换器的更详细说明,请参阅使用合并/连接转换器(如何选择正确的转换器)。
- 将BulkAttributeRenamer的输出连接到Left参数,并将VanHomes表连接到FeatureJoiner的Right参数。建立连接后,打开FeatureJoiner参数。
9.选择要加入的属性
- 保留Join Mode的默认参数,并将Join On Left和Right设置为“addressid”。在这种情况下,您只对两个表中常见的字段感兴趣。要使用FeatureJoiner了解有关数据库连接的更多信息,请参阅FeatureJoiner Transformer一文。
- 最后,将FeatureJoiner:Joined端口连接到PostGIS写模块以完成工作空间。
10.运行工作空间
- 单击工具栏上的“运行”按钮,或使用菜单栏上的“运行”>“运行转换”运行工作空间。
运行工作空间后,您的数据库将具有一个包含已连接字段的新表(public.JoinedAddresses)。您可以通过选择写模块并单击选择写模块时出现的快捷菜单中的“检查”按钮来查看新表。
结果
输入
输出
练习2 - 从CSV文件中关联数据
在练习2中,您将使用FeatureMerger向表中添加新列。您将把另一个文件中的经度和纬度数据附加到数据库表中,而不是创建列并赋值。您将在数据库表和正在读取的CSV文件(即内部连接)中共同的字段上执行连接。
说明
1.启动FME Workbench
- 如果尚未打开,请启动FME Workbench。
2.选择“生成工作空间”
- 在“开始”页面的“创建工作空间”部分中,选择“生成(工作空间)”选项。或者,您可以使用快捷键Ctrl + G.
有关创建转换的详细信息,请参阅“ 桌面基础课程手册”。
3.设置读模块格式并连接到PostGIS Training Database
- 在“生成工作空间”对话框中,将“读模块格式”设置为PostGIS。
- 接下来,从读模块连接列表中选择PostGIS Training Database。如果尚未设置数据库连接,请选择“添加数据库连接”并输入以下参数:
- 主机:postgis.train.safe.com
- 端口:5432
- 数据库:fmedata
- 用户名:fmedata
- 密码:fmedata
- 接下来,打开读模块参数并从表列中选择Downtown_PublicArt表。
4.设置写模块格式并连接到PostGISTraining Database
- 将写模块格式设置为PostGIS,将写模块连接设置为与读模块(PostGIS Training Database)相同的连接,然后单击OK以生成工作空间。“生成工作空间”对话框应如下面提供的屏幕截图:
5.设置要素操作和表处理
- 生成工作空间后,双击“写模块要素类”以打开“写模块要素类参数”对话框。
- 在“常规”部分中,将“表名称”设置为PublicArtJoin。
- 在“表”部分中,确保“要素操作”设置为“插入”并将“表处理”设置为“删除和创建”。
注意:当需要清空表并对数据库模式进行更新时,将使用Drop和Create。例如,当您希望使用新内容更新表并要求将新列添加到表中时,将使用此方法。
6.更新属性
- 切换到写模块参数对话框中的用户属性选项卡,将属性定义设置为自动。
- 单击“确定”接受更改并关闭“写模块参数”对话框。
注意:自动属性定义是指Workbench自动定义属性列表时,具体取决于所连接的读模块要素类。此外,只要在工作空间中更改(即重命名,删除等)属性,写模块要素类上的属性列表就会自动更新。有关用户属性和属性定义的更多信息,请参阅文档。
7.添加CSV读模块
- 要将CSV读模块添加到画布,通过键入“CSV”以显示“快速添加搜索”中的FME读模块列表。通过双击或使用箭头键从“读模块”列表中选择CSV格式,然后按回车键将其添加到工作空间。
- 选择后,将打开“添加读模块”框。单击数据集省略号并从示例数据集中打开3531-downtown CSV文件,然后单击“确定”。
8.添加FeatureMerger
- 将PostGIS表连接到Requestor端口,将CSV连接到Supplier端口。FeatureMerger用于根据公共键属性值或表达式组合来自两个不同要素流的属性和/或几何对象。
要了解有关在FME中使用基于键的转换器的更多信息,请参阅“ 桌面基础课程手册”。
9.设置FeatureMerger参数
- 打开FeatureMerger参数对话框,将Join On Requestor设置为“name”和“title”,将Supplier设置为“Name”和“Title”。将所有其他参数保留为默认值并单击“确定” 这将匹配基于名称和标题属性的要素。
10.添加BulkAttributeRenamer
只有匹配的要素才能通过FeatureMerger,这将导致重复的行(如来自CSV文件的名称,来自PostGIS表的名称)。
- 向画布添加BulkAttributeRenamer以自动将属性从首字母大写(Titlecase)更改为小写。这也将删除重复的列名称((“Name” → “name”)。
- 将Merged端口从FeatureMerger连接到BulkAttributeRenamer,然后将输出连接到PublicArtJoin写模块。
注意:您还可以删除不需要的属性通过使用转换器(例如AttributeManager,AttributeRemover或BulkAttributeRemover)或通过将写模块属性定义设置为Manual并删除属性。有关管理/删除属性的更多信息,请参阅“ 桌面基础课程手册”。
11.设置BulkAttributeRenamer参数
- 打开BulkAttributeRenamer参数对话框,将操作设置为更改大小写,并将Case Change Type更改为小写。
12.设置工作空间参数
- 在运行工作空间之前,必须设置”工作空间参数”(在“导航”窗口中找到)>“转换”>“拒绝的要素处理”以继续转换。
默认情况下,FME工作空间参数设置为终止转换,如果FeatureMerger拒绝任何要素,将导致工作空间停止。您可以了解更多有关被拒绝的要素,在处理桌面基础课程手册。
13.运行转换
- 单击工具栏上的“运行”按钮,或使用菜单栏上的“运行”>“运行转换”运行工作空间。
运行转换后,您的表格将包含纬度和经度列。您可以通过选择写模块要素类并单击选择写模块时出现的快捷菜单中的“检查”按钮来查看新表。
结果
输入
输出
转换器
- BulkAttributeRenamer - 通过添加或删除前缀或后缀或使用正则表达式或字符串替换文本来重命名属性。
- FeatureJoiner - 通过基于公共属性值(如SQL连接操作)组合要素的属性/几何对象来连接要素。
- FeatureMerger - 将属性/几何对象从一个要素(或多个要素)复制并合并到另一个要素(或多个要素)上。