斯潘8
斯潘4
让-the-database-do-the-work.fmw
有很多方法可以“让数据库完成工作”,我们将看看如何使用FME执行更高效和更快的Oracle读取。通过利用数据库功能,如视图,索引,Select语句,Where子句;我们可以将要读取的数据量(特性和属性)限制为翻译中需要的数据量。
尽管本练习使用甲骨文公司数据库,所讨论的概念和方法可应用于其他数据库,如《PostgreSQL》/PostGIS,和SQL服务器.
仅读取工作流所需的数据(属性和功能)可以提高整体性能。亚搏在线通过使用视图限制从数据库中读取的功能,Where子句,或select语句,您可以简化工作区内的数据流,从而提高其速度。
下表比较了从“练习”工作区中的Oracle数据库访问较小的功能子集(19412个功能)时的转换时间:
*-没有几何图形
使用Oracle空间阅读器读取所有数据,使用检测仪过滤countrycode=ca大约需要300秒。
功能较少,WHERE条款,select语句,而视图方法是相当可比的。使用更大的功能子集,事实证明,select语句的读取速度更快,因为它还限制了正在读取的属性的数量。
阅读方法 | 读取313270条记录的时间(秒) |
WHERE子句 | 二十五 |
Select语句 | 十八 |
视图 | 二十四点九 |
注:以上时间是从工作区记录的,只启用了所需的读卡器,全面检查后运行,和任何相关的检查人员都是残疾人。
所附的让数据库完成这项工作。fmw演示了从数据库高效地读取特性的多种方法。我们将使用Oracle数据库中的Countries表,它有超过200万个功能。这些练习将强调有选择地阅读我们需要的特性的重要性:让数据库完成工作。
确保一次只启用一个书签,这将有助于验证每个读取方法之间的性能差异。
示例1-带WHERE子句的表
注意,通过在导航器中使用WHERE子句,FME将把读取的特性限制为满足条件的特性。
示例2-带有SELECT语句和WHERE子句的表
您可以使用select语句而不是where来减少读取的数据量,减少读取的功能的数量,只读取感兴趣的属性。然而,如果使用select语句,您正在替换FME的默认选择,因此,如果您有一个空间列,您需要在select语句中显式地包含它,例如:
选择地名ID,姓名,ascii名称,纬度,经度,国家代码,时区,来自国家代码为'ca'且功能类为'p'的fme.countries的geom
另一种减少属性读取次数的方法是使用暴露的属性选项,以及一个地点:
示例3-读取视图
此书签中的读卡器已配置为从Oracle数据库中读取视图。此视图是从国家/地区基表生成的,其中WHERE子句设置为COUNTRYCODE=CA,FEATURECLASS=P。
您还可以将视图与where结合起来,这样可以更灵活地读取数据。
例4——读取数据并用FME过滤或稀释
请注意,当使用WHERE子句(countrycode='ca'),然后使用attributeFilter或测试仪进一步将数据细化为FeatureClass值为“p”的记录时,性能会受到影响。在两个变压器之间,该属性过滤器具有更好的性能。
示例5-sqlCreator和sqlExecutor
两者都是sqlCreator和sqlExecutor可用于查询数据库。在这个书签中,我们根据国家代码和特征类别从国家中选择所有属性。尽管两种变压器产生的结果相同,您可以使用sqlcreator简化工作区,以消除对创建者/发起程序的需要。
当已读取的其他数据用于启动数据库查询时,sqlExecutor非常有用。
示例6-带索引和不带索引的阅读
使用sqlCreator在CountryCode和FeatureClass上创建复合索引。在要素类型属性中,WHERE子句已设置为使用为更有效的读取而创建的索引。这比示例1中使用的WHERE子句更快地读取特性。
在国家/地区(国家/地区代码,特征等级);
示例7-使用FeatureReader
使用FeatureReader执行空间查询。创建属性或空间索引可以对数据读取的性能产生很大的影响。大多数FME的数据库阅读器将利用空间索引进行MBR交叉。您可以使用启动功能,本例中的shapefile,执行空间查询以限制读取时传入的数据。
示例8-使用搜索信封
在导航器中,您可以定义一个搜索信封来帮助限制正在读取的功能的数量。指定四个坐标和坐标系。还有一个选项可以剪辑来搜索信封。这比读取所有数据,然后根据工作区中的坐标进行剪切要快。
?2019安全亚搏在线软件公司|合法的