我有Apache Beam模型来实时处理多个时间序列。部署在GCP DataFlow上,它将多个时间序列合并到窗口中,并计算合计等。 现在,我需要对一直追溯到2017年的历史数据(相同(多个)时间序列数据)执行相同的操作。如何使用Apache Beam实现这一目标?
我知道我需要使用Apache Beam的windowing属性来计算聚合等,但是它应该接受2年以后的数据
有效地,我需要的数据是如果我在2年内部署相同的管道就可以获得的数据。这是测试/模型培训所必需的
答案 0 :(得分:0)
这听起来像是Beam专注于事件时间处理的完美用例。只要事件具有时间戳,就可以对任何旧数据运行管道并获得正确的结果。在没有其他上下文的情况下,我认为您将需要在流程中采取明确的步骤来分配需要从数据中提取的自定义时间戳(自2017年开始)。为此,您可以使用以下任一方法:
context.outputWithTimestamp()
在您的DoFn
中; WithTimestamps
PTransform
; 如果遇到时间戳订购问题,则可能需要配置允许的时间戳偏斜。
请参阅:
outputWithTimestamp
示例:https://github.com/apache/beam/blob/efcb20abd98da3b88579e0ace920c1c798fc959e/sdks/java/core/src/test/java/org/apache/beam/sdk/transforms/windowing/WindowingTest.java#L248 WithTimestamps
的文档:https://beam.apache.org/releases/javadoc/2.13.0/org/apache/beam/sdk/transforms/WithTimestamps.html#of-org.apache.beam.sdk.transforms.SerializableFunction-