Scio JobTest,PubSubIO,pubsubSubscriptionWithAttributes,timestampAttribute和Windowing问题

时间:2018-03-02 12:29:50

标签: spotify-scio

我正在构建一个管道,用于将数据从PubSub备份到GCS,并希望使用JobTest创建测试,我很难让PubSubIO正确地获取事件时间。

使用sc.pubsubSubscriptionWithAttributes[String]("path/to/subscription", timestampAttribute = "doc_timestamp")读取PubSub。在此之后,我应用窗口并将其发送到CustomIO

测试如下:

JobTest[PubSub2GCS.type]
  .args("--subscription=input", "--targetDir=output")
  .input(PubsubIO[(String, Map[String, String])]("input"), Seq(("Contents", Map[String, String]("doc_timestamp" -> "2001-01-01T09:10:11.332Z"))))
  .output(CustomIO[KV[String, WindowedDoc]]("output"))(_.debug())
  .run()

结果是该值放在-290308-12-21T20:00:00.000Z..-290308-12-21T21:00:00.000Z窗口!!可能是因为"doc_timestamp"上的日期未正确解释。实际上,无论"doc_timestamp"键上的值如何,窗口都不会改变。

幸运的是,这项工作在生产中运行时工作正常,但我想写下这些测试。

1 个答案:

答案 0 :(得分:1)

这是因为Map[String, String]中的ScioContext#pubsubSubscriptionWithAttributes属性未填充在JobTest中。

我们可能可以在此处添加条件,如果ScioContext#isTesttimestampAttribute != null可以设置时间戳 https://github.com/spotify/scio/blob/master/scio-core/src/main/scala/com/spotify/scio/ScioContext.scala#L572

似乎是琐事修复。您能否提出问题here并提交PR?