Split 轉換

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

依據轉換指令中的分隔符號,將指定的資料欄分割為不同的資料欄。您可以透過多種文字或模式方法來指定分隔符號。另外,系統也接受以空格作為分隔符號。

這項轉換可能會自動套用為您方案中的第一步。請參閱初始剖析步驟

系統套用 split 轉換指令時,來源資料欄即會遭到捨棄。

  • 在套用這個轉換指令之前,您可以先使用 derive 轉換指令來建立來源資料欄複本。請參閱 Derive 轉換
  • 如要保留來源資料欄,您可以使用 extract 轉換指令和模式比對功能。請參閱 Extract 轉換

基本用法

split col: MyValues on: ',' limit: 3

輸出:將來源的 MyValues 資料欄分割為四個不同的資料欄。資料欄中的值則依逗號 (,) 分隔符號決定。如果一個資料列中只有兩個逗號,則最後產生的資料欄為空值。

參數

split col:column_ref [quote:'quoted_string'] [ignoreCase:true|false] [limit:int_num] [after:start_point | from: start_point] [before:end_point | to:end_point] [on:'exact_match'] [at:(start_index,end_index)] [delimiters:'string1','string2', 'string3'] [positions: int1,int2,int3] [every:int_num]

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

split 轉換指令支援下列通用方法,可指定分割資料欄時參照的分隔符號。請根據您使用轉換指令的方式套用合適的參數集。

分隔符號方法說明操作參數
單一模式分隔符號

依據下列其中一種方法分割資料欄:

1) 用來說明欄位分隔符號開頭和結尾的模式

2) 單一分隔符號 (可重複)

3) 分隔符號起始位置和結束位置的索引值

quote

至少須指定下列其中一項參數:

afteratfrombeforeonto

多模式分隔符號

依據下列其中一種文字方法分割資料欄:

1) 明確的分隔符號順序

2) 明確的字元索引位置清單

3) 每 N 個字元

至少須指定下列其中一項參數:

delimiterspositionsevery

共用參數:

以下是操作模式共用的參數:

代碼是否必要?資料類型說明
split轉換轉換名稱
col字串來源資料欄名稱
ignoreCase布林值如為 true,則比對時不區分大小寫
limit整數 (正數)指定來源資料欄分割後的資料欄數量上限

單一模式分隔符號參數:

提示:此比對方法至少必須使用下列其中一項參數:atbeforefromonto

代碼是否必要?資料類型說明
after字串待比對模式前的字串常值或模式
at陣列兩個整數陣列,可識別待比對開始和結束字元的字元索引
before字串待比對模式後的字串常值或模式
from字串識別待比對模式開頭的字串常值或模式
on字串識別待比對模式的字串常值或模式
to字串識別待比對模式結尾的字串文字或模式
quote字串指定已加引號的特定物件,系統會在模式比對作業中忽略該物件

多模式分隔符號參數:

提示:在這個比對方法中,您必須使用下列其中一項參數,但請勿合併使用多項參數。

代碼是否必要?資料類型說明
delimiters陣列字串陣列,可依據套用至資料欄的分隔符號順序列出明確的欄位分隔符號
positions陣列整數陣列,可識別從 0 開始的字元索引值 (代表用來分割資料欄的位置)
every整數待比對模式後的字串文字或模式

col

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

split col: MyCol on: 'MyString'

輸出:MyCol 資料欄分割為兩個不同的資料欄,而且資料欄的值會位於每個儲存格中 MyString 值的左側和右側。

  • 如果系統偵測不到分隔符號值,則儲存格的值會出現在第一個新資料欄中。
  • 如果您未指定 limit 參數,則系統會套用預設值 1

使用須知:

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

ignoreCase

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

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

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

輸出:如果 MyCol 參數值出現在 My Stringmy stringMy string 等儲存格值中,則依據該參數值不區分大小寫的版本分割 on 資料欄。

使用須知:

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

limit

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

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

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

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

輸出:依據字母 z 的每個例項分割 MyCol 資料欄,並產生 4 個新的資料欄。如果儲存格中 z 的例項數量少於 3 個,則分割後的對應資料欄會留空。

附註:請勿建立規模超過 2500 個資料欄的資料集。如果資料集的規模太大,系統的效能將會大幅降低。

使用須知:

是否必要?資料類型
正整數
  • 定義 split 轉換作業可以建立的資料欄數量。
  • 如果您並未指定數量上限,則系統僅會建立一個資料欄。請參閱模式 Clause Position 比對

after

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

  • 如果這項參數是唯一的模式描述符:
    • 資料欄會分割為兩個欄位,第一個欄位含有位於 after 比對值前的來源資料欄部分,第二個欄位則會留空。
    • 由於沒有其他模式參數,即便該值出現多次,系統也不會進行額外的分割作業。

      附註:如果參數為 afterbeforefromto,則系統最多只會進行一次比對作業。即便該項參數值在儲存格中出現多次,系統也不會進行額外的資料欄分割作業。如想更精準地掌控結果,建議您指定更多模式參數。

  • 如果資料欄中沒有 after 值,系統會將原始欄位資料值寫入第一個分割資料欄。
  • 這項參數通常會與其他參數搭配使用,藉此指出資料欄分隔模式。請見以下陳述式:

split col: MyCol after: '\' before:'|'

輸出:依據兩個字元之間的值分割 MyCol 中的資料值。第一個資料欄中會包含位於反斜線 (\) 前的 MyCol 部分,第二個資料欄則會包含位於直立線字元 (|) 後的 MyCol 部分。另外,分隔字元之間的內容則會遭到捨棄。

使用須知:

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

at

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

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

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

split col: MyCol at: 2,6

輸出:MyCol 資料欄依據從第二個字元開始,並延伸至第六個字元的值分割該資料欄。位於該資料值前的內容會列於第一個資料欄中,位於該資料值後的內容則會包含在第二個資料欄中。

使用須知:

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

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

before

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

  • 如果這項參數是唯一的模式描述符:
    • 資料欄會分割為兩個欄位,第一個資料欄為空白,第二個資料欄則含有 before 比對值以後的來源資料欄部分。
    • 由於沒有其他模式參數,即便該值出現多次,系統也不會進行額外的分割作業。

      附註:如果參數為 afterbeforefromto,則系統最多只會進行一次比對作業。即便該項參數值在儲存格中出現多次,系統也不會進行額外的資料欄分割作業。如想更精準地掌控結果,建議您指定更多模式參數。

  • 如果資料欄中沒有 before 值,系統會將原始欄位資料值寫入第一個分割資料欄。
  • 這項參數通常會與其他參數搭配使用,藉此指出資料欄分隔模式。請見以下陳述式:

split col: MyCol before: '/' from:'Go:'

輸出:MyCol 的內容分割成兩個資料欄。第一個資料欄中會包含出現在 Go: 字串前的資料值,第二個資料欄則會包含位於反斜線後的資料值。

使用須知:

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

from

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

  • 如果這項參數是唯一的模式描述符:
    • 資料欄會分割為兩個欄位,第一個欄位含有在 from 比對值前的來源資料欄部分,第二個欄位則會留空。
    • 由於沒有其他模式參數,即便該值出現多次,系統也不會進行額外的分割作業。

      附註:如果參數為 afterbeforefromto,則系統最多只會進行一次比對作業。即便該項參數值在儲存格中出現多次,系統也不會進行額外的資料欄分割作業。如想更精準地掌控結果,建議您指定更多模式參數。

  • 如果資料欄中沒有 from 值,輸出值即為原始欄位資料值。
  • 這項參數通常會與其他參數搭配使用,藉此指出資料欄分隔模式。請見以下陳述式:

split col: MyCol from: 'go:' to:'stop:'

輸出:分割 MyColgo: 開始 (包括 go:) 到 stop: (包括 stop:) 的內容。位於該字串前的內容會出現在第一個資料欄中,位於該字串後的內容則會包含在第二個資料欄中。

使用須知:

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

on

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

如果來源資料欄中沒有這個值,系統會將原始值寫入第一個分割資料欄。

split col: MyCol on: `###ERROR`

輸出:將資料欄分割為兩個欄位,第一個資料欄中會包含出現在 ###ERROR 前的值,第二個資料欄則會包含出現在這個字串後的資料值。

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

使用須知:

是否必要?資料類型
字串或模式

to

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

  • 如果這項參數是唯一的模式描述符:
    • 資料欄會分割為兩個欄位,第一個資料欄為空白,第二個資料欄則含有 to 比對值後的來源資料欄部分。
    • 由於沒有其他模式參數,即便該值出現多次,系統也不會進行額外的分割作業。

      附註:如果參數為 afterbeforefromto,則系統最多只會進行一次比對作業。即便該項參數值在儲存格中出現多次,系統也不會進行額外的資料欄分割作業。如想更精準地掌控結果,建議您指定更多模式參數。

  • 如果資料欄中沒有 to 值,系統會將原始欄位資料值寫入第一個分割資料欄。
  • 這項參數通常會與其他參數搭配使用,藉此指出資料欄分隔模式。請見以下陳述式:

split col:MyCol from:'note:' to: ` `

輸出:分割 MyCol 資料欄,將位於 note: 之前的所有內容放在第一個資料欄,並將 note: 後面第一個空格之後的所有內容放在第二個資料欄。

使用須知:

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

quote

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

split col: MyLog on: `|` limit:10 quote: '"'

輸出:依據直立線字元 (|) 分割 MyLog 資料欄,但請忽略資料欄中以雙引號字元括住的所有直立線字元。視 limit 參數中的資料值而定,這個轉換指令最多只能建立 10 次分割作業。

使用須知:

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

delimiters

delimiters 參數會指定以逗號分隔的字串文字或模式清單,藉此識別分割資料時使用的分隔符號。這個值可以是字串文字、規則運算式或 Cloud Dataprep 模式。

  • 資料值的順序會決定系統套用分隔符號的順序。
  • 資料值可以不同。

split col:myCol delimiters:'|',' ','|'

輸出:依據分隔符號的順序將 myCol 資料欄分割為四個不同的資料欄。

使用須知:

附註:使用 limit 參數時,請勿同時使用 quotedelimiters 參數。

是否必要?資料類型

字串陣列 (文字、規則運算式、Cloud Dataprep 模式)

positions

positions 參數會指定以逗號分隔的整數清單,這些整數可識別從 0 開始的字元索引值來決定分割資料欄的位置。提醒您,資料值須為整數。

split col:myCol positions:20,55,80

輸出:myCol 資料欄分割為四個不同的資料欄,其中:

  • column1 = 來源資料欄中第 0 至 20 個字元
  • column2 = 第 21 至 55 個字元
  • column3 = 第 56 至 80 個字元
  • column4 = 第 80 個字元至儲存格資料值結尾

使用須知:

附註:使用 limit 參數時,請勿同時使用 quotepositions 參數。

是否必要?資料類型

整數陣列 (文字、規則運算式、Cloud Dataprep 模式)

every

every 參數可以指定寬度固定的來源資料欄分割作業,這個整數值會定義分割輸出中每個資料欄的字元數。

使用 every 參數時,您可以視情況搭配使用 limit 參數來定義輸出資料欄的數量上限:

split col:myCol every:20 limit:5

輸出:每 20 個字元分割一次 myCol 資料欄,上限為五次分割作業。提醒您,第六個資料欄會包含儲存格資料值中第 100 個字元以後的所有字元。

使用須知:

是否必要?資料類型
整數

模式群組

在轉換指令製作工具中建置或編輯 split 轉換指令時,您可以選用下列其中一個模式群組,將其套用至您的轉換指令。模式群組是定義儲存格資料比對方法的一組相關模式,部分模式群組可以套用至多種轉換指令,某些模式群組則只能套用至 split 轉換指令。如需更多資訊,請參閱轉換指令製作工具

範例

範例:依據單一模式分隔符號進行分割

來源:

ColAColBColC
This my String ThatabXcdXefXgh01AA001
my string This ThatijXklXmnXop02BB002
This That My StringqrXstXuvXwy03CC003

轉換:

ColA:您可以使用下列轉換指令,依據 My String 的變化版本進行分割:在這個範例中,ignoreCase 參數可以確保系統會比對所有大寫字體的變化版本:

split col:ColA on:'My String' ignoreCase:true

ColB:對於這個資料欄,字母 x 是分割標記,資料格式也完全相同 (每個資料列有三個例項):

split col:ColB on:'X' limit:3

ColC:在這個資料欄中,不同資料列的雙字母標記可能不同,不過這類標記在每個資料列中的位置均相同:

split col:ColC at:2,4

結果:

在您新增上述轉換指令時,系統會捨棄來源資料欄並留下以下欄位:

ColA1ColA2ColB1ColB2ColB3ColB4ColC1ColC2
ThisThatabcdefgh01001
This Thatijklmnop02002
This That qrstuvwy03003

範例:根據已加引號的資料值進行分割

這個範例說明了您在 split 轉換指令中可以如何使用 quote 參數,藉此以更精細的方式分割資料欄。

來源:

在這個範例中,系統會將以下含有聯絡資訊的 CSV 資料匯入應用程式:

LastName,FirstName,Role,Company,Address,Status
Wagner,Melody,VP of Engineering,Example.com,"123 Main Street, Oakland, CA 94601",Prospect
Gruber,Hans,"Director, IT",Example.com,"456 Broadway, Burlingame, CA, 94401",Customer
Franks,Mandy,"Sr. Manager, Analytics",Tricorp,"789 Market Street, San Francisco, CA, 94105",Customer

轉換:

將這筆資料擷取至應用程式時,系統會自動執行幾項初始剖析作業:

column2column3column4column5column6column7
LastNameFirstNameRoleCompanyAddressStatus
WagnerMelodyVP of EngineeringExample.com"123 Main Street, Oakland, CA 94601"Prospect
GruberHans"Director, IT"Example.com"456 Broadway, Burlingame, CA, 94401"Customer
FranksMandy"Sr. Manager, Analytics"Tricorp"789 Market Street, San Francisco, CA, 94105"Customer

開啟「方案」面板時,您應該會看見下列轉換指令:

splitrows col: column1 on: '\r' quote: '"'

split col: column1 on: ',' limit: 5 quote: '"'

第一個轉換指令會依據回車字元 (\r) 將原始來源資料分割為不同的資料列,同時忽略雙引號字元之間的所有資料值。請注意必須將這個值逸出。但雙引號字元不需要逸出。雖然實際資料中沒有任何回車字元,不過應用程式不僅辨識出這些雙引號指定了多個單一資料值,也同時新增了 quote 值。

第二個轉換指令則會將每個資料列分割為不同的資料欄。由於這是以逗號分隔的資料,應用程式可識別出這個值為資料欄分隔符號,因此系統會將 on 值設為逗號字元 (,)。在這個範例中,由於 column4column6 的資料值中都有逗號,因此您必須加上引號,以便進行後續的清理作業。

如要完成資料集清理作業,請將第一個資料列抬升為資料欄標頭:

header

您現在即可移除引號。不過請注意,下列指令會套用到兩個資料欄:

replace col: Role, Address with: '' on: `"` global: true

您現在即可分割 Address 資料欄。您可以醒目提示資料欄內的其中一個逗號和其後方的空格,但請確保最終陳述式會如下所示:

split col: Address on: ', ' limit: 2

您應該會發現,系統產生的 Address3 資料欄含有多餘的內容:

Address3
CA 94601
CA, 94401
CA, 94105

請使用下列指令來移除逗號。在這個範例中,您必須保留資料欄中兩個值之間的空格,因此 on 值只能包含一個逗號。在下列指令中,width 值為兩個單引號:

replace col: Address3 with: '' on: `,` global: true

您現在可以依據空格分隔符號分割 Address3 資料欄:

split col: Address3 on: `{delim}`

由於資料會定期格式化,因此您可以使用 Cloud Dataprep 模式 {delim}。

結果:

重新命名資料欄名稱之後,您應該會看見下列資訊:

LastNameFirstNameRoleCompanyAddressCityStateZipcodeStatus
WagnerMelodyVP of EngineeringExample.com123 Main StreetOaklandCA94601Prospect
GruberHansDirector, ITExample.com456 BroadwayBurlingameCA94401Customer
FranksMandySr. Manager, AnalyticsTricorp789 Market StreetSan FranciscoCA94105Customer

範例:根據不同的分隔符號類型進行分割

這個範例說明了您可以如何使用下列類型的分隔符號,將單一欄位中的資料分割為多個資料欄:

  • 單一模式分隔符號:將一個模式套用至來源資料欄一或多次,藉此定義輸出資料欄中的分隔符號。
  • 多模式分隔符號:明確字串、字元索引位置或寬度固定的資料欄等多模式可用來分割資料欄。

若要進一步瞭解這些方法,請參閱 Split 轉換

來源:

在本範例中,您的 CSV 資料集含有一組伺服器的狀態訊息。伺服器的相關資料和時間戳記則存放在 CSV 的單一資料值中。

Server|Date Time,Status
admin.examplecom|2016-03-05 07:04:00,down
webapp.examplecom|2016-03-05 07:04:00,ok
admin.examplecom|2016-03-05 07:04:30,rebooting
webapp.examplecom|2016-03-05 07:04:00,ok
admin.examplecom|2016-03-05 07:05:00,ok
webapp.examplecom|2016-03-05 07:05:00,ok

轉換:

資料初次載入「轉換器」頁面時,系統會使用下列兩個轉換指令來分割 CSV 資料:

splitrows col: column1 on: '\r'

split col: column1 on: ',' quote: '\"'

首先可能需要新增 header

header

此時,您的資料應如下所示:

Server_Date_TimeStatus
admin.example.com|2016-03-05 07:04:00down
webapp.example.com|2016-03-05 07:04:00ok
admin.example.com|2016-03-05 07:04:30rebooting
webapp.example.com|2016-03-05 07:04:30ok
admin.example.com|2016-03-05 07:05:00ok
webapp.example.com|2016-03-05 07:05:00ok

第一個資料欄含有三組不同的資料:伺服器名稱、日期和時間。請注意,這些資料欄之間的分隔符號均不相同,因此您應該使用多模式分隔符號來區隔資料:

split col:Server_Date_Time delimiters:'|',' '

新增上述指令時,您應該會看到三個不同的資料欄且各含有不同的資訊欄位。請注意,系統已自動捨棄來源資料欄。

附註:資料欄名稱不得含有 | 值,因此無法使用來源資料欄名稱做為產生的資料欄要套用的資料欄名稱依據。在這種情況下,請務必使用 rename 轉換指令據此更新系統產生的資料欄。

如果您認為應當將時間戳記資料欄分為年、月、日三欄,由於這個欄位的資料欄分隔符號均為連字號 (-),因此在使用 split 轉換指令時,可以搭配單一模式分隔符號:

split col:date on:`-` limit:2

結果:

在您為系統產生的資料欄變更名稱之後,資料集應該會如下所示。請注意,系統已自動捨棄來源時間戳記資料欄。

serveryearmonthdaytimeStatus
admin.example.com2016030507:04:00down
webapp.example.com2016030507:04:00ok
admin.example.com2016030507:04:30rebooting
webapp.example.com2016030507:04:30ok
admin.example.com2016030507:05:00ok
webapp.example.com2016030507:05:00ok

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

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

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