gpt4 book ai didi

Azure 流分析 - 可以查询最近的非空值吗?

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

我有一个 Azure 流分析作业,其中包含来自 IoT 中心的输入数据,并且我正在将此数据发送到 Power BI。数据使用发布/订阅进行更新,因此每条消息仅更新一个值。因此,我的输入数据看起来像这样(MessageID 5 是最新消息):

<表类=“s-表”><标题>消息ID每分钟转数温度压力 <正文>5800空空4空50空3空空42空23空1900空空

我想在 Power bi 仪表板和实时固定到仪表板的报告上显示最新的非空值。在此示例中,我希望卡片或仪表显示每个变量的最新非空值,因此

RPM = 800,
Temperature = 50, and
Pressure = 4.

默认情况下,Power BI 仪表板会读取最新值,因此如果该值不是刚刚更新(并且在表中为 null),仪表板会显示 (Blank)。作为值。

是否可以从我的 Azure 流分析作业写入 SQL 查询来获取每个变量的最新非空值?或者其他一些解决方法?

谢谢

最佳答案

ASA 的好处之一是您可以将事件分组到 time window :

Illustration of a tumbling window

在这里,如果我理解正确的话,当你一次查看事件一时,你只会得到 1 个数据点。解决此问题的方法是查看时间窗口,并将所有数据点投影到单个输出事件中。

假设您应该每 10 秒收到 1 个数据点。然后,您可以编写一个查询,该查询将按该时间窗口上的所有事件进行分组,并输出包含所有 4 个事件的结果:


WITH dataPrep AS (
SELECT
CAST(GetMetadataPropertyValue(IoTHub, 'IoTHub.EnqueuedTime') AS datetime) AS eventDateTime,
GetMetadataPropertyValue(IoTHub, 'IoTHub.ConnectionDeviceId') AS DeviceId,
*
FROM IoTHub
)

SELECT
System.Timestamp() AS DateTime,
DeviceId,
LAST(RPM) OVER (PARTITION BY DeviceId LIMIT DURATION(second, 20) WHEN RPM IS NOT NULL),
LAST(FuelRate) OVER (PARTITION BY DeviceId LIMIT DURATION(second, 20) WHEN FuelRate IS NOT NULL),
LAST(DischargePressure) OVER (PARTITION BY DeviceId LIMIT DURATION(second, 20) WHEN DischargePressureIS NOT NULL),
LAST(SystemPressure) OVER (PARTITION BY DeviceId LIMIT DURATION(second, 20) WHEN SystemPressure IS NOT NULL)

INTO
powerbioutput
FROM
dataPrep TIMESTAMP BY eventDateTime
GROUP BY
DeviceId,
TumblingWindow(second,10)
WHERE
DeviceId = 'rpi1'

这里我用了LAST ,语法可能看起来有点复杂,但很简单。由于它需要 PARTITION BY,所以我必须将其明确化,如果您想在将来进行扩展,这无论如何都是一个很好的做法。

您可以根据您的要求使用 MAX、MIN 或 AVG 来简化操作。

你可以看看here for other ASA query patterns .

关于Azure 流分析 - 可以查询最近的非空值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67728921/

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