gpt4 book ai didi

azure-data-explorer - 从 kusto 函数动态返回列

转载 作者:行者123 更新时间:2023-12-05 03:42:07 27 4
gpt4 key购买 nike

我有一组遥测数据以下面的格式存储在表格中。让我们将此表称为 RawTelemetryData

<表类="s-表"><头>device_id时间ABCDEFGHILMN<正文>1232021-04-20 00:00:00.000000012341212021-04-20 00:00:00.00000001234

上表包含每 10 秒来自多个物联网设备的遥测数据。我有一个客户端程序,需要根据 device_id 选择不同的列。

例如。对于 device_id 123,客户端程序需要 ABC,GHI 列。至于 device_id 121 客户端程序期望只有 ABC、DEF。

最初我想编写一个接受 device_id 和要选择的列的函数。像下面这样。其中第一个参数是设备 ID,第二个参数是要选择的列。假设我需要选择设备 ID 为 123 的 ABC、GHI,我会像这样调用函数。

方法一

getDataByDeviceId(123,"ABC,GHI") 这个函数应该只投影 ABC 和 GHI

 .create-or-alter function with (folder = "getData", skipvalidation = "true") getDataByDeviceId(device_id:int,columns:string) {  

}

但我无法让它工作。

方法二

在这种方法中,我在单独的表中为每个 device_id 预配置了列。在这种情况下,我尝试编写一个仅接受设备 ID 和下表中配置的项目列的函数。

DEVICE_COLUMN_MAPPING_TABLE

<表类="s-表"><头>device_id列<正文>123ABC123DEF123GHI123LMN121ABC121DEF121GHI
 .create-or-alter function with (folder = "getData", skipvalidation = "true") getDataByDeviceId(device_id:int) {  
//program should look at DEVICE_COLUMN_MAPPING_TABLE for colums for this particular device id and project only that.
}

但不幸的是,我无法让它也工作。 :(

我想了解是否有可能使上述任何一种方法起作用。如果不行,我只能想到一个解决方案,即使用来自源程序(java程序,调用kusto函数)根据device_id调用获取结果。我试图避免这样做,并在 ADX 本身上制定我的所有逻辑。任何其他解决问题的方法也欢迎:)

最佳答案

这是基于您的第二种方法的解决方案:

let device_mappings = datatable(device_id:long, columns_output:string)[
123, "ABC",
123, "GHI",
121, "ABC",
121, "DEF",
122, "LMN"];
let dt = datatable(device_id:long,TIME:datetime,ABC:long,DEF:long,GHI:long,LMN:long)
[123,datetime(2021-04-20 00:00:00.0000000),1,2,3,4,
123,datetime(2021-04-21 00:00:00.0000000),10,20,30,40,
121,datetime(2021-04-20 00:00:00.0000000),1,2,3,4,
122,datetime(2021-04-20 00:00:00.0000000),1,2,3,4];
let func = view(id:long) {
let idKeys = toscalar(device_mappings | where device_id == id | summarize make_set(columns_output));
let otherKeys = toscalar(device_mappings | where device_id != id | summarize make_set(columns_output));
let keysToRemove = set_difference(otherKeys,idKeys);
dt
| where device_id == id
| extend rec = pack_all()
| project filteredRec = bag_remove_keys(rec, keysToRemove)
| evaluate bag_unpack(filteredRec)
};
func(123)

输出: enter image description here

关于azure-data-explorer - 从 kusto 函数动态返回列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67395722/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com