如何使用.NET以编程方式运行Azure Stream Analytics转换查询
解决方案
你的需求可以实现,不需要运行完整Stream Analytics作业,现有的管理SDK没有直接暴露测试查询方法,你可以通过以下两种方案实现:
方案1:直接调用Stream Analytics官方测试查询REST接口
这是最稳定的实现方式,只需要你具备Azure资源的查询调用权限即可,不需要作业运行权限:
- 调用端点为POST请求:
https://management.azure.com/subscriptions/你的订阅ID/resourceGroups/你的资源组名/providers/Microsoft.StreamAnalytics/streamingjobs/你的作业名/testQuery?api-version=2021-10-01-preview - 请求头需携带Azure AD认证的Bearer Token,可通过
Azure.Identity包的DefaultAzureCredential类快速获取 - 请求体结构示例:
{ "query": "Select Id, Name from 你的输入名", "inputs": [ { "name": "你的输入名", "data": { "snapshot": { "contentType": "application/json", "content": "你的JSON样本内容的字符串形式" } } } ], "output": { "alias": "output" } }
- 接口返回结果中会直接包含查询运行后的输出数据,你可以直接提取保存即可。
方案2:使用Azure.ResourceManager.StreamAnalytics预览版SDK
你可以直接使用官方封装好的.NET SDK方法,不需要自行拼接REST请求:
- 首先安装NuGet包:
Azure.ResourceManager.StreamAnalytics(需选择1.2.0-beta.1及以上预览版本) - 示例代码如下:
using Azure.Identity; using Azure.ResourceManager; using Azure.ResourceManager.StreamAnalytics; using Azure.ResourceManager.StreamAnalytics.Models; // 初始化客户端 ArmClient armClient = new ArmClient(new DefaultAzureCredential()); // 构造你的Stream Analytics作业资源ID StreamingJobResource streamingJob = armClient.GetStreamingJobResource( StreamingJobResource.CreateResourceIdentifier("你的订阅ID", "你的资源组名", "你的作业名") ); // 构造测试查询请求参数 StreamAnalyticsTestQueryContent content = new StreamAnalyticsTestQueryContent("你的查询语句") { Inputs = { new StreamAnalyticsQueryTestingInput("你的输入名") { Data = new StreamAnalyticsQueryTestingSnapshotContent { ContentType = "application/json", Content = "你的JSON样本内容字符串" } } } }; // 执行测试查询 var operation = await streamingJob.TestQueryAsync(WaitUntil.Completed, content); // 获取查询结果 var result = operation.Value; // 提取输出结果数据即可
注意事项
- 单次测试的样本输入内容大小不可超过100MB
- 查询语句中的输入别名必须和请求参数中配置的输入name完全一致
- 该操作不会产生作业运行费用,也不需要你拥有作业的启动/停止权限
内容的提问来源于stack exchange,提问作者vinx
相关产品推荐
相关产品推荐

