如何更改从 ASA 到 PowerBi 的延迟

Posted

技术标签:

【中文标题】如何更改从 ASA 到 PowerBi 的延迟【英文标题】:How to change the delay from ASA to PowerBi 【发布时间】:2016-08-10 08:35:12 【问题描述】:

我在 ASA 中有一个来自 IoT 中心输入的简单查询,以每秒向 powerbi 发送平均计算。我可以看到第一个数据在 IoT 中心收到输入后 15-20 秒到达 PowerBi。 有什么办法可以减少这种延迟吗?

查询:

SELECT AVG(CAST(acctotal as float)) as average_shake, 
       CAST(MAX(eventTime) as datetime) as time
INTO powerbioutput
FROM iothubinput
TIMESTAMP BY eventTime
GROUP BY TumblingWindow(second, 1)

事件排序设置保持默认值 迟到天:00,小时:00,分钟:00,秒:05 乱序分:00,秒:00 行动:调整

【问题讨论】:

将 Streaming Units 从默认的 1 增加到最大 6 将延迟减少到 8-10 秒。我还能做什么? 您可以发布您的查询并发布您的事件排序设置吗? 为原始问题添加查询和设置 似乎将延迟到达中的所有时间值(包括秒数)设置为 0 会使其到达更快。默认情况下,ASA 可能会增加 5 秒的延迟以防范迟到的事件。 你是绝对正确的。更多地描述您的业务场景。什么填充事件中心? eventTime 列与事件到达事件中心的时间相比是否重要?如果设备出现延迟并且事件显示晚了 10 秒或 10 分钟,您会怎么做? 【参考方案1】:

如果您使用系统时间戳而不是事件时间,我想您会看到延迟消失。尝试仅删除“TIMESTAMP BY eventTime”行

【讨论】:

仅删除 TIMESTAMP BY,作业根本不会返回任何输出。是否有 TIMESTAMP BY EnquedTime 或类似的方法,我可以强制它使用传入的时间戳? 顺便说一句,当我将延迟到达设置秒数更改为 0 时,新门户中存在一个错误,它会更新回默认值 5 秒。虽然在旧门户中我可以看到它无论如何都会更新到 0 秒 我有 Drop as Late到达策略,一些输入在几秒钟后到达时被丢弃。我也可以看到一些细微的性能差异。【参考方案2】:

您可以通过以下方式获取系统时间 - 即事件流经 ASA 时赋予事件的时间戳:

SELECT System.Timestamp 

如 MSDN 中所述。

基于 Josh 的回应:也许您可以尝试以下方法:

SELECT AVG(CAST(acctotal as float)) as average_shake, 
   System.Timestamp as time
INTO powerbioutput
FROM iothubinput
TIMESTAMP BY time
GROUP BY TumblingWindow(second, 1)

【讨论】:

【参考方案3】:

您的输入事件量是多少,IoTHub 分区的数量是多少? ASA 合并来自 IOTHub 分区的数据并按时间排列事件以计算查询中定义的聚合。如果您有许多分区且事件数量相对较少,则可能会有额外的延迟,因为某些 IoTHub 分区可能没有数据,而 ASA 将等待数据出现(最大延迟由迟到策略控制)。

如果是这种情况,您可能希望使用更少的 IoTHub 分区。 通常,当您并行处理分区时(使用 PARTITION BY 子句),您会在 ASA 中看到更小的延迟。缺点是您最终会得到每个分区的部分聚合值。您可能可以在 PowerBI 中进一步聚合它们。

【讨论】:

以上是关于如何更改从 ASA 到 PowerBi 的延迟的主要内容,如果未能解决你的问题,请参考以下文章

来自 ASA 的 PowerBi 最新值

从 ASA 到 Power BI Map 的实时位置数据

如何在 powerBi 的高级编辑器中编写 Snowflake SELECT 语句查询

powerbi切片器细分变大

PowerBI入门到精通之入门

PowerBI – 如何设置流式数据报告?