IFMISMATCHED 函式

如果輸入運算式與指定的資料類型或類型陣列不相符,IFMISMATCHED 函式會寫出指定的值,否則會寫入來源值。輸入可以是常值、資料欄參照或函式。

ISMISMATCHED 函式僅會測試值是否不相符。請參閱 ISMISMATCHED 函式一文。

基本用法

基本資料類型:

derive type:single value:IFMISMATCHED(my_ssn,'SSN', 'XXX-XX-XXXX') as:'final_SSN'

輸出:如果 my_ssn 中的值與 SSN 的資料類型不相符,系統會產生名為 final_SSN 的新資料欄,內有 XXX-XX-XXXX 值。

具格式設定選項的資料類型:

若為具有格式設定選項的資料類型 (如日期時間),則可以使用陣列來指定格式,如下所示:

set col: month_Date value: IFMISMATCHED(month_Date, ['Datetime','mm-dd-yy','mm*dd*yy'], null())

輸出:如果 month_Date 資料欄值不符合 mm-dd-yymm*dd*yy 格式的日期時間值,即會將這些值設為空值。

語法

derive type:single value:IFMISMATCHED(column_string, data_type_literal, computed_value)

引數是否必要?資料類型說明
source_value字串待測試的資料欄名稱、字串常值或函式
datatype_literal字串字串常值或陣列,可辨識資料類型,並透過交相對照的方式驗證來源值
output_value字串要寫入的字串常值

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

source_value

待測試是否符合資料類型的資料欄名稱、字串常值或函式。

  • 如果系統找不到字串或資料欄值,會產生空白的字串結果。
  • 不支援使用多個資料欄和萬用字元。

使用須知:

是否必要?資料類型示例值
字串常值、資料欄參照或函式myColumn

datatype_literal

常值或字串陣列,可識別資料類型,藉此驗證來源資料欄或字串。

  • 不支援使用資料欄參照。

使用須知:

是否必要?資料類型示例值
字串常值'Integer'

有效資料類型字串:

在轉換內參照資料類型時,可以使用下列字串來辨識每種類型:

附註:在 Wrangle 轉換中,值有大小寫之分。

資料類型字串
字串'String'
整數'Integer'
小數'Float'
布林值'Bool'
社會安全號碼'SSN'
電話號碼'Phone'
電子郵件地址'Emailaddress'
信用卡'Creditcard'
性別'Gender'
物件'Map'
陣列'Array'
IP 位址'Ipaddress'
網址'Url'
HTTP 代碼'Httpcodes'
郵遞區號'Zipcode'
狀態'State'
日期 / 時間'Datetime'

output_value

如果測試值與指定資料類型不相符時,會寫入的輸出值。

使用須知:

是否必要?資料類型示例值
字串或數字常值'Data type mismatch'

範例

範例 - 使用 IF* 函式驗證資料類型

本節提供的簡易範例說明如何使用 IF* 函式進行資料類型驗證。這類函式包含下列項目:

  • IFNULL:如果輸入運算式或輸入值為空值,則此函式會傳回指定值。請參閱 IFNULL 函式
  • IFMISSING:如果輸入值或運算式為遺漏值,則傳回指定值。請參閱 IFMISSING 函式
  • IFMISMATCHED:如果輸入值或運算式與資料欄的資料類型不相符,則傳回指定值。請參閱 IFMISMATCHED 函式
  • IFVALID:如果輸入值或運算式對資料欄的資料類型有效,則傳回指定值。請參閱 IFVALID 函式

來源:

以下簡易資料表依照客戶 ID 列出郵遞區號:

custIdcustZip
C00198123
C00294105
C00312415
C00412451-2234
C00512441-298
C006
C007
C0081242
C0091104


轉換:

將上述資料匯入轉換頁面時,您會注意到下列事項:

  • custZip 資料欄的格式設為整數類型。
  • custZip 資料欄有兩個遺漏值以及兩個不相符值。

首先測試 custZip 資料欄中的有效值,您可以使用 IFVALID 函式驗證任何資料類型:

derive type:single value:IFVALID(custZip, 'Zipcode', 'ok') as:'status'

修正四位數郵遞區號:status 資料欄中,前四列例項的狀態為 ok。您會發現底部的兩個資料列含有四位數代碼。

由於 custZip 值原先是以整數類型匯入,因此系統會刪除任何前置的 0 值。在這種情況下,您可以重新加回前置的零。在重新加回前置的零之前,請先將 zip 的資料類型變更為字串,並插入下列指令:

derive type:single value:IF(LEN(custZip)==4,'0','') as:'FourDigitZip'

derive type:single value: merge([FourDigitZip,custZip]) as:'custZip2'

set col:zip value:custZip2

drop col:FourDigitZip,custZip2

現在,當您點選最後一個方案步驟時,應會看見 status 多了兩個顯示為 Ok 的資料列。

針對具有三位數延伸碼的郵遞區號,只要移除延伸的部分即可變成有效值。請按一下倒數第二個步驟,系統會在資料網格中將該值醒目顯示。請按一下「Replace」(取代) 建議資訊卡,選取使用下列字串作為比對模式的選項:

'-{digit}{3}{end}'

上述字串意指完全刪除郵遞區號中的三位數延伸碼。您可以針對任何兩位數或一位數的延伸碼執行相同的作業,不過本範例中並沒有這類資料。

遺漏值與空值:現在,您需瞭解如何處理遺漏值和空值。IFMISSING 會測試是否有遺漏值和空值,而 IFNULL 只會測試是否有空值。空值可能表示該資料列的資料格式錯誤,而在這個範例中,您想要刪除空值,並針對遺漏值寫入 missing 狀態。

請在方案中最後一行的上方按一下,插入下列指令:

set col:custZip value:IFNULL(custZip, 'xxxxx')

set col:custZip value:IFMISSING(custZip, '00000')

現在,當您按一下方案中的最後一行時,就只會列出狀態不是 ok 的空值。您可以使用以下指令移除這個資料列及所有情況類似的資料列:

delete row:(status == 'xxxxx')


結果:

custIdcustZipstatus
C00198123ok
C00294105ok
C00312415ok
C00412451-2234ok
C00512441-298ok
C00600000ok
C0081242ok
C0091104ok

請重複執行上述步驟做為練習,從使用 IFMISMATCHED 函式判斷 status 資料欄中的值開始:

derive type:single value:IFMISMATCHED(custZip, 'Zipcode', 'mismatched') as:'status'

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

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

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