如何在Kusto(Azure数据资源管理器)中基于动态correlationId连接两个数据集?

rkue9o1l  于 2023-08-07  发布在  其他
关注(0)|答案(1)|浏览(99)

我在Azure Data Explorer中有两个数据集:请求和例外。我想基于动态correlationId连接这些数据集。correlationId应使用两个数据集的operation_ParentId和operation_Id列的组合生成。
下面是我尝试的查询示例:

requests
| extend correlationId = strcat('c3172da7e4803fc2', '-', operation_Id) 
| join kind=inner (exceptions
                   | extend correlationId = strcat('c3172da7e4803fc2', '-', operation_Id) 
                  ) on correlationId
| project ProcessingDate, OpCo, Cosmos_OrderId, ReasonMessage, data, operation_ParentId, operation_Id, correlationId
| where Cosmos_OrderId contains "1983"

字符串
当我使用固定值作为correlationId的前缀时,上面的查询可以工作,但是当我尝试使用correlationId = strcat(operation_ParentId,'-',operation_Id)时,它不返回任何结果。
问题似乎是operation_ParentId对于两个数据集(请求和异常)是相同的,我不能将其用作唯一标识符。我还尝试使用Cosmos_OrderId和OpCo列,但它们在异常数据集中不可用。
有没有一种方法可以创建一个动态correlationId,将两个数据集的operation_ParentId和operation_Id结合起来,并使用它来有效地连接数据集?我知道笛卡尔连接可能是资源密集型的,所以我愿意探索其他方法来提高连接效率。
任何关于如何使用Kusto实现此连接的帮助或建议都将不胜感激。谢谢你,谢谢

waxmsbnn

waxmsbnn1#

我在我的环境中尝试了你的场景,它对我来说工作得很好。
我取了两个样本数据集,并能够基于动态correlationId连接这两个数据集。

我的密码:

let requests= datatable (operation_ParentId:string, operation_Id:string, name_requests:string, nick_name:string)
[
"1224","24","Rakesh","Virat",
"1226","26","Laddu","MS",
"1216","16","Raju","ABD"
];

let exceptions = datatable (operation_ParentId:string, operation_Id:string, name_exceptions:string)
[
"1224","24","Rakesh",
"1226","26","Laddu",
"1216","1","Datta"  
];

requests
| extend correlationId = strcat(operation_ParentId, '-', operation_Id) 
| join kind=inner (exceptions
                   | extend correlationId = strcat(operation_ParentId, '-', operation_Id) 
                  ) on correlationId
|project operation_ParentId, operation_Id, correlationId,name_exceptions,name_requests,nick_name;

字符串
您还可以看到两个数据集的内部联接和动态列。


的数据
重新检查数据集数据,确保operation_ParentId列是字符串类型。尝试通过添加一些列(如operation_ParentId)来执行相同的操作,并检查结果是否相同。

相关问题