Azure 流分析测试查询编辑器与 ComosDB 和 Blob 中的最终输出不匹配
Posted
技术标签:
【中文标题】Azure 流分析测试查询编辑器与 ComosDB 和 Blob 中的最终输出不匹配【英文标题】:Azure Stream Analytics Test Query Editor not matching final output in ComosDB and Blob 【发布时间】:2018-10-22 07:15:34 【问题描述】:我创建了一个流分析作业,并使用我验证了查询产生正确输出的门户。问题是当我启动流分析作业时,发送到 CosmosDB 的输出是完全不同的意外结果。
这是基本查询,它使用了一些带有 SlidingWindow 的聚合函数:
SELECT src.DeviceID, System.Timestamp as Time,
AVG(src.Value) as [AvgValue],
MIN(src.Value) as [MinValue],
MAX(src.Value) as [MaxValue],
COUNT(src.Value) as [SampleCount]
INTO [AvgOutputToCosmosDB]
FROM
[blob-stream-dev-testsample] as src TIMESTAMP BY src.DateTimeEndUTC
GROUP BY SlidingWindow(hour,1), src.DeviceID
我已经测试了上述交替使用 WITH 语句并写入 CosmosDB 和 Blob 存储,但两者都有相同的错误输出。
我预计每个设备 ID 有 576 个平均日志。我得到的是每个设备 ID 一个平均日志,它使用 576 个日志 (SampleCount) 来计算平均值。
如上所述,当使用 Azure 门户测试查询时,它可以工作。每个设备的平均滚动小时数为 576。 我有:
-
使用计算滚动平均值的测试 C# 应用程序验证了门户中的输出,一切正常。
将 CosmosDB 集合配置为无限制并使用 deviceid 上的分区。我认为这不是 CosmosDB,因为它发生在 Blob 存储中。
在我的测试中,我手动上传了 JSON 文件,并从 blob 存储中读取了 JSON 文件 - 门户再次正常工作。
有人见过这个吗? 我想知道流分析作业使用的语言环境是否存在某种 DateTime 转换问题?
更新
我刚刚使用事件中心主题作为输入流测试了相同的查询,它在门户和运行 SA 作业时都有效。当 SA 作业从 Blob 存储读取 JSON 文件时,一定存在某种日期时间序列化问题。
【问题讨论】:
请检查使用 blob 作为输入时是否有任何延迟或降级事件。如果没有,请从 select * 开始进行调试 【参考方案1】:blob 和另一个输入之间的一个区别是我们获取到达时间的方式:对于 blob,到达时间是从BlobLastModifiedUtcTime 读取的。这意味着如果申请时间(src.DateTimeEndUTC)和到达时间(BlobLastModifiedUtcTime)之间的差异大于延迟到达策略,它将被调整并且您的所有事件将在同一时间窗口中。您可以找到与此设置相关的更多信息here。
我的建议是检查您当前的延迟到达政策,并确保事件在此政策结束之前到达 blob。
顺便说一句,您是在流式传输实时数据,还是重新处理历史数据?
如果您有任何其他问题,请告诉我,我们很乐意为您提供帮助。
【讨论】:
我不确定这是我的问题,因为所有项目都是从 blob 存储文件中读取的。看起来它无法识别日期时间字段来生成聚合 GROUP BY。 TIMESTAMP BY 不应该用我的消息中的时间戳覆盖默认时间戳吗?聚合输出所有记录,它只是跳过了日期时间字段并以 DeviceID 开头。那么为什么它忽略了 TIMESTAMP BY 命令呢? 测试数据为当天,未启用迟到政策。如果这是一个问题,我认为它会跳过文件。所有数据都在输出中,所以它看起来像是 TIMESTAMP BY 上的失败。我们确实希望在未来处理历史数据,但我们首先需要解决与流分析和 IoT/Event Hub 使用的 AVRO 格式不兼容的问题。以上是关于Azure 流分析测试查询编辑器与 ComosDB 和 Blob 中的最终输出不匹配的主要内容,如果未能解决你的问题,请参考以下文章
如何根据 ComosDb 中的聚合函数结果对查询结果进行排序?