Extract 轉換

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

依據指定的字串或模式,從資料欄中擷取資料子集,然後插入新資料欄。來源資料欄維持未修改狀態。

提示:如果您需要保留來源資料欄,請使用 extract 轉換。否則,您可以使用 split 轉換。請參閱 Split 轉換

基本用法

extract col: text on: 'honda' limit: 10

輸出:從來源資料欄 honda 中擷取 text 值,最多 10 次,然後插入新資料欄。來源資料欄 text 保持未修改狀態。

參數

extract col:column_ref [quote:'quoted_string'] [ignoreCase:true|false] [limit:max_count] [after:start_point | from: start_point] [before:end_point | to:end_point] [on:'exact_match'] [at:(start_index,end_index)]

注意:至少必須加入下列其中一個參數,才能指定要擷取的模式:afteratbeforefromonto

符記是否必要?資料類型說明
extract轉換轉換名稱
col字串來源資料欄名稱
quote字串指定加引號的特定物件,系統會在模式比對作業中忽略該物件
ignoreCase布林值如為 true,則比對時不區分大小寫
limit整數 (正數)識別可以從單一值中擷取的相符項數目。預設值為 1。

比對參數:

參數是否必要?資料類型說明
after字串待比對模式前的字串常值或模式
at陣列兩個整數陣列,可識別待比對開始和結束字元的字元索引
before字串待比對模式後的字串常值或模式
from字串識別待比對模式開頭的字串常值或模式
on字串識別待比對模式的字串常值或模式
to字串識別待比對模式結尾的字串常值或模式

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

col

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

extract col: MyCol on: 'MyString'

輸出:如果 My String 資料欄中有 MyCol 值,則將該值擷取到新資料欄,否則,新資料欄值為空白。

使用須知:

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

after

extract col: MyCol after: 'Important:'

輸出:MyCol 中擷取位於 Important: 字串之後的值。如果資料欄不含 after 值,則輸出值為空白。

待比對值或模式之前的模式 ID。您可以使用字串常值、規則運算式或 Cloud Dataprep 模式來定義 after 參數值。

使用須知:

是否必要?資料類型
字串或模式
  • afterfrom 參數非常類似,不過 from 會包含可作為部分擷取字串的比對值。
  • after 可以與 toonbefore 搭配使用。請參閱模式 Clause Position 比對

at

extract col: MyCol at: 2,6

輸出:MyCol 資料欄中,擷取從資料欄第二個字元開始到資料欄第六個字元為止的內容。

識別所需模式的起始位置與結束位置。

您輸入的參數會以 x,y 的格式呈現,其中 xy 均為正整數,分別代表您所需模式的開始字元和結束字元。

  • x 必須小於 y
  • 如果 y 超過資料值的長度,系統會將模式定義為資料值的最末端並進行比對。

使用須知:

是否必要?資料類型
包含兩個整數的陣列 (X,Y)

at 參數不得與下列任一參數合併使用:onafterbeforefromtoquote。請參閱模式 Clause Position 比對

before

extract col: MyCol before: '|'

輸出:擷取 MyCol 資料欄中直立線字元 (|) 之前的內容。如果資料欄不含 before 值,則輸出值為空白。

待比對值或模式後的模式 ID。您可以使用字串常值、規則運算式或 Cloud Dataprep 模式來定義模式。

使用須知:

是否必要?資料類型
字串或模式
  • beforeto 參數非常類似,不過 to 會包含可作為部分擷取字串的比對值。
  • before 可以與 fromonafter 搭配使用。請參閱模式 Clause Position 比對

from

extract col: MyCol from: 'go:'

輸出:MyCol 中擷取 go: 之後的內容,包括 go: 在內。如果資料欄不含 from 值,則輸出值為空白。

識別標示待比對值開頭的模式。模式可以是字串常值、Cloud Dataprep 模式或規則運算式。from 值包含在比對項目中。

使用須知:

是否必要?資料類型
字串或模式
  • afterfrom 參數非常類似,不過 from 會包含可作為部分擷取字串的比對值。
  • from 可以與 tobefore 搭配使用。請參閱模式 Clause Position 比對

on

extract col: MyCol on: `###ERROR`

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

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

使用須知:

是否必要?資料類型

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

to

extract col:MyCol from:'note:' to: `{end}`

輸出:MyCol 資料欄中擷取從 note: 開始一直到值結尾的所有值。

識別標示待比對值結尾的模式。模式可以是字串常值、Cloud Dataprep 模式或規則運算式。to 值包含在比對項目中。

使用須知:

是否必要?資料類型
字串或模式
  • beforeto 參數非常類似,不過 to 會包含可作為部分擷取字串的比對值。
  • to 可以與 fromafter 搭配使用。請參閱模式 Clause Position 比對

quote

extract col: MyCol quote: 'First' after: `{start}%?`

輸出:MyCol 資料欄擷取每一個儲存格值,只要 First 字串不在儲存格中,則擷取內容從儲存格的第二個字元開始。

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

使用須知:

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

ignoreCase

extract col: MyCol on: 'My String' ignoreCase: true

輸出:如果 MyCol 資料欄含有下列值,則擷取該值:My Stringmy stringMy string 等。

指出比對項目是否應忽略大小寫。

  • 設為 true 表示不區分大小寫。
  • (預設) 設為 false 表示必須區分大小寫。

使用須知:

是否必要?資料類型
布林值

limit

extract col: MyCol on: 'z' limit: 3

輸出:MyCol 資料欄中 z 字母的每一個例項擷取到個別的資料欄,最多可以產生 3 個新資料欄。

limit 參數定義可在資料欄中比對特定模式的次數上限。

附註:limit 參數不能與下列參數搭配使用:atpositionsdelimiters

系統會依據 limit 參數的定義,產生一組新資料欄。系統會將每個相符的例項填入不同的資料欄,直到不再有任何相符項或所有 limit 產生的新資料欄均已填滿。

使用須知:

是否必要?資料類型
整數 (正數)
  • 定義 extract 轉換可以建立的資料欄數目上限。
  • 如果沒有指定,則只會建立一個資料欄。

範例

範例 - 擷取名字

來源:

Name
Mr. Mike Smith
Dr Jane Jones
Miss Meg Moon

轉換:

下列轉換指令會擷取上述資料集中的第二個字。系統會擷取第一個空格之後到下一個空格之前的內容。

提示:如果您想要同時區分稱呼、名字和姓氏,則應改用 split 轉換。請參閱 Split 轉換

extract col:Name after: ' ' before: ' '

結果:

NameName2
Mr. Mike SmithMike
Dr Jane JonesJane
Miss Meg MoonMeg

範例 - 擷取記錄層級

來源:

下列範例代表從應用程式擷取的原始記錄訊息。您想要擷取每一則訊息的錯誤層級:INFOWARNINGERROR

app_log
20115-10-30T15:43:37:874Z INFO Client env:started
20115-10-30T15:43:38:009Z INFO Client env:launched Chromium component
20115-10-30T15:43:38:512Z ERROR Client env:failed to connect to local DB
20115-10-30T15:43:38:515Z INFO Client env:launched application

轉換:

在上述轉換中,您想要的文字出現在時間戳記之後和訊息之前。

  • after 子句中,必須提供模式。在此案例中,選擇規則可識別時間戳記的最後一個區段,而三個井字號 (#) 則識別三位數的不明值。「Z」值讓選擇規則多一些額外的明確性。請注意,倒引號是用來表示選擇規則。
  • before 子句中,您可以使用簡易的空格字元字串,因為此字元在所有資料中均為一致。

extract col:app_log after: `###Z ` before: ' '

結果:

app_logapp_log_2
20115-10-30T15:43:37:874Z INFO Client env:startedINFO
20115-10-30T15:43:38:009Z INFO Client env:launched Chromium componentINFO
20115-10-30T15:43:38:512Z ERROR Client env:failed to connect to local DBERROR
20115-10-30T15:43:38:515Z INFO Client env:launched applicationINFO

範例 - 使用 replace、set 及 extract 清理行銷聯絡人資料

此示例說明下列轉換指令取代或擷取儲存格資料的不同用法:

  • set - 定義預先定義的資料欄所使用的值。請參閱 Set 轉換

    提示:使用 derive 轉換產生含有一組定義值的新資料欄。請參閱 Derive 轉換

  • replace - 將出現在資料欄值中的字串常值或模式取代為特定字串。請參閱 Replace 轉換
  • extract - 從資料欄擷取以模式為基礎的值,然後儲存在新的資料欄。請參閱 Extract 轉換

來源:

下列資料集含有行銷平台透過網站訪客所採取的動作而收集到的聯絡人資訊。您必須清理此資料,然後準備數據分析平台使用的資料。

LeadIdLastNameFirstNameTitlePhoneRequest
LE160301001JonesCharlesChief Technical Officer415-555-1212reg
LE160301002LyonsEdward 415-012-3456download whitepaper
LE160301003MartinMaryCEO510-555-5555delete account
LE160301004SmithTaliaEngineer510-123-4567free trial

轉換:

Title 資料欄:例如,您會先注意到缺少了部分資料。數據分析平台會將「#MISSING#」字串值辨識為遺漏值的指標。因此,您可以在 Title 資料欄中按一下該遺漏值的長條。然後,選取「取代」建議資訊卡。請注意,預設取代項目是空值,您可以按一下 [修改] 以更新此取代項目值:

set col: Title value: IF(ISMISSING([Title]),'#MISSING#',Title)

Request 資料欄:您在 Request 資料欄中發現應該清除 reg 項目。請新增下列轉換指令,以取代該值:

replace col:Request with:'Registration' on:`{start}reg{end}`

上述轉換指令使用 Cloud Dataprep 模式做為 on: 參數的運算式。這個運算式指出從儲存格值開頭開始比對 reg 字串常值,一直到儲存格值結尾,只比對完整的 reg 儲存格值。

在此示例中,這個轉換指令可以良好運作,但如果值是大寫字體 Reg 開頭的 R,會發生什麼事?指令可能會無法取代該值。為了改善這個轉換指令,您可以在 on 參數中使用下列 Cloud Dataprep 模式來修改轉換指令,以便擷取大小寫差異:

replace col:Request with:'Registration' on:`{start}{[R|r]}eg{end}`

將上述轉換指令新增至您的方案後,您會發現 Request 資料欄中的所有值均轉換為大寫字體標題或適當的大小寫:

set col:Request value:PROPER(Request)

現在,所有值均已轉換為大寫字體標題。

Phone 資料欄:您可能已經注意到 Phone 資料欄中的值有些問題。在美國,前置號碼 555 僅用於收集資訊,所以這些是無效的電話號碼。

在資料格線中,選取此資料欄的第一個 555 例項。但此動作卻會選取該模式的所有例項,包括您不想修改的例項。在此情況下,請繼續選取其他資料列中類似的 555 例項。在建議資訊卡中,按一下 Replace 轉換。

但請注意,預設的 Replace 轉換同時醒目顯示了某一例項中的第二個 555 模式,這對於未顯示在樣本中的其他電話號碼而言,可能會是個問題。您必須修改此轉換指令的選擇模式。在下面的 on: 參數中,Cloud Dataprep 模式已修改為只比對電話號碼格式中第二個區段所出現的 555 例項。

replace col: Phone on: `{start}%{3}-555-%*{end}` with: '#INVALID#' global: true

請注意,指令中新增了萬用字元架構 (%*)。您或許可以新增只精確比對最後四個字元的模式 (%{4}),但此比對模式無法擷取尾端可能附有分機號碼的電話號碼。上述的運算式則是可以辦到。

附註:上述轉換指令建立的值與電話號碼資料類型不符。但在本例中,這些不相符卻可以想成是使用 Cloud Dataprep 輸出的系統優點。

LeadId 資料欄:您可能已注意到待開發客戶 ID 資料欄 (LeadId) 含有一些嵌入資訊:日期值及該日期中的例項 ID。您可以使用下列步驟來拆分此資訊。第一個步驟會建立另一個含有此資訊的工作資料欄,以便保留原始的未修改資料欄:

derive type:single value:LeadId as:'LeadIdworking'

您現在可以去除這個資料欄,建立新的資料欄。首先,使用下列 replace 轉換指令移除前置的兩個字元,因為新資料欄不需要該資料:

replace col:LeadIdworking with:'' on:'LE'

請注意,日期資訊現在已整齊地嵌入工作資料欄的第一個字元。請使用下列指令,將這些值擷取到新資料欄:

extract col: LeadIdworking on: `{start}%{6}`

新的 LeadIdworking2 資料欄現在只包含日期資訊。清理這個資料欄需要重新格式化資料,將資料類型重設為日期時間類型,然後套用 dateformat 函式以按照您的需求格式化。這些步驟可以個別練習。

現在,我們只要重新命名資料欄就好:

rename col:LeadIdworking1 to:'LeadIdDate'

在第一個工作資料欄中,您現在可以使用下列指令移除日期資訊:

replace col: LeadIdworking on: `{start}%{6}` with: ''

您可以重新命名此資料欄,指出資料欄是每日 ID:

rename col:LeadIdworking to:'LeadIdDaily'

結果:

LeadIdLeadIdDailyLeadIdDateLastNameFirstNameTitlePhoneRequest
LE160301001001160301JonesCharlesChief Technical Officer#INVALID#Registration
LE160301002002160301LyonsEdward#MISSING#415-012-3456Download Whitepaper
LE160301003003160301MartinMaryCEO#INVALID#Delete Account
LE160301004004160301SmithTaliaEngineer510-123-4567免費試用

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

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

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