我正在构建一个管道,用于将数据从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"
键上的值如何,窗口都不会改变。
幸运的是,这项工作在生产中运行时工作正常,但我想写下这些测试。
答案 0 :(得分:1)
这是因为Map[String, String]
中的ScioContext#pubsubSubscriptionWithAttributes
属性未填充在JobTest
中。
我们可能可以在此处添加条件,如果ScioContext#isTest
和timestampAttribute != null
可以设置时间戳
https://github.com/spotify/scio/blob/master/scio-core/src/main/scala/com/spotify/scio/ScioContext.scala#L572
似乎是琐事修复。您能否提出问题here并提交PR?