span8
span4
Let-the-Database-Do-the-Work.fmw
有很多方法可以“让您的数据库完成工作”,我们来看看如何使用FME来执行更高效、更快地从Oracle读取数据。通过利用诸如视图、索引等数据库功能,SELECT语句,WHERE子句;我们可以将读取的数据量(特性和属性)限制为只读取翻译中需要的数据量。
虽然这个练习使用了甲骨文数据库,讨论的概念和方法可以应用到其他数据库如PostgreSQL/PostGIS,SQL Server。
只读取工作流所需的数据(属性和特性)可以提高整体性能。亚搏在线通过使用视图、WHERE子句或SELECT语句限制从数据库中读入的特性,您可以简化工作空间中的数据流,从而提高其速度。
下表比较了在练习工作空间中从Oracle数据库中访问更小的特性子集(19,412个特性)时的转换时间:
* -没有几何图形
使用Oracle Spatial Reader读取所有数据,并使用测试器过滤COUNTRYCODE = CA,大约需要300秒。
对于数量较少的特性,where子句、select语句和视图方法具有很强的可比性。通过使用更大的特性子集,select语句被证明是更快的读取速度,因为它也限制了被读入的属性的数量。
阅读的方法 | 读取313,270条记录的时间(秒) |
Where子句 | 25.0 |
Select语句 | 18.0 |
视图 | 24.9 |
注意:上述时间是在只启用所需的读取器、关闭全部检查并禁用任何连接的检查器的工作空间中记录的。
附件让数据库来做这项工作。fmw demonstrates a number of ways to efficiently read in features from a database.我们将使用Oracle数据库中的Countries表,它有超过200万个特性。练习将强调有选择地阅读我们需要的特性的重要性:让数据库完成工作。
确保一次只启用一个书签,这将有助于验证每种读取方法之间的性能差异。
例1 -带有Where子句的表
注意,通过在导航器中使用Where子句,FME将把读取的特性限制为满足条件的特性。
例2 -带有Select语句和Where子句的表
您可以使用SELECT语句而不是WHERE语句来减少所读取的数据量,从而减少所读取的特性的数量,并且只读取感兴趣的属性。但是,如果你使用SELECT语句,你是在替换FME的默认SELECT,所以如果你有一个空间列,你需要显式地将它包含在SELECT语句中,即:
从FME中选择GEONAMEID, NAME, ASCIINAME, LATITUDE, LONGITUDE, COUNTRYCODE, TIMEZONE, GEOM。COUNTRYCODE='CA'和FEATURECLASS='P'的国家
减少属性读取数量的另一种方法是使用Exposed Attributes选项,以及一个WHERE:
例3 -读取视图
此书签中的阅读器已配置为从Oracle数据库读取视图。这个视图是从nations基表生成的,其中的where子句设置为COUNTRYCODE = CA和FEATURECLASS = P。
您还可以将一个视图与一个WHERE组合在一起,这样可以为您读取的数据提供更大的灵活性。
例4 -读取数据并使用FME过滤或细化
注意,当使用where子句(COUNTRYCODE = ' CA '),然后使用AttributeFilter或Tester进一步细化数据,使其记录的FEATURECLASS值为' P '时,会对性能产生影响。在两个变压器之间,AttributeFilter具有更好的性能。
示例5 - SQLCreator和SQLExecutor
这两个SQLCreator和SQLExecutor可以用来查询数据库。在这个书签中,我们根据国家代码和FEATURECLASS选择国家的所有属性。尽管这两个转换器产生相同的结果,但是您可以使用SQLCreator简化您的工作空间,从而消除对创建者/发起者的需求。
SQLExecutor在使用已读取的其他数据启动数据库查询时非常有用
例6 -带索引和不带索引的读取
使用sqlcreator在COUNTRYCODE和FEATURECLASS上创建复合索引。在特性类型属性中,where子句被设置为使用为更有效的读取而创建的索引。这比示例1中使用的where子句更快地读取特性。
创建国家索引IDX_COUNTRIES (COUNTRYCODE, FEATURECLASS);
例7 -使用FeatureReader
使用FeatureReader执行空间查询。创建属性或空间索引会对数据读取的性能产生很大影响。FME的大多数数据库阅读器将利用空间索引进行MBR相交。您可以使用一个初始化特性(本例中的Shapefile)来执行一个空间查询,以在读取时限制输入的数据。
例8 -使用搜索信封
在导航器中,您可以定义一个搜索信封来帮助限制正在读取的特性的数量。指定四个坐标和坐标系。还有一个选项,夹搜索信封。这比读取所有数据然后通过工作空间中的坐标剪切要快。
©2019安全亚搏在线软件公司法律