微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何强制增量Foundry Transforms作业以非增量方式构建而又不影响语义版本?

如何解决如何强制增量Foundry Transforms作业以非增量方式构建而又不影响语义版本?

如何在不更改转换存储库中的语义版本的情况下强制特定数据集以非增量方式构建?

有关我们特定用例的详细信息:

我们有大约50个数据集,这些数据集由单个增量python通过手动注册和for循环定义。此转换的输入可以在100到10000个小gzip文件之间,因此,当运行较大的数据集时,最终会将所有这些文件分区为少数几个大小合适的镶木地板文件,这对于我们的下游作业非常理想。但是,此作业已连续运行了几个月(文件每小时发送一次)后,输出中还将有大量小木地板文件。我们希望能够强制对单个数据集进行快照构建,而不必改变转换的语义版本,因为语义版本会触发所有50个数据集的快照构建。这可能吗?

我知道一个潜在的解决方法是在转换本身中定义“最大输出文件”,读取现有输出中的当前文件数量,如果当前超过最大数量则强制执行快照。但是,由于该管道是时间敏感的(需要在一个小时内运行),这会给管道带来一定程度的不可预测性,因为快照构建需要更长的时间。我们希望能够将这些完整的快照版本设置为每月大约在周末运行一次。

解决方法

在输出数据集上提交一个空的追加事务。

,

这些天,我首选的方法是使用所谓的“快照数据集”。这种方法使您可以在任意点将快照事务注入到管道中,并按固定的时间间隔计划快照构建,这对于保持长期的低延迟管道性能非常有用。

为此,我在声明转换时使用包装器(在我的情况下为java转换,但对python同样适用),这为转换添加了额外的输入。

假设您从一个转换开始,该转换读取数据集AB并生成数据集C。包装器将插入一个名为CSnapshotDataset的附加数据集,并生成一个生成该(空)数据集的转换。

生成CSnapshotDataset的自动生成的转换将始终在构建数据集时将空SNAPSHOT事务放入数据集中。当CSnapshotDataset中有一个新的快照事务时,您的转换也将输出一个快照事务。

然后要从给定点开始对管道进行快照,例如从数据集C开始并对其进行快照,只需选择C的快照数据集(在这种情况下为CSnapshotDataset)并进行构建。管道的下一个(预定)运行将为C及其下游的所有快照创建快照。

要定期运行此程序,可以设置生成CSnapshotDataset的时间表。

我慷慨地应用了该包装器(通常应用于我编写的任何转换),这使我可以灵活地从可能需要它的任何数据集中快照管道。

虽然要进行一些前期工作,但这样做的主要优点是:

  • 单击一次即可启动快照,单击几次即可设置计划的快照,而不必进行多次curl调用
  • 它使输入和输出数据集的事务历史记录保持干净
  • 它完全在平台上发生,不需要使用命令行,詹金斯或类似工具提取令牌
,

我想你可以

用于输入: 输入= input.dataframe('当前')

用于输出: output.set_mode('replace')

,

我认为您只是在运行时决定是在输出到TransformOutput.set_mode()还是replace的过程中使用modify。 这样,您可以根据输入的大小来决定是否要覆盖或附加到输出

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。