流分析输入上的参考数据连接不提供输出

Posted

技术标签:

【中文标题】流分析输入上的参考数据连接不提供输出【英文标题】:Reference data join on stream analytics input not giving output 【发布时间】:2018-09-05 20:59:23 【问题描述】:

我正在尝试使用来自事件中心的参考数据和输入流在 Azure 流分析作业中设置规则。

这是我在 BLOB 存储中的参考数据 JSON 包:


    "ruleId": 1234, 
    "Tag" : "TAG1", 
    "metricName": "velocity", 
    "alertName": "velocity over 500",
    "operator" : "AVGGREATEROREQUAL",
    "value": 500

这是流分析作业中的转换查询:

WITH
transformedInput AS
(
    SELECT
        metric = GetArrayElement(DeviceInputStream.data,0),
        masterTag = rules.Tag, 
        ruleId = rules.ruleId, 
        alertName = rules.alertName,
        ruleOperator = rules.operator, 
        ruleValue = rules.value
    FROM 
        DeviceInputStream
        timestamp by EventProcessedUtcTime
    JOIN 
        rules
        ON DeviceInputStream.masterTag = rules.Tag
)
--rule output--
SELECT
    System.Timestamp as time,
    transformedInput.Tag as Tag,
    transformedInput.ruleId as ruleId,
    transformedInput.alertName as alert,
    AVG(metric.velocity) as avg
    INTO
    alertruleblob
FROM
    transformedInput
GROUP BY
    transformedInput.masterTag,
    transformedInput.ruleId,
    transformedInput.alertName,
    ruleOperator, 
    ruleValue, 
    TumblingWindow(second, 6)
HAVING
    ruleOperator = 'AVGGREATEROREQUAL' AND avg(metric.velocity) >= ruleValue

这不会产生任何结果。但是,当我使用样本输入和参考数据进行测试时,我得到了预期的结果。但这似乎不适用于流数据。我的用例是,如果 6 秒窗口的平均速度大于 500,则将结果存储到另一个 blob 存储中。一段时间以来,velocity 的值一直大于 500,但我没有得到任何结果。

我做错了什么?

【问题讨论】:

根据您的描述,我这边很难重现您的问题。建议您尝试追踪ASA的日志,请参考此文档:azure.microsoft.com/en-us/blog/… 【参考方案1】:

这一直有效。我只需要在流分析的参考输入路径中指定参考 blob 的输入路径,包括文件名。我基本上只引用了没有实际文件的 blob 容器。因此,当我将路径模式更改为“filename.json”时,我得到了结果。这是一个愚蠢的错误。

【讨论】:

以上是关于流分析输入上的参考数据连接不提供输出的主要内容,如果未能解决你的问题,请参考以下文章

流分析 - 如何处理参考输入中的 json

java中输出流不关闭为啥不能写入

浅谈Java中流的概念与用途

java.io.PipedInputStream

Java IO流

IO流