SOURCEROWNUMBER 函式

附註:此函式已由 $sourcerownumber 參照取代。此函式雖仍可在產品中使用,但在未來的版本中可能會遭到淘汰。請改為使用 $sourcerownumber。詳情請參閱來源中繼資料參照

在套用任何步驟之前,傳回原始來源資料集中出現的現有資料列編號。

下列轉換可能會造成原始的資料列資訊無效或無法使用,在這類情況下,函式會傳回空值:

  • pivot
  • flatten
  • join
  • lookup
  • union
  • unnest
  • unpivot

注意:如果資料集的來源為多個檔案,將無法保證原始來源資料列編號能符合預期,系統會傳回空值。

提示:如果來源資料列資訊仍可供使用,將滑鼠懸停在資料網格中任一資料列的左側,即可查看原始來源資料中的來源資料列編號。

注意事項:使用來源為 Avro 檔案的資料集時,系統不支援歷程資訊與 SOURCEROWNUMBER 函式。

基本用法

Derive 範例:

derive type:single value:SOURCEROWNUMBER() as:'OriginalRowNums'

輸出:產生新的 OriginalRowNums 資料欄,其中包含每個資料列的資料列編號,與在原始資料中出現的編號一致。

Delete 範例:

delete row:SOURCEROWNUMBER() > 101

輸出:刪除資料集中原始來源資料的編號為 101 列之後的資料列。

語法

此函式沒有任何引數。

範例

範例 - 從第一列以外的資料列取得標題

來源:

您已從 CSV 檔案匯入各賽次時間的選手資料。在轉換頁面中載入時,資料如下所示:

(rowId)column2column3column4column5
1RacerHeat 1Heat 2Heat 3
2Racer X37.2238.2237.61
3Racer Y41.33DQ38.04
4Racer Z39.2739.0438.85

在上述資料中,(rowId) 資料欄參照的是資料格線內顯示的資料列編號,但並不屬於資料集的內容。當您將滑鼠移至畫面左側的黑點上方時,就可取得此資訊。

轉換:

根據樣本檢查範例中各賽次的最佳成績後,您發現資料含有標頭,但您不記得原本的排序方式。資料現在應如下所示:

(rowId)column2column3column4column5
1Racer Y41.33DQ38.04
2RacerHeat 1Heat 2Heat 3
3Racer X37.2238.2237.61
4Racer Z39.2739.0438.85

雖然您可以復原排序步驟以回到原始的排序順序,但只有在您並未於按序排列的步驟間加入其他步驟時,這個方法才能順利發揮效果。

結果:

套用最後一個 header 轉換指令後,資料應如下所示:

(rowId)RacerHeat_1Heat_2Heat_3
3Racer Y41.33DQ38.04
2Racer X37.2238.2237.61
4Racer Z39.2739.0438.85

範例 - 使用 sourcerownumber 建立不重複的資料列 ID

下列範例示範如何拆分巢狀資料。在本範例的方法中,會使用 SOURCEROWNUMBER 函式來建立不重複的資料列 ID。

來源:

假設您有下列的學生測驗成績資料,每位學生的分數都儲存在 Scores 陣列中。每個資料列皆具不重複 ID,您必須能於每列上追蹤每回測驗。這個範例有兩個目標:

  1. 每個學生測驗成績皆以單個資料列顯示
  2. 為每個學生成績組合建立不重複的 ID
LastNameFirstNameScores
AdamsAllen[81,87,83,79]
BurnsBonnie[98,94,92,85]
CannonCharles[88,81,85,78]

轉換:

匯入 CSV 格式的資料時,您必須新增 header 轉換指令並將 Scores 資料欄中的引號移除:

header

replace col:Scores with:'' on:`"` global:true

驗證測驗日期:在開始作業前,建議您先檢查每位學生的測驗成績筆數是否正確。接著,您可以使用下列轉換指令來計算 Scores 陣列中的應有元素數 (4 個) 與實際筆數之間的差異:

derive type:single value: (4 - ARRAYLEN(Scores)) as: 'numMissingTests'

預覽轉換結果時,您應該會發現範例資料集中包含所有測驗成績。不過,您不一定會希望最終資料集包含這個資料欄,因為如果這個方案的執行規模比較大,您可能會發現自己遺漏了部分測驗成績。

不重複的資料列 ID:Scores 陣列必須拆分為不同的資料列,以便呈現每一次的測驗成績。不過,系統不會為資料列建立不重複的 ID,因此您無法追蹤個別測驗的成績資料。理論上,您可以使用 LastName-FirstName-Scores 的資料值組合來追蹤測驗成績,不過如果學生有兩次相同的成績記錄,資料集中就會出現重複的資料列。下列轉換指令會建立名為 Tests 的平行陣列,當中包含呈現 Scores 欄資料值數量的索引陣列。索引值會從 0 開始:

derive type:single value:RANGE(0,ARRAYLEN(Scores)) as:'Tests'

此外,您也可以使用 SOURCEROWNUMBER 函式來建立來源資料列 ID:

derive type:single value:SOURCEROWNUMBER() as:'orderIndex'

每個學生測驗成績皆以單個資料列顯示:您的資料應該會如下所示:

LastNameFirstNameScoresTestsorderIndex
AdamsAllen[81,87,83,79][0,1,2,3]2
BurnsBonnie[98,94,92,85][0,1,2,3]3
CannonCharles[88,81,85,78][0,1,2,3]4

接著,請使用 ARRAYZIP 函式將 TestsScores 陣列合併為一個巢狀陣列:

derive type:single value:ARRAYZIP([Tests,Scores])

您的資料集變更如下:

LastNameFirstNameScoresTestsorderIndexcolumn1
AdamsAllen[81,87,83,79][0,1,2,3]2[[0,81],[1,87],[2,83],[3,79]]
AdamsBonnie[98,94,92,85][0,1,2,3]3[[0,98],[1,94],[2,92],[3,85]]
CannonCharles[88,81,85,78][0,1,2,3]4[[0,88],[1,81],[2,85],[3,78]]

只要使用 flatten 轉換指令,您就能將這個巢狀陣列拆分:

flatten col: column1

每個「測驗-成績」組合現已拆分為不同的資料列,您必須使用 unnest 指令將巢狀「測驗-成績」組合拆分為不同的資料欄:

unnest col:column1 keys:'[0]','[1]'

您刪除不再需要的 column1 之後,請為系統產生的這兩個資料欄重新命名:

rename mapping:[column_0,'TestNum']

rename mapping:[column_1,'TestScore']

不重複的資料列 ID:只要再執行一個步驟,您就能建立不重複的測驗 ID,藉此識別每位學生的特定測驗成績。下列指令會使用原始資料列 ID OrderIndex 作為學生 ID,並使用 TestNumber 值來建立 TestId 資料欄的值:

derive type:single value: (orderIndex * 10) + TestNum as: 'TestId'

上述資料值均為整數。如果您想讓 ID 好看一點,可以新增下列指令:

merge col:'TestId00','TestId'


延伸:
您也可以針對這個資料集產生一些摘要統計資訊。舉例來說,您可能會想計算每位學生的測驗平均成績。若要進行這個步驟,您必須瞭解如何將測驗資料值妥善分組。以本範例為例,此方案的執行規模若比較大,學生名字之間可能會產生衝突,使得您無法依據 LastName 資料值進行分組,因此您可能需要使用下列指令來建立主鍵:

merge col:'LastName','FirstName' with:'-' as:'studentId'

您現在可以使用這個結果作為計算成績的分組參數:

derive type:single value:AVERAGE(TestScore) group:studentId as:'avg_TestScore'

結果:

刪除不需要的資料欄並移動資料欄位置後,您應該會看到下面這樣的資料集:

TestIdLastNameFirstNameTestNumTestScorestudentIdavg_TestScore
TestId0021AdamsAllen081Adams-Allen82.5
TestId0022AdamsAllen187Adams-Allen82.5
TestId0023AdamsAllen283Adams-Allen82.5
TestId0024AdamsAllen379Adams-Allen82.5
TestId0031AdamsBonnie098Adams-Bonnie92.25
TestId0032AdamsBonnie194Adams-Bonnie92.25
TestId0033AdamsBonnie292Adams-Bonnie92.25
TestId0034AdamsBonnie385Adams-Bonnie92.25
TestId0041CannonChris088Cannon-Chris83
TestId0042CannonChris181Cannon-Chris83
TestId0043CannonChris285Cannon-Chris83
TestId0044CannonChris378Cannon-Chris83

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

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

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