【发布时间】:2021-05-05 05:39:03
【问题描述】:
我有一组遥测数据以下列格式存储在表格中。让我们将此表称为 RawTelemetryData
| device_id | TIME | ABC | DEF | GHI | 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 秒来自多个 IoT 设备的遥测数据。我有一个客户端程序,需要根据 device_id 选择不同的列。
例如。对于 device_id 123,客户端程序需要 ABC,GHI 列。至于 device_id 121 客户端程序预计只有 ABC,DEF。
最初我正在考虑编写一个接受 device_id 和要选择的列的函数。像下面这样。其中第一个参数是设备 ID,第二个参数是要选择的列。假设我需要选择设备 id 123 的 ABC,GHI,我会像这样调用函数。
方法 1
getDataByDeviceId(123,"ABC,GHI") 这个函数应该只投影 ABC 和 GHI
.create-or-alter function with (folder = "getData", skipvalidation = "true") getDataByDeviceId(device_id:int,columns:string) {
}
但我无法让它工作。
方法 2
在这种方法中,我在单独的表中为每个 device_id 预先配置了列。在这种情况下,我尝试编写一个只接受设备 ID 和项目列的函数,这些列在下表中配置。
DEVICE_COLUMN_MAPPING_TABLE
| device_id | columns |
|---|---|
| 123 | ABC |
| 123 | DEF |
| 123 | GHI |
| 123 | LMN |
| 121 | ABC |
| 121 | DEF |
| 121 | GHI |
.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 本身上。也欢迎任何其他解决问题的方法:)
【问题讨论】:
-
我不太明白你想要达到什么目的。第一张桌子有什么用?请详细说明问题(也许通过添加一个示例),并通过回复此评论让我调查它。顺便说一句,请注意,您将无法在
extend的上下文中使用此函数,因为该函数必须使用toscalar(为了返回标量),而toscalar可以不能在每行上下文中使用。 -
@Slavik 我已经编辑了问题并进行了详细说明。你能检查一下,让我知道它现在是否有意义:)
标签: azure-data-explorer kql kusto-java-sdk