我有一组遥测数据以以下格式存储在表格中。让我们将此表称为RawTelemetryData
设备编号 | 时间 | 美国广播公司 | 国防军 | 全球健康指数 | LMN |
---|---|---|---|---|---|
123 | 2021-04-20 00:00:00.0000000 | 1 | 2 | 3 | 4 |
121 | 2021-04-20 00:00:00.0000000 | 1 | 2 | 3 | 4 |
上表包含每 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
设备编号 | 列 |
---|---|
123 | 美国广播公司 |
123 | 国防军 |
123 | 全球健康指数 |
123 | LMN |
121 | 美国广播公司 |
121 | 国防军 |
121 | 全球健康指数 |
.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.
}
但不幸的是,我无法让这也正常工作。:(
我想了解是否有可能使上述任何方法起作用。如果不是,我只有一个我能想到的解决方案,那就是使用基于 device_id 的源程序(一个调用 kusto 函数的 java 程序)中的正确项目语句构造查询并调用以获取结果。我试图避免这样做,并将我的所有逻辑都放在 ADX 本身上。也欢迎任何其他解决问题的方法:)