你在这里: 数据库 InlineQuerier

InlineQuerier

对由从传入特性创建的表组成的临时数据库执行SQL查询,并将结果作为新特性返回。

可以创建任意数量的表,每个表都将被分配一个输入端口。任何特性都可以路由到该输入端口,只要它们为为表定义的每个列提供值。类似地,可以指定任意数量的查询,并为每个查询分配一个输出端口,由该查询产生的特性将通过该端口进行路由。查询可以涉及输入中定义的任何和所有表和列。特别是,可以执行多路连接,可以使用涉及嵌套Select语句和高级谓词的高级SQL操作,可以使用多个查询使用输入表。

该变形器对来自没有SQL能力的源的SQL启用输入的功能的输入流尤其有用,以及在流中执行多路连接。

添加到工作区中的InlineQuerier转换器最初没有输入或输出端口。必须将其配置为定义至少一个表和至少一个关联查询。这些表定义和相关查询然后成为转换器各自的输入和输出端口。

InlineQuerier使用SQLite数据库存储表,然后执行查询。看到http://www.sqlite.org/lang_select.html.获取有关所支持的SQL Select语句语法的详细参考。

参数

输入

InlineQuerier需要定义一个或多个表,这些表将成为转换器的输入端口。的进口…按钮提供了一种快速方式来填充来自工作区中源特性类型的输入表定义。要添加输入端口,必须定义一个表名和一些可以执行查询的列。

注意:出于性能原因,您应该定义尽可能少的列。

在运行时,转换器将在处理任何查询之前为每个列构建索引。除了已定义的列外,还有一个特殊的fme_feature_content列在每个表上隐式定义,并且在运行时,可以认为此列包含通过表端口输入的FME功能的整个内容。因此,只有在表中定义将用于过滤或加入的属性 - 任何附加属性(以及特征几何)都可以通过选择所产生的输出功能来放置在产生的输出功能上fme_feature_content列。

输出

每个输出端口都分配了一个SQL查询。使用了一个有用的编辑器来构造查询,并提供了对可以在查询中使用的表、列、发布参数和私有参数的方便拖放访问。的生成按钮将使用默认值创建一个输出端口Select *查询每个输入表。

在翻译结束时,将对InlineQuerier的临时数据库执行每个连接端口的查询。对于执行SQL查询所产生的每一行,都会从输出端口发出一个特性。

如果查询结果包括fme_feature_content属性(显式地或通过使用选择 *),则原始特性的内容将包含在输出特性上。

在查询加入多个表的情况下,具有多个值fme_feature_content,生成的特征的属性将按fme_feature_content在查询中会遇到值。如果原始特性具有相同名称的属性,那么第一个特性fme_feature_content在结果行中找到的将在输出特性上有其特性属性,以及后续fme_feature_content将在合并过程中忽略其重复的特性属性。(如果不希望这样,可以使用AttributeRenamer在InlineQuerier之前,以确保输入流中的唯一属性名。)

此外,生成的合并特征将默认具有遇到的第一个源特征的几何形状。你可以为查询定义几何类型来“聚合所有特性”;在这种情况下,结果合并的特征将包含所有输入特征的聚合几何,在它们各自的顺序fme_feature_content价值观。

输出特征的坐标系统

输出特征上的坐标系统为:

  1. 如果没有设置fme_feature_content被选中;
  2. 如选择带有“第一个功能”的功能内容,则设置为第一个功能的内容;
  3. 如果“聚合”模式生效,则设置为所有“内容”特征的共同坐标系所有的输入特征都有相同的坐标系。

否则它将保持未设置。

注意:关于表格内容的说明:为输入端口定义的表需要执行查询所依据的源特性的属性。它们不必也不应该包含额外的属性。一般情况下,a选择 *类型的查询将被执行,这将引入来自原始特性的所有属性和源几何,因为它将包含特殊的fme_feature_content列。

注意:关于路由到输入端口的特性的说明:路由到输入端口的特性应该具有与为输入端口表定义的模式匹配的属性。如果没有,将插入空值,以替换为输入表定义的列所缺少的属性。一个上游AttributeRenamerNullAttributeMapper可用于确保已定义列存在属性值。

使用笔记

关系featuremerger.

InlineQuerier是feature merge的强大表亲。与featuremerge合并两个数据集并使用一个简单的单一属性键来匹配特性不同,InlineQuerier允许合并任意数量的输入数据集,在任意数量的表和列上使用SQL的强大功能。此外,InlineQuerier允许其输入数据在单个转换器中被多次重用,而如果多个连接要通过一个featuremerge完成,则必须使用多个featuremerge,并向每个featuremerge发送特性的副本。另一方面,InlineQuerier在加载底层SQLite数据库时会有一些开销。使用一个InlineQuerier代替几个featuremerger也简化了工作空间。

除非一个工作流中只需要一个featuremerge,否则InlineQuerier可能是一个更好的选亚搏在线择。通过使用一个适当配置的InlineQuerier替换featuremerger,具有多个级联featuremerger的旧工作区可能会体验到性能改进。

关系SQLCreator/SQLExecutor.

InlineQuerier可以被看作是SQLCreator/SQLExecutor转换器的灵巧表亲,因为它允许将SQL的强大功能应用于源自非SQL功能数据源或独立的SQL功能数据源的数据集。

如果要查询的所有数据都已经存在于一个支持sql的数据源中,那么使用SQLCreator或SQLExecutor总是更有效,因为这允许数据库在数据进入FME环境之前直接执行对数据的查询和过滤。

关系木匠

当流经FME的数据和数据库中保存的数据之间存在一对一或一对多的关系时,Joiner非常有用和高效。如果可以使用,Joiner可以比使用InlineQuerier或SQLCreator/SQLExecutor更有效,前提是Joiner关键字段在源数据库中有索引。Joiner允许基于多个属性键的简单连接关系,并且不需要SQL知识——这对于简单的查找表通常非常有效。InlineQuerier在数据源没有SQL功能或更复杂的查询时非常有用。InlineQuerier允许您提出比Joiner更复杂的数据问题。

例子

编辑变压器参数

使用一组菜单选项,可以通过引用工作区中的其他元素来分配转换器参数。更高级的功能,比如高级编辑器和算术编辑器,也可以在一些转换器中使用。要访问这些选项的菜单,请单击除了适用的参数。有关更多信息,请参见变压器参数菜单选项

变压器的分类

数据库

搜索FME知识中心

搜索有关此变压器的样本和信息FME知识中心