斯潘8
斯潘4
我有一个问题,即使用数百个数据集的动态工作区需要能够公开字段(如果它们是日期时间)。由于数据集和字段的数量众多,我真的不希望将其硬编码到工作区中。我希望有一种方法可以在字段是特定数据类型时公开它们,在本例中是日期时间。我需要公开它们的原因是因为JSON不能正确地写出日期时间字段,它们需要使用dateformter转换为字符串。工作区是动态的,可以根据输入的参数打开数百个数据类型。我不想硬编码,但我想我可能需要公开FeatureReader中的所有相关字段,我使用的是FME 2015.1。
日期格式化程序工作正常,但属性必须公开,以便能够在转换器中选择它们。
事先谢谢!
很有趣的问题。
它的根本是……当我们设计工作空间时所知道的,当我们运行它时我们知道什么。
当我们设计时,如果它是一个不知道模式的动态工作区,然后根据定义,我们不知道模式。所以属性公开是不可能的。我们能做的最好的就是在attributeexposer上给你一个“导入”选项,在这里你可以将你想象中遇到的所有可能的输入都输入进去,然后从中选择你想要“暴露”的,这样你就可以和他们一起工作了。但遗憾的是,你现在没有一个动态的工作空间,因为任何以前看不到的数据都可能没有公开您想要的内容。
因此,让我们来探索如何用2016年的FME很好地解决这个问题。
我将附加一个工作区——通过适当地配置FeatureReader来提供具有日期时间模式的任何数据。我们将“管理”这些日期时间字段,非常有效,在工作流结束时。亚搏在线只保留所有其他属性。并且永远不会“静态地”了解工作区中的输入数据。
诀窍是a)我们知道模式总是首先从特征读取者(这是根据设计,对于这样的事情)。b)我们有“全局变量”,我们可以设置和重置,可以从一个“流”到另一个“流”进行通信。c)我们有一个attributeExploder,可以将每个属性的特性分解为一个特性,所以我们可以一般地处理属性。d)我们可以用聚合器重新组装东西。
我在最后加了一个减速器,只是为了证明没有阻塞。
享受。我期待反馈。@ MARK2A亚搏在线TSAFE--我们可能需要一篇关于这种技术的知识型文章。@ MARK1空间 @马尔科 高桥 埃里克詹 @戴维德你的评论特别受欢迎。动态文档格式.fmw
昨天下午,我在想一些事情,刚刚尝试了我的版本,但无法将值输入到日期格式化程序的“日期属性”中。看起来像DaleAtS亚搏在线tabess爆炸数据的方法就是这样。需要直接将变量提取到变压器中的选项!!;-)
非常感谢DaleAtS亚搏在线tabess.遗憾的是,我们仍然在2015.1上,因为在2016.0.1上读取SQL Server时出错,我将在2016.1到来时再次测试。
我将研究这个问题,看看是否可以将它合并到我的工作台中。
谢谢。
您好!DaleAtS亚搏在线tabess,感谢分享这项技术。我认为它通常适用于根据属性的本地数据类型来操作属性,而不仅仅是针对日期。然而,似乎attributeExploder会导致性能下降,特别是在特性属性数量很大的情况下。
我想用TCL来解决@ MARK1空间的问题,这样地:b15575-dynamicdatatereformat-tcl.zip(B15575-dynamicdatatereformat-tcl.zip)
这个概念和戴尔的工作区是一样的。我没有发布它,因为我发现Mark的Python解决方案更通用、更灵活。
我认为如果将这些能力添加到FME中,就更容易实现这个概念。
@马尔科,这一个:B15575-dynamicDataTereformat.zip(B15575-dynamicDataTereformat.zip)与2015.1.3+合作。这和戴尔的不同,但概念是一样的。供参考
@马尔科你解决了吗?如果不是的话,我本周也会做一些类似的事情,这会有所帮助。
它不会公开字段,但会创建一个参数,我可以在dateformater转换器中使用该参数。对于您来说,问题可能是如果输入文件的格式不同,它可能会变得笨拙。在我的示例中,我还可以检测到日期属性,因为它是已知的数据类型。例如,如果您正在读取一个csv,这不会有帮助,因为数据类型未知。
夏威夷群岛@ MARK1空间,谢谢你的回复和提示。从第一眼看上去是个很好的解决方案,尽管您使用的是Python启动脚本还是调用方?我不确定在通用模式下使用功能阅读器时启动是否有效?
谢谢你的答复,我会调查的。目前,我只是将已知的值公开为SQL日期字段,对sys表的快速SQL查询显示了哪些表,一旦在FeatureReader中曝光,我就可以在DateFormatter中选择它们。它不是很优雅,但很实用!
在python脚本化的私有参数和标准阅读器中使用它不是FeatureReader,而是应该如果将其配置为读取相同的数据,则可以工作。如果它是从数据库发出的,那么它应该是可行的。
如果没有某种脚本,我看不出你怎么能做到这一点。attributeExploder和listconnator可能会为您提供属性名列表。然后将日期格式设置工具复制/粘贴到文本编辑器中,您将看到底层脚本,您可以在TclCaller中重新创建这些脚本,并适应您的需要。我就是这样开始的。希望它有帮助!
马克
您可以在JSontemplater中键入将属性强制转换为字符串,如果这对你有帮助:
“updated_at”:xs:string(fme:get attribute(“my_date_attribute”))
否则,可以使用pythoncaller循环所有传入属性,并将它们重新创建为字符串。
戴维
?2019安全亚搏在线软件公司|合法的