非常令人印象深刻。我们将讨论如何使这项工作更容易完成,我喜欢高桥的建议。
您好!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+合作。这和戴尔的不同,但概念是一样的。供参考
非常感谢DaleAtS亚搏在线tabess.遗憾的是,我们仍然在2015.1上,因为在2016.0.1上读取SQL Server时出错,我将在2016.1到来时再次测试。
我将研究这个问题,看看是否可以将它合并到我的工作台中。
谢谢。
昨天下午,我在想一些事情,刚刚尝试了我的版本,但无法将值输入到日期格式化程序的“日期属性”中。看起来像DaleAtS亚搏在线tabess爆炸数据的方法就是这样。需要直接将变量提取到变压器中的选项!!;-)
很有趣的问题。
它的根本是……当我们设计工作空间时所知道的,当我们运行它时我们知道什么。
当我们设计时,如果它是一个不知道模式的动态工作区,然后根据定义,我们不知道模式。所以属性公开是不可能的。我们能做的最好的就是在attributeexposer上给你一个“导入”选项,在这里你可以将你想象中遇到的所有可能的输入都输入进去,然后从中选择你想要“暴露”的,这样你就可以和他们一起工作了。但遗憾的是,你现在没有一个动态的工作空间,因为任何以前看不到的数据都可能没有公开您想要的内容。
因此,让我们来探索如何用2016年的FME很好地解决这个问题。
我将附加一个工作区——通过适当地配置FeatureReader来提供任何具有日期时间模式的数据。我们将“管理”这些日期时间字段,非常有效,在工作流结束时。亚搏在线只保留所有其他属性。并且永远不会“静态地”了解工作区中的输入数据。
诀窍是a)我们知道模式总是首先从特征读取者(这是根据设计,对于这样的事情)。b)我们有“全局变量”,我们可以设置和重置,可以从一个“流”到另一个“流”进行通信。c)我们有一个attributeExploder,可以将每个属性的特性分解为一个特性,所以我们可以一般地处理属性。d)我们可以用聚合器重新组装东西。
我在最后加了一个减速器,只是为了证明没有阻塞。
享受。我期待反馈。@ MARK2A亚搏在线TSAFE--我们可能需要一篇关于这种技术的知识型文章。@ MARK1空间 @马尔科 高桥 埃里克詹 @戴维德你的评论特别受欢迎。动态文档格式.fmw
我不确定一个普通的读者会因为桌子很大而工作。由于基础设施没有提供搜索范围,因此无法限制进入时的区域搜索。所以读者必须阅读整个表格,英国广域数据!功能在FeatureReader之前生成,以便使用查找将数据搜索限制到指定区域。
除非python可以从模式阅读器工作?另一个问题是,一个工作区可能打开数百个不同的数据集,这取决于发送的参数,所以它变得非常复杂。我认为硬编码方式可能很枯燥,但从长远来看可能更容易选择?
在知识中心,有几个与模式和特性阅读器相关的问题/想法。我希望SAFE亚搏在线推出更先进的暴露变压器,允许暴露所有,或按类型等。
在python脚本化的私有参数和标准阅读器中使用它不是FeatureReader,而是应该如果将其配置为读取相同的数据,则可以工作。如果它是从数据库发出的,那么它应该是可行的。
夏威夷群岛@ MARK1空间,谢谢你的回复和提示。从第一眼看上去是个很好的解决方案,尽管您使用的是Python启动脚本还是调用方?我不确定在通用模式下使用功能阅读器时启动是否有效?
谢谢你的答复,我会调查的。目前,我只是将已知的值公开为SQL日期字段,对sys表的快速SQL查询显示了哪些表,一旦在FeatureReader中曝光,我就可以在DateFormatter中选择它们。它不是很优雅,但很实用!
@马尔科你解决了吗?如果不是的话,我本周也会做一些类似的事情,这会有所帮助。
它不会公开字段,但会创建一个参数,我可以在dateformater转换器中使用该参数。对于您来说,问题可能是如果输入文件的格式不同,它可能会变得笨拙。在我的示例中,我还可以检测到日期属性,因为它是已知的数据类型。例如,如果您正在读取一个csv,这不会有帮助,因为数据类型未知。
我意识到这与在FeatureReader中公开属性,然后在链中使用日期格式化程序没有什么不同,因为我需要知道该字段来替换“我的日期属性”。在所有数据集中,可能有近数百个日期字段,所有数据集都具有不同的名称。对于Suggestion,我开始认为唯一的方法就是通过将每个属性“硬编码”到工作区来公开它,不是最好的解决方案,但我认为唯一一个有效的解决方案是不会引起爆炸性头痛。
感谢您的所有建议和帮助。我将从尝试用JSontemplater更改JSON开始,谢谢@戴维德.
似乎批量属性公开器真的很有帮助,并且已经有很多关于这个主题的想法。
谢谢马克,我试过在FeatureReader没有模式端口时重新分解属性,让我头疼!所以我很高兴他们在2015年1月加入港口。我想我会先尝试一下jContemplater,然后再与列表和爆炸器搏斗!
谢谢你的建议,它是一个非常复杂的工作区,必须快速运行,我担心添加模式阅读器会使事情更加复杂。有许多数据集通过一个功能阅读器流动,因此进行另一次合并可能会进一步减慢速度。谢谢你的建议,不过我会调查的。
我会调查的谢谢你,
现在已经有一些关于批量属性公开器思想的主题,我认为这将非常有用。有时必须使用来自功能阅读器的模式端口是有限制的,一个暴露所有变压器将是惊人的!
你能从这个主题中提出一个想法吗?
我希望BulkAttributeExposer具有使用通配符或按数据类型公开的选项。
如果没有某种脚本,我看不出你怎么能做到这一点。attributeExploder和listconnator可能会为您提供属性名列表。然后将日期格式设置工具复制/粘贴到文本编辑器中,您将看到底层脚本,您可以在TclCaller中重新创建这些脚本,并适应您的需要。我就是这样开始的。希望它有帮助!
作记号
您可以在JSontemplater中键入将属性强制转换为字符串,如果这对你有帮助:
“updated_at”:xs:string(fme:get attribute(“my_date_attribute”))
否则,可以使用pythoncaller循环所有传入属性,并将它们重新创建为字符串。
戴维
你可以使用一个模式阅读器,通过测试仪选择日期类型属性。
然后对数据进行合并以选择要重新格式化的数据。
attributeExploder也可以用于此。