在 Azure 流分析查询中同时使用数组和记录类型

Posted

技术标签:

【中文标题】在 Azure 流分析查询中同时使用数组和记录类型【英文标题】:Working with both Array and Record type in Azure Stream Analytics query 【发布时间】:2018-02-02 15:50:59 【问题描述】:

我是 Azure 流分析查询的新手。我的方案是使用连续导出将 Application Insight 遥测数据写入 Azure Blob 存储,并使用流分析作业将数据从 Blob 存储推送到 Power BI。我的 json 文件同时具有 Array 和 Request 类型,如下所示:


	"request": [
		
			"id": "|HLHUdGy4c3g=.556f8524_",
			"name": "HEAD Todos/Index",
			"count": 1,
			"responseCode": 200,
			"success": true,
			"url": "http://todoapp20183001.azurewebsites.net/",
			"urlData": 
				"base": "/",
				"host": "todoapp20183001.azurewebsites.net",
				"hashTag": "",
				"protocol": "http"
			,
			"durationMetric": 
				"value": 973023,
				"count": 1,
				"min": 973023,
				"max": 973023,
				"stdDev": 0,
				"sampledValue": 973023
			
		
	],
	"internal": 
		"data": 
			"id": "124c5c1c-0820-11e8-a590-d95f25fd3f7f",
			"documentVersion": "1.61"
		
	,
	"context": 
		"data": 
			"eventTime": "2018-02-02T13:50:39.591Z",
			"isSynthetic": false,
			"samplingRate": 100
		,
		"cloud": ,
		"device": 
			"type": "PC",
			"roleName": "todoapp20183001",
			"roleInstance": "RD0003FF6D001A",
			"screenResolution": 
		,
		"user": 
			"isAuthenticated": false
		,
		"session": 
			"isFirst": false
		,
		"operation": 
			"id": "HLHUdGy4c3g=",
			"parentId": "HLHUdGy4c3g=",
			"name": "HEAD Todos/Index"
		,
		"location": 
			"clientip": "35.153.211.0",
			"continent": "North America",
			"country": "United States",
			"province": "Virginia",
			"city": "Ashburn"
		,
		"custom": 
			"dimensions": [
				
					"_MS.ProcessedByMetricExtractors": "(Name:'Requests', Ver:'1.0')"
				
			]
		
	

使用以下查询,我可以收到预期的输出。

WITH Request AS
(
    SELECT
        context.location.country as country,
        context.location.city as city,
        GetArrayElement(request,0) as requests
        FROM FromBlob
)

SELECT country, city, requests.name
FROM Request

现在我需要按城市计算所有请求,但我似乎无法使用 COUNT() 和 GROUP BY() 完成它。在这种情况下是否有提示或参考?

【问题讨论】:

您能否使用 Count 和 Group By 发布您的尝试,它应该可以工作。 它不起作用,因为我要分组的列(国家)不存在。 我认为我必须使用 javascript UDF 将 context.location.city 转换为某种东西,然后才能按它进行分组。我不确定该怎么做! 【参考方案1】:

这是一个每 5 分钟计算一次请求数的示例。 请注意,我必须向 GROUB BY 添加一个时间组件,因为您的数据是流式数据,并且您希望在有限的时间内进行聚合。

WITH Request AS
(
SELECT
    context.location.country as country,
    context.location.city as city,
    GetArrayElement(request,0) as requests
    FROM iothub
)
SELECT country, city, count(requests.name)
FROM Request
group by country,city,SlidingWindow(minute,5)

让我知道它是否适合你。

【讨论】:

以上是关于在 Azure 流分析查询中同时使用数组和记录类型的主要内容,如果未能解决你的问题,请参考以下文章

流分析 - 查询嵌套数组返回 0 个结果

Azure 流分析时间窗口查询

如何使用 Azure 流分析查询创建复杂类型

在流分析查询中将已知属性从记录提升到***结果

如何在运行 Azure 流分析查询时获取系统时间

如何在 Azure 流分析中展平嵌套的 json 数据