FIND 函式

傳回輸入字串中,指定相符字串所在位置的索引值。系統會從左至右進行搜尋。

輸入內容可以是資料欄參照或字串常值,不過字串常值的用法很少見。

  • 資料欄參照可以參照字串資料欄、物件資料欄或陣列類型資料欄,以便資料在被完全拆分成表格資料前使用 FIND 函式加以篩選。
  • 不論字串索引值為何,傳回值一律來自字串開頭。
  • 如果找不到相符項目,函式會傳回空值。
  • 如果您需要判斷值是否在陣列中,可以使用 MATCHES 函式,此函式會傳回 true/false 回應。請參閱 MATCHES 函式一文。

您也可以從右邊開始搜尋字串。詳情請參閱 RIGHTFIND 函式

基本用法

資料欄參照範例:

derive type:single value: FIND(MyName,'find this',true,0)

輸出:MyName 資料欄值中,從值的開頭開始搜尋 find this 字串,並且忽略大小寫。如果找到相符項目,則該字串所在的索引值會寫入新資料欄。

字串文字範例:

derive type:single value: FIND('Hello, World','lo',false,2)

輸出:Hello, World 字串中搜尋 lo 字串,搜尋時區分大小寫,並從字串的第三個字元開始搜尋。因為在第四個字元的位置找到相符項目,所以系統會將 3 值寫入新資料欄。

If 範例:

derive type:single value: IF(FIND(SearchPool,'FindIt') >= 0, 'found it', '') as: 'Finds'

輸出:SearchPool 資料欄值中搜尋 FindIt 字串,從值的開頭開始搜尋 (預設)。預設行為會區分大小寫。如果找到字串,則新資料欄 Finds 會含有 found it 值。否則,資料欄會空白。

語法

derive type:single value:FIND(column_string,string_pattern,[ignore_case], [start_index])

引數是否必要?資料類型說明
column_string字串要套用於函式的資料欄名稱或字串文字
string_pattern字串要尋找的字串文字或模式
ignore_case布林值如果值為 true,執行比對時不會區分大小寫。預設值為 false
start_index整數 (非負整數)

如果有指定,這個值會識別要在來源資料中搜尋是否有相符項目的起始索引值。

如果沒有指定,則會搜尋整個字串。

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

column_string

待搜尋的項目名稱。有效值可以是:

  • 字串常值必須以引號括住 ('Hello, World')。
  • 資料欄參照,參照的類型及其所有可能值必須能推測為字串。

如果系統在資料欄中找不到值,則會產生起始索引參數值。

  • 不支援多個值和萬用字元。

使用須知:

是否必要?資料類型範例值
字串文字或資料欄參照 (字串、陣列或物件)myColumn

string_pattern

要尋找的字串文字或模式。這個值可以是字串文字、Cloud Dataprep 模式或規則運算式。

  • 如果系統找不到字串或資料欄值,則會產生起始索引參數值。
    • 字串文字必須以引號括住 ('Hello, World')。
  • 不支援多個值和萬用字元。

使用須知:

是否必要?資料類型範例值
字串文字或模式'Hello'

ignore_case

如果值為 true,則 FIND 函式會在比對字串文字或模式值時忽略大小寫。

預設值為 false,這表示執行比對時會依預設區分大小寫。

使用須知:

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

start_index

資料欄或字串文字值中要開始搜尋的字元索引。例如,2 值會指示 FIND 函式從資料欄或字串值的第三個字元開始搜尋。

注意:索引值從 0 開始。如果沒有指定此值,則預設值為 0,表示搜尋整個字串。

  • 值必須為非負整數。

  • 如果這個值大於字串長度,則無法執行比對作業。

使用須知:

是否必要?資料類型範例值
整數 (非負整數)2

範例

範例 - 在交易串流中尋找產品採購

來源:

下方列出的交易串流已經過簡化,其中關於交易的主要資訊 (TransactionIdCustomerId) 與訂單詳細資訊配對成組。訂單詳細資料以陣列形式加入應用程式的 OrderDetail 資料欄中。陣列資料欄含有產品 ID、數量及交易類型等相關資訊。

TransactionIdCustomerIdOrderDetail
12312312100023[{"ProdId":"54321","Qty":"5","TransType":"PURCHASE"}]
12312313100045[{"ProdId":"94105","Qty":"12","TransType":"PURCHASE"}]
12312314100066[{"ProdId":"54321","Qty":"1","TransType":"TEST"}]
12312315100068[{"ProdId":"85858","Qty":"9","TransType":"PURCHASE"}]

交易串流包含測試交易,這類交易會在詳細資料的資料欄中以 TransTypeTEST 值表示。您想儘早在處理程序中移除這些交易,這樣可以簡化資料集並提升處理速度。

轉換:

首先,您必須找出含有測試交易值的記錄。下列轉換會產生新資料欄,其中所含的 true/false 值表示 OrderDetail 轉換中是否有 "TEST" 值。

提示:您應使用雙引號括住值,以防陣列中的其他欄位也含有相同版本的 TEST 值。請注意,雙引號必須逸出,如下列值所示。

derive type:single value:FIND(OrderDetail, '\"TEST\"', false, 0)

將步驟加入方案時,即會產生 find_OrderDetail 資料欄,其中含有 FIND 函式傳回的索引值。在此案例中,只有一列含有傳回的值:第三筆交易的 42 索引值。

接著,您可以新增下列步驟,以保留 FIND 函式在 find_OrderDetail 資料欄中傳回空值的資料列:

keep row:ISNULL(find_OrderDetail)

結果:

TransactionIdCustomerIdOrderDetailfind_OrderDetail
12312312100023[{"ProdId":"54321","Qty":"5","TransType":"PURCHASE"}]
12312313100045[{"ProdId":"94105","Qty":"12","TransType":"PURCHASE"}]
12312315100068[{"ProdId":"85858","Qty":"9","TransType":"PURCHASE"}]

此時您可以刪除 find_OrderDetail 資料欄。

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

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

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