斯潘8
斯潘4
在动态工作流中,有时所需的架构不存在于其他任何地方,而是在亚搏在线工作区中(例如在数据透视之后)。为此目的构建模式特性是非常好的,但在许多情况下,您需要使用上一个示例中所示的属性转换器仔细构造模式。一定有更好的办法!
在这个例子中,将使用名为SchemaSetter的特殊自定义转换器来构建模式功能,然后将使用FME操作该特性。这是一种常见的模式,应该在需要构建模式并编辑其内容时使用。
SchemaSetter>ListExploder>数据操作>ListBuilder
SchemaSetter用于使用当前功能的模式在FME中创建列表功能。接下来,使用ListExploder将列表拆分为各个功能,每个功能都包含列表中的属性名。第三步是根据需要操作模式(即排序)。最后,使用ListBuilder将所有内容重新组合到架构功能的新版本中。
以下是您为什么要这样做的几个例子:
在附加的工作区中,我们正在使用销售数据集创建数据透视表。当前数据如下:
季度 | 销售额 | 区域 |
2016Q1 | 一千九百三十六 | 新英格兰 |
2016Q2 | 一百六十七 | 新英格兰 |
2016Q1 | 一千二百三十五 | 大西洋中部 |
2016Q2 | 一百六十九 | 大西洋中部 |
我们需要的输出如下:
区域 | 2016Q1 | 2016Q2 | |
新英格兰 | 一千九百三十六 | 一百六十七 | |
大西洋中部 | 一千二百三十五 | 一百六十九 |
这是一个围绕区域字段的简单支点,还需要注意的是,我们没有对数据进行任何总计。我们如何使用FME?
使用attributeCreator根据“quarter”的值生成属性名。新属性的值将包含销售数据。
接下来,使用聚合器汇总每个区域
设置:
请将聚合器Group By设置为Region
在这一步之后,您已经对数据进行了透视,实际数据如下所示:
2016Q1 | 2016Q2 | 区域 |
一千九百三十六 | 一百六十七 | 新英格兰 |
一千二百三十五 | 一百六十九 | 大西洋中部 |
我的看起来像:
您应该注意到这个数据是以一种全新的方式构建的,因为它是直接在工作区内创建的。这很重要!动态工作区总是需要能够引用模式定义才能工作,在这种情况下,我们还没有定义一个模式定义(下面的步骤3将解决这个问题)。
因为我们只想操作一个模式特性(而不是对每个特性都这样做)。我们需要将数据分成两个流。第一个流应该连接到请求程序端口中一个全新的特性合并,而第二个流应该连接到一个采样器。使用采样器将一个特征传递到下一步。见下文:
在这个阶段,我们需要构建模式特性,然后操纵它。我们将从示意图变压器:
注意:使用要排除的前缀过滤掉任何额外的FME属性。
如果在使用Schemasetter之后要检查,您将看到存储的属性列表现在存储在功能上。
在这个阶段,模式已经被创建,但是没有按照您需要的排序顺序进行组织。让我们用一个列表爆炸器来解决这个问题:
该模式被划分为每个单独的属性,并存储在一个FME特性中。操作每个属性的时间。在所附的示例中,我们使用了一个分拣机变压器,但是由于我们讨论的是一个模式,这就是你的特殊需求得到满足的地方。修改名称,fme_data_type和list order as you see fit.
最后一步是将数据放回到一个列表中。使用ListBuilder来完成此操作。
现在,您有了一个已设计和编辑的完整模式功能。好极了!
将上述步骤3的输出连接到FeatureMerge上的供应商端口。进行1:1匹配以确保每个功能上都存在架构。这样可以确保编写器在遇到第一个特性时收到该模式。
最后,确保在动态模式下设置了编写器,并且源代码是您的模式特性。
运行工作区时,定义新的模式后,您将得到所需的输出。
最终工作区:
避免删除功能-FeatureReader:
如果使用FeatureReader创建模式功能,请注意,Transformer添加了一个特殊的属性和值:
fme_schema_handling='schema only'
此属性告诉编写器将该功能用作架构,然后将其从输出中移除。如果你做任何事,这可能是个问题数据和模式的合并在工作区中,与此架构功能合并的数据在写入时将被删除。例如,如果合并架构功能以便将其添加到工作区中的所有功能中。
为了确保不会发生这种情况,完全删除fme-schema-handling属性,这样编写器就不会删除第一个合并的数据功能。
?2019安全亚搏在线软件公司|合法的