✅ Azure 流分析 ✅ 构造事件流
如果事件是给定固定间隔内的第一个事件,则返回 1;否则返回 0。 间隔与翻转窗口的对齐方式相同(请参阅 翻转窗口)。 ISFIRST 不受 WHERE 子句中的谓词、JOIN 子句中的联接条件或当前查询的 GROUP BY 子句中的分组表达式的影响。 ).
语法
ISFIRST ( timeunit , duration )
[ OVER ( [PARTITION BY partition_by_expression] [WHEN when_expression]) ]
论据
timeunit
持续时间的时间单位。 下表列出了所有有效的时间单位值,---两者都已满
名称和缩写可用于查询。
| Timeunit | 缩写形式 |
|---|---|
| 日 | dd、d |
| 小时 | hh |
| 分钟 | mi、 n |
| 秒 | ss、s |
| 毫秒 | 女士 |
| 微秒 | mcs |
期间
一个大整数,指定间隔中的时间单位数。 例如,
ISFIRST(分钟,15 分钟)将查看 15 分钟的间隔。 间隔的开始时间为
与翻转窗口一样对齐(请参阅 翻转窗口)。
[ OVER (partition_by_clause [when_clause]) ]
OVER 子句指定此事件在其中排名的事件的子集:
PARTITION BY partition_by_expression 子句将 FROM 生成的结果集除以
子句应用于函数的分区。 换句话说,比较每个事件
仅共享其 partition_by_expression值的此类其他事件。 如果未指定,则每个
事件根据时间间隔内所有其他事件进行排名。
WHEN when_expression 子句指定要考虑的事件的布尔条件。
换句话说,每个事件仅与满足的其他事件进行比较
when_expression。 如果事件本身不满足 when_expression,则函数返回 0。
WHEN 子句是可选的。
返回类型
bigint(分别表示“true”或“false”的“1”或“0”)
一般备注
ISFIRST 是不确定的。 事件按时态顺序进行处理。 如果有多个事件具有相同时间戳事件,则按到达顺序进行处理。
对 开窗函数 的结果集应用 ISFIRST 可能会产生意外的结果。 窗口化函数会更改事件的时间戳,因为每个窗口作都会在窗口末尾输出事件。 在窗口作后,可以使用 system.timestamp()访问事件的当前时间戳,它与原始事件时间属性不同。 如果在窗口作之前无法移动 ISFIRST,请考虑使用 CollectTop,按原始事件时间排序。
例子
指示传感器读取事件是否为 10 分钟内的第一个翻转间隔:
SELECT
reading,
ISFIRST(mi, 10) as first
FROM Input
指示事件是否是每个 deviceid 的 10 分钟内第一个翻转间隔:
SELECT
deviceid,
reading,
ISFIRST(mi, 10) OVER (PARTITION BY deviceid) as first
FROM Input
指示事件是否是第一个值在 10 分钟翻转间隔内大于 50 的事件
每个 deviceid:
SELECT
deviceid,
reading,
ISFIRST(mi, 10) OVER (PARTITION BY deviceid WHEN reading > 50 AND devicetype = 'thermostat') as firstAbove,
ISFIRST(mi, 10) OVER (PARTITION BY deviceid WHEN reading < 50 AND devicetype = 'thermostat') as firstUnder
FROM Input
WHERE
devicetype = 'thermostat'
另请参阅
滞后
上次