Extractlist 轉換

注意:轉換屬於基礎程式語言的一部分,使用者無法直接存取。本篇文章的內容僅供參考。

根據任何資料類型的來源資料欄指定模式擷取一組值。產生的資料欄會包含指定模式發生情況的陣列。

雖然新資料欄包含陣列資料,但系統有時會將新資料欄的資料類型推測為字串。

基本用法

來源資料欄 (myWidgetInventory) 的格式如下:

{ "red":"100","white":"1300","blue":"315","purple":"55"}

下列轉換指令會擷取各個顏色的原始庫存清單內容:

extractlist col: myWidgetInventory on:`{digit}+`

輸出:產生的資料欄包含類似以下陣列的資料:

["100","1300","315","55"]

參數

extractlist: col:column_ref on:string_literal_pattern delimiter:string_literal_pattern [quote:'quoted_string'] [as:'new_column_name']

符記是否必要?資料類型說明
extractlist轉換轉換名稱
col字串來源資料欄名稱
on字串字串常值或模式,用來識別要從來源資料欄中擷取出來的值
delimiter字串字串常值或模式,用來識別待擷取值之間的分隔符
quote字串指定加上引號的物件,系統會在比對分隔符號時忽略該物件
as字串新產生的資料欄名稱

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

col

找出要套用轉換指令的資料欄 (只能指定一個資料欄)。

使用須知:

是否必要?資料類型
字串 (資料欄名稱)

on

識別待比對的模式。模式可以是字串常值、Cloud Dataprep 模式或規則運算式模式。

提示:您可以使用 /\uHHHH/ 格式的規則運算式,插入這項參數值的 Unicode 對應字元。舉例來說,/\u0013/ 代表 Unicode 字元 0013 (回車字元)。詳情請參閱系統支援的特殊規則運算式字元一文。

如果是 extractlist 轉換,則針對來源資料欄中符合這個模式的項目,系統會將所有這類項目擷取至新資料欄中的陣列清單。產生的陣列中,每個發生情況都會對應到來源中的個別例項;新資料欄可能會包含重複值。

如要只根據 delimiter 參數建立陣列元素,請設定下列規則運算式:

on:`/+/`

使用須知:

是否必要?資料類型

字串 (常值、規則運算式或 Cloud Dataprep 模式)

delimiter

指定用來定義鍵/值組合結尾的字元或模式。您可以使用字串常值、規則運算式或 Cloud Dataprep 模式來指定這個值。

在下列指令中:

{ key1=value1,key2=value2 }

分隔符號是逗號 (',')。最終的鍵/值組合不需要分隔符號。

針對這項轉換,此參數所定義的模式是用來分隔要擷取至陣列的值。

提示:您可以使用 /\uHHHH/ 格式的規則運算式,插入這項參數值的 Unicode 對應字元。舉例來說,/\u0013/ 代表 Unicode 字元 0013 (回車字元)。詳情請參閱系統支援的特殊規則運算式字元

使用須知:

是否必要?資料類型

字串 (常值、規則運算式或 Cloud Dataprep 模式)

quote

extractlist col: MySourceValues on:`{alpha}+` delimiter:';' quote:'\"'

輸出:MySourceValues 資料欄中擷取在分隔符號前出現的各個字串值例項。系統會將雙引號之間的值視為字串常值,而不會根據這項轉換中定義的分隔符號進行處理。

可用來將字串指定為加上引號的單一物件。這個參數值可以是一或多個字元。

使用須知:

是否必要?資料類型
字串
  • quote 值可以出現在資料欄值中的任何位置,並且不受其他參數規定的限制。

as

系統即將產生的新資料欄名稱。如果未指定 as 參數,系統會使用預設名稱。

使用須知:

是否必要?資料類型
字串 (資料欄名稱)

範例

範例 - 從網址擷取查詢參數

來源:

這個範例中有一個網址清單,用來識別您網站造訪者在購物車中放入的項目。假設您想擷取內嵌在網址查詢參數中的購物車資訊。

UsernamecartURL
joe.robinsonhttp://example123.com/cart.asp?prodid=1001&qty=2
steph.schmidthttp://example123.com/cart.asp?prodid=1005&qty=4
jack.holmeshttp://example123.com/cart.asp?prodid=2102&qty=1
tina.joneshttp://example123.com/cart.asp?prodid=10412&qty=2

下列轉換指令會從網址擷取查詢值清單。請注意,比對模式包含等號,以防您不小心從網址的非參數部分擷取數字值:

extractlist col:cartURL on:`={digit}+`

這兩個查詢參數值已擷取至值陣列,其中包含必須移除的等號:

replace col:cartURL with: '' on: `=` global: true

您現在可以將這些值拆分至不同的資料欄:

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

將這兩個資料欄的名稱變更為 prodIdQty 後,您就可以刪除 extractlist 轉換產生的資料欄。

結果:

UsernamecartURLprodIdQty
joe.robinson http://example123.com/cart.asp?prodid=1001&qty=2 10012
steph.schmidt http://example123.com/cart.asp?prodid=1005&qty=4 10054
jack.holmes http://example123.com/cart.asp?prodid=2102&qty=1 21021
tina.jones http://example123.com/cart.asp?prodid=10412&qty=2 104122

範例 - 使用 extractlist 從參差陣列擷取計數

來源:

下列資料集包含支援小組的各個成員在六個月內為個別客戶處理的支援電子郵件數量。在此範例中,假設您想瞭解為每位客戶處理的電子郵件總數。

由於沒有任何項目可表示支援小組成員是否未回覆客戶的電子郵件,因此資料並不完整,導致您無法使用 unnest 轉換。

custIdstartDateendDatesupportEmailCount
C0017/15/201512/31/2015["Max":"2","Ted":"0","Sally":"12","Jack":"6","Sue":"4"]
C0027/15/201512/31/2015["Sally":"4","Sue":"3"]
C0037/15/201512/31/2015["Ted":"12","Sally":"2"]
C0047/15/201512/31/2015["Jack":"7","Sue":"4","Ted":"5"]

如果資料是從 CSV 檔案匯入,您可能需要進行簡單的 replace 轉換作業來清理資料,這樣資料才會如上述範例所示。

轉換:

請使用下列轉換,只從 supportEmailCount 陣列擷取數字值:

extractlist col:supportEmailCount on:`{digit}+`

您現在應有一個包含參差陣列的 extractlist_supportEmailCount 資料欄。您可以使用下列轉換指令,將這些資料轉換成以逗號分隔的值清單:

replace col: extractlist_supportEmailCount on: `[` with: '' global: true

replace col: extractlist_supportEmailCount on: `]` with: '' global: true

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

將資料欄轉換成字串資料類型。

您現在可以將資料欄分成不同的資料欄,分別包含經修改來源中的個別值。limit 參數指定的是要建立的分割次數,因此會產生 5 個新資料欄 (此為來源陣列的項目數量上限)。

split col:extractlist_supportEmailCount on:',' limit:4

您可能需要將各個產生的資料欄類型設為「整數」。如果您嘗試使用 derive 轉換計算所有產生的資料欄總和,系統只會傳回第一列的值,因為缺少的資料列包含空值。

在包含空值的資料欄中,選取資料直方圖中缺少的值長條。接著選取「Replace」(取代) 建議資訊卡,然後修改轉換指令,以 0 取代空值,如下所示:

set col: extractlist_supportEmailCount3 value: '0' row: ISMISSING([extractlist_supportEmailCount3])

針對任何其他包含空值的資料欄重複執行這個步驟。

您現在可以使用下列指令,針對產生的資料欄計算當中值的總和:

derive type:single value:(extractlist_supportEmailCount1 + extractlist_supportEmailCount2 + extractlist_supportEmailCount3 + extractlist_supportEmailCount4 + extractlist_supportEmailCount5)

結果:

將產生的資料欄重新命名為 totalSupportEmails,並將用來建立此資料欄的資料欄捨棄後,您的資料集應如下所示:

custIdstartDateendDatesupportEmailCounttotalSupportEmails
C0017/15/201512/31/2015["Max":"2","Ted":"0","Sally":"12","Jack":"6","Sue":"4"]24
C0027/15/201512/31/2015["Sally":"4","Sue":"3"]7
C0037/15/201512/31/2015["Ted":"12","Sally":"2"]14
C0047/15/201512/31/2015["Jack":"7","Sue":"4","Ted":"5"]16

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

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

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