在应用程序中,有一组事件进入事件中心,作为流分析的一部分,我有一组要求,其中一个是查明某些记录集是否未到达最后一个事件中心分钟。我在消息中有一个时间戳告诉我消息的有效时间,但是为了计算滞后(在消息的有效时间和now()之间),我需要知道运行时的当前时间戳。查询。
我尝试了System.Timestamp,但它给了我值#34; 1970-01-01T12:01:01.0010000Z"
该消息的排队时间戳最新如" 2018-05-06T00:00:00.1000000Z" ...但不确定为什么System.timestamp不会返回我的入队时间(当我有未使用" Timestamp By" Clause)。
所以,我有两个问题:
查询: 选择 System.Timestamp为ts 从 源
结果: " 1970-01-01T12:01:01.0010000Z"
输入数据中的所有时间戳都不早于2018年5月6日。
谢谢, Rajneesh
答案 0 :(得分:1)
该消息的Enqueue时间戳最新如“2018-05-06T00:00:00.1000000Z”...但不确定为什么System.timestamp不会返回我的入队时间(当我没有使用“Timestamp By”时) “条款”。
如System.Timestamp (Stream Analytics)所述:
如果没有为给定输入指定TIMESTAMP BY子句,则将事件的到达时间用作时间戳。例如,在事件中心输入的情况下将使用事件的入队时间。
我刚测试了这个问题并发现如果您只是在Azure门户的“JOB拓扑>查询”下测试查询,那么对于没有指定TIMESTAMP BY子句的方法,System.Timestamp的值将是{{ 1}}。在指定TIMESTAMP BY子句时,System.Timestamp的值将是您在TIMESTAMP BY子句中指定的列值。
然后,我刚为我的工作创建了一个Blob输入和Blob outout,然后在Overview选项卡下,单击Start以运行我的Stream Analytics作业,我可以成功检索System.Timestamp的正确值。
<强>查询:强>
1970-01-01T12:01:01.0010000Z
<强> TEST:强>
<强>更新强>
如何在执行流分析查询时获取服务器的当前时间戳。
根据您的要求,我假设您可以使用JavaScript UDF。我刚刚创建了一个示例UDF,如下所示:
SELECT birth,name,System.Timestamp as t
into output
FROM input
<强> TEST:强>
您可以计算UDF中的延迟或利用内置函数Date and Time Functions。