如何在流分析作业查询中模拟 System.Timestamp()?
How to mock System.Timestamp() in Stream Analytics Job query?
我正在使用 azure-streamanalytics-cicd 来测试流分析作业的 asaql 查询。
在此查询中,我需要有当前时间戳:
SELECT
....,
System.Timestamp() AS event_datetime
INTO [mssql-output]
现在在测试部分,我将提供所有模拟输入并根据硬编码输出对其进行验证。但是由于时间戳值,测试一直失败。
查询本身按预期工作,但要有一个适当的 CI/CD 管道,我们需要 运行 这些测试。
我如何模拟它,以便对其进行检查?
您可以(并且应该)使用 TIMESTAMP BY.
定义自定义时间戳
在本地开发时,如果您不提供TIMESTAMP,我们将查询开始时间作为所有记录的时间戳。如果您进行任何类型的时间处理(分析函数,如滞后或超前、stream-stream 连接、时间聚合),它们很可能会对您产生奇怪的行为,因为它们将在查询开始时间的单个时间片上运行.
但这也意味着每个 运行 的 System.Timestamp()
都会不同,这会破坏单元测试。
我们正在努力在测试用例定义模板中添加一个排除列表,这样您就可以告诉测试 运行 人员在比较结果时不要考虑该列。但这是一个长期的事情,在这里无济于事。
有效的方法是使用 TIMESTAMP BY
。如果您没有事件时间戳或不想使用负载中的时间戳,您始终可以使用 TIMESTAMP BY EventEnqueuedUtcTime
,这是默认的隐式行为。这样您就可以将 EventEnqueuedUtcTime 添加到您的输入模拟文件和测试输入文件中,并控制单元测试的行为。
我正在使用 azure-streamanalytics-cicd 来测试流分析作业的 asaql 查询。
在此查询中,我需要有当前时间戳:
SELECT
....,
System.Timestamp() AS event_datetime
INTO [mssql-output]
现在在测试部分,我将提供所有模拟输入并根据硬编码输出对其进行验证。但是由于时间戳值,测试一直失败。 查询本身按预期工作,但要有一个适当的 CI/CD 管道,我们需要 运行 这些测试。
我如何模拟它,以便对其进行检查?
您可以(并且应该)使用 TIMESTAMP BY.
定义自定义时间戳在本地开发时,如果您不提供TIMESTAMP,我们将查询开始时间作为所有记录的时间戳。如果您进行任何类型的时间处理(分析函数,如滞后或超前、stream-stream 连接、时间聚合),它们很可能会对您产生奇怪的行为,因为它们将在查询开始时间的单个时间片上运行.
但这也意味着每个 运行 的 System.Timestamp()
都会不同,这会破坏单元测试。
我们正在努力在测试用例定义模板中添加一个排除列表,这样您就可以告诉测试 运行 人员在比较结果时不要考虑该列。但这是一个长期的事情,在这里无济于事。
有效的方法是使用 TIMESTAMP BY
。如果您没有事件时间戳或不想使用负载中的时间戳,您始终可以使用 TIMESTAMP BY EventEnqueuedUtcTime
,这是默认的隐式行为。这样您就可以将 EventEnqueuedUtcTime 添加到您的输入模拟文件和测试输入文件中,并控制单元测试的行为。