You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Azure Stream Analytics查询中处理数组与记录类型

刚接触Azure Stream Analytics(ASA)查询的话,处理这种带数组和嵌套结构的Application Insights导出JSON确实得掌握几个关键技巧,我结合你的场景给你一步步讲清楚怎么处理:

核心问题:先展开嵌套的Request数组

你的JSON里request是一个数组,ASA默认会把整个数组当成单个字段,没法直接把里面的每个请求条目单独推送到Power BI。所以第一步必须用CROSS APPLY GetArrayElements()函数把数组拆成独立的行。

基础查询示例(提取所有需要的字段)

假设你的ASA输入别名是AppInsightsBlobInput,输出是指向Power BI的PowerBIOutput,可以用下面的查询来处理:

SELECT
    -- 提取request数组中每个条目的核心字段
    req.ArrayValue.id AS RequestId,
    req.ArrayValue.name AS RequestName,
    req.ArrayValue.count AS RequestCount,
    req.ArrayValue.responseCode AS ResponseCode,
    req.ArrayValue.success AS IsRequestSuccess,
    req.ArrayValue.url AS FullRequestUrl,
    -- 提取嵌套的urlData子对象字段
    req.ArrayValue.urlData.base AS UrlPath,
    req.ArrayValue.urlData.host AS UrlHost,
    req.ArrayValue.urlData.protocol AS UrlProtocol,
    -- 提取durationMetric性能指标
    req.ArrayValue.durationMetric.value AS DurationMicroseconds,
    req.ArrayValue.durationMetric.min AS MinDuration,
    req.ArrayValue.durationMetric.max AS MaxDuration,
    -- 保留顶层的元数据(如果需要的话)
    internal.data.id AS TelemetryDocumentId,
    internal.data.documentVersion AS TelemetrySchemaVersion,
    -- 保留ASA自带的时间戳(用于Power BI时间轴分析)
    System.Timestamp() AS ProcessingTime
INTO
    [PowerBIOutput]
FROM
    [AppInsightsBlobInput] AS input
-- 关键操作:展开request数组为单独行
CROSS APPLY GetArrayElements(input.request) AS req

代码说明:

  • GetArrayElements(input.request)会遍历request数组中的每个对象,将其拆分成独立的数据行,用别名req指代每个数组元素
  • 数组元素的属性通过req.ArrayValue.xxx来访问,嵌套对象(比如urlData、durationMetric)直接用.链式访问即可

处理Context等其他顶层嵌套字段

你的示例里context字段是不完整的,如果里面包含用户、设备或自定义维度数据,处理逻辑完全一致:

  • 如果是普通嵌套对象,直接用input.context.data.userId这种格式提取字段
  • 如果context里也有数组(比如customDimensions数组),再追加一次CROSS APPLY GetArrayElements()即可,比如:
CROSS APPLY GetArrayElements(input.context.customDimensions) AS customDim

可选:添加聚合逻辑(适配Power BI可视化)

如果要在Power BI中展示统计类报表(比如按10分钟窗口统计请求数、平均响应时间),可以给查询加上窗口聚合:

SELECT
    req.ArrayValue.name AS RequestName,
    req.ArrayValue.responseCode AS ResponseCode,
    COUNT(req.ArrayValue.id) AS TotalRequests,
    AVG(req.ArrayValue.durationMetric.value / 1000) AS AvgDurationMilliseconds, -- 转换为毫秒
    System.Timestamp() AS WindowEndTime
INTO
    [PowerBIOutput]
FROM
    [AppInsightsBlobInput] AS input
CROSS APPLY GetArrayElements(input.request) AS req
-- 按10分钟滚动窗口聚合
GROUP BY
    req.ArrayValue.name,
    req.ArrayValue.responseCode,
    TumblingWindow(minute, 10)

测试查询的小技巧

在ASA的查询编辑器里,点击「测试查询」按钮,上传你的示例JSON文件,就能实时预览查询结果,确认字段提取是否正确,避免作业上线后出现数据缺失的问题。

内容的提问来源于stack exchange,提问作者Peter Sm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:18:03