ROLLINGKTHLARGEST 函式

計算目前資料列往前或往後的滾動第 k 大的值。

KTHLARGEST 會從資料欄的值中擷取排名值,並於 k=1 時傳回最大值。k 的值必須介於 1 到 1000 之間 (含首尾)。為便於本次計算,具有相同值的兩個例項將視為個別的值。因此,如果您的資料集裡有三個資料列,其中含有 1099 的資料欄值,則 KTHLARGEST 會在 k=2k=3 時傳回 9

ROLLINGKTHLARGEST 會計算資料欄中定義範圍裡的 KTHLARGEST 值。

  • 如果輸入值遺漏或為空值,則不會列入計算,例如資料集中的第一列之前的滾動值為未定義。
  • 擷取值的來源資料列由 order 參數指定的資料列排序決定。

    如果您正在處理隨機產生的資料集樣本,則您在此函式中看到的值未必會對應到工作執行期間在完整資料集中產生的值。

  • 輸入:
    • 需要資料欄名稱
    • 需要正整數的 k
    • 決定目前資料列往後及往前範圍的兩個選用整數參數。預設整數參數值是 -10,用以計算目前列到資料集第一列的滾動函式。
  • 此函式可與下列轉換一起使用:

若要進一步瞭解此函式的非滾動版本,請參閱 KTHLARGEST 函式

基本用法

資料欄範例:

derive type:single value:ROLLINGKTHLARGEST(myCol, 2)

輸出:產生新的資料欄,其中包含 myCol 資料欄中從資料集的第一個資料列到目前資料列其中所有值的累計第二大值。

計算前幾列範例:

window value:ROLLINGKTHLARGEST(myNumber, 2, 3)

輸出:產生新資料欄,其中包含 myNumber 資料欄中目前資料列和前兩個資料列值的滾動第二大值。

計算前後幾列範例:

window value:value:ROLLINGKTHLARGEST(myNumber, 4, 3, 2)

輸出:產生新資料欄,其中包含 myNumber 資料欄中目前資料列、前兩個資料列,以及後兩個資料列值的滾動第四大值。

語法

window value:value:ROLLINGKTHLARGEST(col_ref, rowsBefore_integer, rowsAfter_integer) order: order_col [group: group_col]

引數是否必要?資料類型說明
col_ref字串資料欄名稱,其值會套用於函式
k_integer整數 (正數)要從來源資料欄中擷取出來的值排名
rowsBefore_integer整數待併入計算的現行資料列之前的列數
rowsAfter_integer整數待併入計算的現行資料列之後的列數

若要進一步瞭解 ordergroup 參數,請參閱 Window 轉換

若要進一步瞭解語法標準,請參閱語言文件語法附註

col_ref

資料欄名稱,其值會用於計算函式。

  • 不支援多個資料欄和萬用字元。

使用須知:

是否必要?資料類型範例值
字串 (整數或小數值的資料欄參照)myColumn

k_integer

為整數,表示從來源資料欄中擷取出來的不重複值排名。為進行這個函式的計算,系統會將重複值視為不同值。

附註:k 的值必須是介於 1 到 1,000 (含首尾) 之間的整數。

  • k=1 代表資料欄的最大值。
  • 如果 k 大於或等於資料欄中的值數目,則會傳回最小值。
  • 遺漏值或空值不會列入 k 排名的計算。

使用須知:

是否必要? 資料類型範例值
正整數4

rowsBefore_integer、rowsAfter_integer

整數代表現行列前後的列數,系統會從現行列開始計算之前或之後指定列數 (包括現行列在內) 的滾動函式。例如,如果第一個值是 5,則計算範圍為現行列和現行列之後的四列。負值的 k 代表計算現行列之前指定列數的滾動平均值。

  • rowBefore=1 只會產生現行列值。
  • rowBefore=-1 使用現行列之前的所有列。
  • 如果沒有指定 rowsAfter,則會套用 0 值。
  • 如果套用 group 參數,則這些參數值不應超過群組中的最大列數。

使用須知:

是否必要?資料類型範例值
整數4

範例

範例:ROLLINGKTHLARGEST 函式

這個範例說明如何使用下列滾動計算函式:

  • ROLLINGKTHLARGEST - 計算目前資料列之前和之後資料列的滾動窗口中的「第 k 個」最大值。系統會將重複值視為有相同的 k 值。請參閱 ROLLINGKTHLARGEST 函式
  • ROLLINGKTHLARGESTUNIQUE - 從目前資料列之前和之後資料列的滾動窗口計算唯一的「第 k 個」最大值。系統會將重複值視為有不同的「k」值。請參閱 ROLLINGKTHLARGESTUNIQUE 函式

以下資料集包含三個伺服器在前一週內每天重新啟動的次數。如果伺服器重新啟動的次數偏高,可能表示伺服器的健康狀態不佳。在這個範例中,您想瞭解各個伺服器在前一週的滾動最多和第二多的重新啟動次數。

來源:

DateServerRestarts
2/21/18s014
2/21/18s020
2/21/18s030
2/22/18s014
2/22/18s021
2/22/18s032
2/23/18s012
2/23/18s023
2/23/18s034
2/24/18s011
2/24/18s020
2/24/18s032
2/25/18s015
2/25/18s020
2/25/18s034
2/26/18s011
2/26/18s022
2/26/18s031
2/27/18s011
2/27/18s022
2/27/18s032


轉換:

首先,您要以個別的資料欄保存資料列資訊。由於資料已經依 Date 資料欄排序,因此您可以使用以下指令:

derive type:single value:ROWNUMBER() as:'entryId'

使用以下函式計算各個伺服器在前一週內重新啟動次數的滾動第 k 大值。在這個範例中,您可以使用 ROLLINGKTHLARGEST 函式,並設定 k=1。計算最大值時,重複與否沒有影響:

derive type: multiple value: rollingkthlargest(Restarts, 1, 6, 0) group: Server order: Server as: 'rollingkthlargest_1'

使用以下函式計算滾動的第二大值。在這個範例中,您可以使用 ROLLINGKTHLARGESTUNIQUE

derive type: multiple value: rollingkthlargestunique(Restarts, 2, 6, 0) group: Server order: Server as: 'rollingKthLargestUnique_2'


結果:

entryIdDateServerRestartsrollingKthLargestUnique_2rollingkthlargest_Restarts
32/21/18s02000
62/22/18s02101
92/23/18s02313
122/24/18s02013
152/25/18s02013
182/26/18s02223
212/27/18s02223
42/21/18s03000
72/22/18s03202
102/23/18s03424
132/24/18s03224
162/25/18s03424
192/26/18s03124
222/27/18s03224
22/21/18s01444
52/22/18s01444
82/23/18s01224
112/24/18s01124
142/25/18s01545
172/26/18s01145
202/27/18s01145


本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Google Cloud Dataprep 說明文件
需要協助嗎?請前往我們的支援網頁