ISFIRST (Azure Stream Analytics)

如果事件是指定固定間隔內的第一個事件,則傳回 1,否則傳回 0。 間隔的對齊方式與輪轉視窗相同, (請參閱 輪轉視窗) 。 ISFIRST 不會受到 WHERE 子句中的述詞、JOIN 子句中的聯結條件,或目前查詢之 GROUP BY 子句中的群組運算式所影響。 ).

語法

ISFIRST ( timeunit  , duration )   
    [ OVER ( [PARTITION BY partition_by_expression] [WHEN when_expression]) ]  
  

引數

timeunit

是持續期間的時間單位。 下表列出所有有效的時間單位值,---兩個完整時間單位值
名稱和縮寫可用於查詢。

Timeunit 縮寫
day dd, d
hour hh
minute mi, n
second ss, s
毫秒 ms
微秒 mcs

duration

大整數,指定間隔中的時間單位數目。 例如,
ISFIRST (分鐘,15 個) 會查看 15 分鐘的間隔。 間隔的開始時間為
與輪轉視窗一樣對齊, (請參閱輪轉 視窗 (Azure 串流分析) ) 。

[ 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 ('1' 或 '0' 分別代表 'true' 或 'false')

一般備註

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'

另請參閱

LAG (Azure Stream Analytics)
上次 (Azure 串流分析)