In Azure Stream Analytic (IoT Hub), no matter what time window I specify, the TumblingWindow function fails to compare time and won't return the window I need. I am trying to use the below SQL code block to return me a 2-second window, but the output includes all events. As there is no pivot function in Stream Analytic, I am using the method suggested by @Joe-Zhang
In this case, there is an IoT read event every 2 seconds, and I am expecting only one event to be returned -
with tempone as (
select
cast(dataArr.ArrayValue.SourceTimestamp as datetime) as SourceTimestamp,
cast(valuesArr.ArrayValue.Address as bigint) as Address2,
max(cast(valuesArr.ArrayValue.Value as float)) as Value2
from iotinput i
cross apply GetArrayElements(i.Content) as contentArr
cross apply GetArrayElements(contentArr.ArrayValue.Data) as dataArr
cross apply GetArrayElements(dataArr.ArrayValue.[Values]) as valuesArr
WHERE cast(valuesArr.ArrayValue.Address as bigint) = 30002
GROUP BY cast(dataArr.ArrayValue.SourceTimestamp as datetime),
cast(valuesArr.ArrayValue.Address as bigint),
TumblingWindow(second, 2)
),
temptwo AS (
select
cast(dataArr.ArrayValue.SourceTimestamp as datetime) as SourceTimestamp,
cast(valuesArr.ArrayValue.Address as bigint) as Address3,
max(cast(valuesArr.ArrayValue.Value as float)) as Value3
from iotinput i
cross apply GetArrayElements(i.Content) as contentArr
cross apply GetArrayElements(contentArr.ArrayValue.Data) as dataArr
cross apply GetArrayElements(dataArr.ArrayValue.[Values]) as valuesArr
WHERE cast(valuesArr.ArrayValue.Address as bigint) = 30003
GROUP BY cast(dataArr.ArrayValue.SourceTimestamp as datetime),
cast(valuesArr.ArrayValue.Address as bigint),
TumblingWindow(second, 2)
)
select tempone.SourceTimestamp, tempone.Value2 as Temperature, temptwo.Value3 as Humidity from tempone
join temptwo on tempone.SourceTimestamp = temptwo.SourceTimestamp
and DATEDIFF(second,tempone, temptwo) BETWEEN 0 AND 2
Returned values -