如何在流分析作业查询中模拟System.Timestamp()



我正在使用azure streamanalytics cicd来测试流分析作业的asaql查询。

在这个查询中,我需要有当前的时间戳:

SELECT 
....,
System.Timestamp() AS event_datetime
INTO [mssql-output]

现在,在测试部分,我将提供所有模拟输入,并根据硬编码输出进行验证。但是由于时间戳值的原因,测试始终失败。查询本身按预期工作,但要有一个合适的CI/CD管道,我们需要运行这些测试。

我怎么能嘲笑它,这样它就可以被检查了?

您可以(也应该(使用timestamp by.定义自定义时间戳

在本地开发时,如果不提供TIMESTAMP,我们将使用查询开始时间作为所有记录的时间戳。如果您进行任何类型的时间处理(分析函数,如滞后或超前、流-流连接、时间聚合(,它们很可能会对您产生奇怪的行为,因为它们将在查询开始时间的单个时间片上进行操作。

但这也意味着System.Timestamp()对于每次运行都是不同的,这将破坏单元测试。

我们正在测试用例定义模板中添加一个排除列表,这样您就可以告诉测试运行者在比较结果时不要考虑该列。但这是一件长期的事情,对这里没有帮助。

将使用TIMESTAMP BY。如果您没有事件时间戳,或者不想使用负载中的时间戳,则可以始终使用TIMESTAMP BY EventEnqueuedUtcTime,这是默认的隐式行为。通过这种方式,您可以将EventEnqueuedUtcTime添加到输入模拟文件和测试输入文件中,并控制单元测试的行为。

最新更新