我需要有关在扩展窗口上执行聚合时如何忽略旧事件的帮助\建议。我有流到事件中心的销售数据。 事件中心用作输入流。我需要产生两个指标 -30秒聚合(滚动) -一整天的总销售价值,即来自Gate打开的时间
门打开时间是可变的(动态的),因此我从斑点处读取参考数据集;并将Gateopen日期时间加入销售流。 在滚动窗口上进行30秒的汇总可以正常工作。 给定门打开是可变的;我目前正在使用具有30秒跳跃的12小时跳跃窗口,并尝试通过使用EventProcessDatetime> GateOpen逻辑来限制要聚合的事件。
SELECT
Dateadd(ss,-30,System.Timestamp ) AS TimeSliceUTCStart
, System.Timestamp AS TimeSliceUTCEnd
, p.Section AS Section
, SUM(CASE WHEN p.Classification = 'Retail'
AND p.ActivityDateTime > p.GateOpen THEN p.[sales_amt_gross] ELSE 0 END) AS SaleTotalRetail
FROM FilteredBase p
GROUP BY
p.Section
, HoppingWindow(Duration(Hour, 12), hop(second, 30),Offset(millisecond, -1))
问题:我正在从前一天\时间片汇总销售量。 总的来说,我想要达到的结果很简单。商店最多可以开放5,8,10或12小时。我们希望能够随着一天的进展了解实时播报中每个部分的销售情况。任何建议或技巧将不胜感激。
答案 0 :(得分:0)
直觉上查询看起来不错,但是在幕后发生的是,Azure Stream Analytics使用的参考数据文件在每个时间窗口均有效。然后,当它看到前一天的晚上时,将使用当时存在的参考数据(这可能会使前一天的开放时间比较p.ActivityDateTime> p.GateOpen为True。
我按如下方式修改了查询(假设您每个部分每天有1个公开事件)。请让我知道这对你有没有用。如果没有,您是否可以发送一些示例数据,以便我可以相应地修改查询。我们将研究如何使这些查询更易于编写。
WITH thirdtysecReporting AS
(
SELECT
p.Section Section,
DATETIMEFROMPARTS(DATEPART(year, System.Timestamp), DATEPART(month, System.Timestamp), DATEPART(day, System.Timestamp), 0, 0, 0, 0) as date,
System.Timestamp Windowend,
SUM(p.sales_amt_gross) thirtysecSales
FROM input TIMESTAMP BY p.ActivityDateTime
GROUP BY TumblingWindow(second, 30), p.Section
)
,hopping AS
(
SELECT
Section,
System.Timestamp HopEnd,
date,
SUM(thirtysecSales) SumSales
FROM thirdtysecReporting
GROUP BY HoppingWindow(second, 86400, 30), Section, date -- Hopping on 24 hours, reported every 30 second
)
,filtered as -- This step ignores data from the previous day
(
SELECT
Section,
HopEnd,
date,
SUMQt = CASE
WHEN DAY(HopEnd) = DAY(date) OR DATEPART(hour, HopEnd) = DATEPART(hour, date) THEN SumSales
ELSE 0
END
FROM hopping
)
SELECT Section, -- Final query
HopEnd,
MAX(SUMQt) AS SumQt
FROM filtered
GROUP BY TumblingWindow(hour, 1), Section, hopend
谢谢
JS-Azure流分析