Replace 轉換

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

依照轉換中的指定內容,根據儲存格資料值中的字串常值、模式或是位置替換一或多個指定資料欄中的值。

replace 轉換指令主要用來比對字串中的模式。如要跨資料欄中所有資料列來替代整個儲存格,請使用 set 轉換指令。請參閱 Set 轉換

基本用法

on 參數範例:

指定要比對的字串常值或模式。

replace col: text on: 'honda' with:'toyota' global: true

輸出:text 資料欄中所有的 honda 取代為 toyota。假如 honda 在儲存格中出現兩次,則兩者都會遭到 toyota 取代。

at 參數範例:

指定開始字元和結束字元做為比對的索引值。

replace col: text at: 2,6 with:'replacement text'

輸出:對於 text 資料欄中所有的值,以 replacement text 這個值取代第 2 至第 6 個字元之間的子字串。假如原本儲存格值的長度小於 6,則會插入替代值。

參數

replace col:column_ref with:'literal_replacement' [at:(start_index,end_index)] [on:string_literal_pattern] [global:true|false]

符記是否必要?資料類型說明
replace轉換轉換名稱
col字串要進行替代的資料欄名稱
with請見以下說明用來取代比對值的常值
after字串待比對模式前的字串常值或模式
at陣列兩個整數陣列,可識別待比對開始和結束字元的字元索引
before字串待比對模式後的字串常值或模式
from字串識別待比對模式開頭的字串常值或模式
to字串識別待比對模式結尾的字串常值或模式
on字串識別待取代儲存格字元的字串常值或模式
global布林值如果為 true,所有的指定比對都會遭到取代。預設值是 false

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

col

識別要套用轉換的一個或多個資料欄。您可以指定一或多個資料欄。

如何指定多個資料欄:

  • 以逗號分隔多個不同的資料欄名稱。資料欄名稱值要區分大小寫。
  • 在適用情況下,可使用波浪號 (~) 指定某一範圍的值。

replace col: MyCol on: 'MyString' with: 'myNewString'

輸出:myNewString 取代 MyCol 資料欄中的 MyString

使用須知:

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

with

Merge 轉換:指定合併的資料欄之間的分隔符號。如果不指定這個參數就不會套用分隔符號。

Replace 轉換:指定替換值。

對於 replace 轉換指令,這個值必須為常值。您可以套用字串值或是其他資料類型。在替代後,系統會重新推測資料欄的資料類型。

附註:所有執行環境皆支援會使用參照內容 (例如 $2) 擷取群組的規則運算式。請參閱擷取群組參考資料

使用須知:

是否必要?資料類型
任何資料類型的常值

after

replace col:Primary_URL with:'' after:`http({any}|):`

輸出:捨棄通訊協定 ID (http:https:) 之後所有的內容。

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

使用須知:

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

at

replace col: MyCol at: 2,6 with:'MyNewString'

輸出:MyNewString 這個值取代 MyCol 中從資料欄的第二個字元開始,並延伸到第六個字元的內容。

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

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

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

使用須知:

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

before

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

replace col:credit_card with:'****-***-***-' after:`{start}` before:`({digit}{4}){end}`

輸出:

  • 以星號替代 credit_card 資料欄中的前三個數字群組,可有效地遮蔽數字。

使用須知:

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

from

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

replace col: MyCol from: '<END>' with: ''

輸出:

  • 移除 MyCol 中從字串 <END> 至字串值結尾的所有內容。

使用須知:

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

to

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

replace col:ssn with:'***-**-' to:`{digit}{3}-{digit}{2}-`

輸出:

  • 使用星號替代 ssn 資料欄中的前兩組數字,以遮蔽資料內容。

使用須知:

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

on

replace col: MyCol on: `###ERROR` with:'No error here'

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

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

使用須知:

是否必要?資料類型
必須使用 onat 參數字串或模式

global

指出應將任何比對內容套用至單一例項或所有相符項目。

  • (預設) 如為 false,則只將轉換套用至第一個例項。
  • 如為 true,套用至所有找到的符合項目。

附註:如果您已指定符合 at 參數的模式,可能的替代例項數僅為 1,因此不會用到 global 參數。

使用須知:

是否必要?資料類型
否。預設值為 false布林值

範例

示例:使用 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-4567Free Trial

範例 - 使用擷取群組參照替代內容

replace 轉換可利用 Cloud Dataprep 模式中定義的擷取群組,以及在資料欄中搜尋資料的規則運算式。擷取群組是模式中的子模式,用於定義可在替代內容中參照的值。

附註:針對此轉換,只能在 on 參數中指定擷取群組。

在以下範例中,on 參數定義了兩個擷取群組,而 with 參數在替代內容中參照了這些擷取群組。在這個範例中,任何在 camel_case 資料列中包含小寫字母且隨後緊接著大寫字母的項目,都將替代為相同的值,但在中間插入空格。$1 值參照在對應的 Cloud Dataprep 模式中的第一個擷取群組:

replace col:camel_case with:'$1 $2' on:`({lower})({upper})` global:true

擷取群組說明替代參照
({lower})單一小寫字母$1
({upper})單一大寫字母$2

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

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

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