【问题标题】:How to get system time while running Azure Stream Analytics Query如何在运行 Azure 流分析查询时获取系统时间
【发布时间】:2018-05-08 04:13:30
【问题描述】:

在应用程序中,有一组事件到达事件中心,作为流分析的一部分,我有一组要求,其中一个是查明某些记录集是否在最近 x 中没有到达事件中心分钟。我在消息中有一个时间戳,它告诉我消息的有效时间,但是为了计算延迟(在消息的有效时间和 now() 之间),我需要在运行时知道当前时间戳查询。

我尝试了 System.Timestamp,但它给了我值“1970-01-01T12:01:01.0010000Z”

消息的入队时间戳是最新的,例如“2018-05-06T00:00:00.1000000Z”...但不知道为什么 System.timestamp 没有返回我入队时间(当我没有使用“Timestamp By " 子句)。

所以,我有两个问题:

  1. 在执行流分析查询时如何获取服务器的当前时间戳。
  2. 为什么 system.timestamp 不返回入队时间戳

查询: 选择 System.Timestamp as ts 从 来源

结果: "1970-01-01T12:01:01.0010000Z"

输入数据中的时间戳都不早于 2018 年 5 月 6 日。

谢谢, 拉杰尼什

【问题讨论】:

    标签: azure azure-stream-analytics


    【解决方案1】:

    消息的入队时间戳是最新的,例如“2018-05-06T00:00:00.1000000Z”...但不知道为什么 System.timestamp 没有返回我入队时间(当我没有使用“Timestamp By " 子句)。

    正如System.Timestamp (Stream Analytics) 所述:

    如果没有为给定输入指定 TIMESTAMP BY 子句,则将事件的到达时间用作时间戳。例如,在事件中心输入的情况下,将使用事件的排队时间。

    我刚刚测试了这个问题,发现如果你只是测试Azure Portal的“JOB TOPOLOGY > Query”下的查询,那么对于没有指定TIMESTAMP BY子句的方法,System.Timestamp的值会是1970-01-01T12:01:01.0010000Z .在指定 TIMESTAMP BY 子句时,System.Timestamp 的值将是您在 TIMESTAMP BY 子句中指定的列值。

    然后,我刚刚为我的作业创建了一个 Blob 输入和 Blob 输出,然后在概览选项卡下,单击开始运行我的流分析作业,我可以成功检索到 System.Timestamp 的正确值。

    查询:

    SELECT birth,name,System.Timestamp as t   
    into output
    FROM input
    

    测试:


    更新:

    在执行流分析查询时如何获取服务器的当前时间戳。

    根据您的要求,我假设您可以使用JavaScript UDF。我刚刚创建了一个示例 UDF,如下所示:

    function main(s) {
        return new Date().toISOString();
    }
    

    测试:

    您可以计算 UDF 中的延迟或利用内置函数 Date and Time Functions

    【讨论】:

    • 谢谢布鲁斯...这回答了第二个问题...对于第一个问题:假设我没有收到任何数据,我需要检测到,在这种情况下,我需要知道系统时间戳(服务器的)而不是入队时间(因为事件中心中没有消息)。有没有办法找到流分析服务器当前时间戳而不考虑源数据? System.Timestamp 要么告诉我入队时间,要么告诉我一些数据元素(这是一个时间戳)值(通过 Timestamp By 子句)......但我的要求是找出 x 秒内是否不存在特定类型的消息。跨度>
    • 为了您的要求,我做了一些测试。您可以按照我的回答中的更新部分进行操作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-03
    • 2013-01-25
    • 1970-01-01
    • 1970-01-01
    • 2016-07-12
    相关资源
    最近更新 更多