Google cloud dataflow 谷歌云数据流-我能得到“吗?”;事件时间“;来自元数据?

Google cloud dataflow 谷歌云数据流-我能得到“吗?”;事件时间“;来自元数据?,google-cloud-dataflow,Google Cloud Dataflow,欢迎开发者, 我知道数据流(DF)可以从I/O(如Pubsub)获取事件时间,我还可以为数据分配“事件时间”。但是,我可以从数据中获取此属性值吗? 据我所知,我可以从数据中获取输入时间戳(处理时间),但不能从事件时间中获取。 问题1:我可以从数据中获取事件时间吗? 问题2:如果可以,如何获得? 感谢您的帮助:D要获取DoFn中元素的时间戳,您可以调用。要根据您自己的应用程序逻辑设置元素的时间戳,可以使用 像这样: @Override public void processElement(Proc

欢迎开发者,

我知道数据流(DF)可以从I/O(如Pubsub)获取事件时间,我还可以为数据分配“事件时间”。但是,我可以从数据中获取此属性值吗?

据我所知,我可以从数据中获取输入时间戳(处理时间),但不能从事件时间中获取。

问题1:我可以从数据中获取事件时间吗? 问题2:如果可以,如何获得?
感谢您的帮助:D

要获取DoFn中元素的时间戳,您可以调用。要根据您自己的应用程序逻辑设置元素的时间戳,可以使用

像这样:

@Override
public void processElement(ProcessContext c) {
  // Generate a timestamp that falls somewhere in two hours after the event time.
  long randMillis = (long) (Math.random() * Duration.standardHours(2).getMillis());
  Instant randomTimestamp = c.timestamp().plus(randMillis);
  c.outputWithTimestamp(c.element(), new Instant(randomTimestamp));
}

要获取DoFn中元素的时间戳,可以调用。要根据您自己的应用程序逻辑设置元素的时间戳,可以使用

像这样:

@Override
public void processElement(ProcessContext c) {
  // Generate a timestamp that falls somewhere in two hours after the event time.
  long randMillis = (long) (Math.random() * Duration.standardHours(2).getMillis());
  Instant randomTimestamp = c.timestamp().plus(randMillis);
  c.outputWithTimestamp(c.element(), new Instant(randomTimestamp));
}

我知道如何为数据分配时间戳,以及如何从数据中获取“输入时间”(处理时间)。但是我想问的问题是如何从数据中获取“事件时间”?是的,您可以使用ProcessContext.timestamp()来实现这一点。除非我误解了你的问题?
c.timestamp()
返回分配给当前元素的时间戳(在事件时间中)。在源(例如PubSub)上,这是从消息中的timestamp属性分配的,或者是基于该输入的到达时间分配的(其他源可能具有其他语义)。在管道中,您可以使用
outputWithTimestamp
更改分配给元素的时间戳。如果不使用
outputWithTimestamp
源分配的时间戳将传播。如果这还不清楚,你能用一个例子或更多的细节来详细说明你的问题吗?最近,我发现ProcessContext.timestamp()代表事件时间,我认为是之前的处理时间。感谢您的帮助,我知道ProcessContext.timestamp()可以得到我想要的结果。感谢您的帮助:DI知道如何为数据分配时间戳,以及如何从数据中获取“输入时间”(处理时间)。但是我想问的问题是如何从数据中获取“事件时间”?是的,您可以使用ProcessContext.timestamp()来实现这一点。除非我误解了你的问题?
c.timestamp()
返回分配给当前元素的时间戳(在事件时间中)。在源(例如PubSub)上,这是从消息中的timestamp属性分配的,或者是基于该输入的到达时间分配的(其他源可能具有其他语义)。在管道中,您可以使用
outputWithTimestamp
更改分配给元素的时间戳。如果不使用
outputWithTimestamp
源分配的时间戳将传播。如果这还不清楚,你能用一个例子或更多的细节来详细说明你的问题吗?最近,我发现ProcessContext.timestamp()代表事件时间,我认为是之前的处理时间。感谢您的帮助,我知道ProcessContext.timestamp()可以得到我想要的结果。谢谢你的帮助:D