使用陣列

陣列是在括號中以逗號分隔的一組值。以下為有效的陣列:

[1,2,3]
["A","B"]
["C",["D","E"],"F",["G",["H","I"]]]

不規則陣列:如果兩個陣列之間的元素個數不相同,就會被視為不規則陣列。上文的三個陣列分別具有不同數目的最高層元素 (3、2、4)。

巢狀陣列:當陣列元素本身就是一個陣列時,該元素就會被視為巢狀陣列。請見以上的最後一個例子。

來源陣列

要被視為陣列,來源資料欄必須包含下列值:

  • 用方括號括住的值
  • 儲存格中用逗號分隔的值

這類資料欄有可能會被當做陣列的資料類型。

詳情請參閱陣列資料類型一文。

建立陣列

在 Cloud Dataprep by TRIFACTA® 中,您可以使用一或多個資料欄中的值來產生陣列。

以擷取方式建立

您可以透過從指定的資料欄中擷取模式值來建立值的陣列。以下轉換作業會從 msg 資料欄中擷取出包含值所有字母為大寫的清單,並將清單中所有值放入新的 acronyms 資料欄中:

轉換名稱 Extract matches into Array
參數:資料欄 msg
參數:模式與清單中的元素相符 `{upper}+`
參數:新資料欄名稱 acronyms
msgacronyms
SCUBA, IMHO, is the greatest sport in the world.["SCUBA","IMHO"]
[]
LOL, that assignment you finished is DOA. You need to fix it PDQ.["LOL","DOA","Y","PDQ"]

注意事項:

  • 空的輸入資料欄值會轉換成空的陣列。
  • 在最後一個資料列中,Cloud Dataprep 模式與 "Y" 值相符。如要修正這種情況,您可以如下所示變更模式比對值,比對資料列中兩個以上的大寫字母:

    `{upper}{upper}+`

以巢狀方式建立

您可以透過將多個資料欄中的值套疊在一起的方式來建立陣列。

來源:

num1num2num3
111213
141516
171819

您想要將 num1num2 中的值套疊成一個陣列,然後再將該陣列與 num3 套疊在一起:

注意:如果您要套疊多層級的陣列,應該從最低層級套疊到最高層級。

轉換名稱 Nest columns into Objects
參數:資料欄1 num1
參數:資料欄2 num2
參數:將資料欄套疊成 Array
參數:新資料欄名稱 nest1

然後,您可以執行最高層元素的套疊作業:

注意:您為資料欄排定的套疊順序,決定了元素在產生陣列中的出現順序。

轉換名稱 Nest columns into Objects
參數:資料欄1 nest1
參數:資料欄2 num3
參數:將資料欄套疊成 Array
參數:新資料欄名稱 nest2

在產生的資料欄中,您會發現所有值都加上了引號,即使這些值是整數。

注意:使用巢狀轉換方式產生的陣列元素一律都會加上引號。

您可以使用以下的轉換作業將 nest2 資料欄中的引號移除:

轉換名稱 Replace text or patterns
參數:資料欄 nest2
參數:尋找 '"'
參數:替換 (empty)
參數:比對所有出現的值 true

移除不使用的 nest1 資料欄後,資料會顯示如下:

num1num2num3nest2
111213[[11,12],13]
141516[[14,15],16]
171819[[17,18],19]

以資料欄中的值建立

您可以使用其中一種可用的函式來以資料欄中的值建立陣列。

來源:

listVals
5
TRUE
{"key1":"value1","keys2":"value2"}
[1,2,3]
My String
-5.5

以下轉換作業會產生一個新的資料欄,其中的每個資料列都會包含輸入資料欄中所有值的陣列:

轉換名稱 New formula
參數:公式類型 Single row formula
參數:公式 LIST(listVals,1000)
參數:新資料欄名稱 listOfListVals

結果:

listValslistOfListVals
5["5","TRUE","{\"key1\":\"value1\",\"keys2\":\"value2\"}","[1,2,3]","My String","-5.5"]
TRUE["5","TRUE","{\"key1\":\"value1\",\"keys2\":\"value2\"}","[1,2,3]","My String","-5.5"]
{"key1":"value1","keys2":"value2"}["5","TRUE","{\"key1\":\"value1\",\"keys2\":\"value2\"}","[1,2,3]","My String","-5.5"]
[1,2,3]["5","TRUE","{\"key1\":\"value1\",\"keys2\":\"value2\"}","[1,2,3]","My String","-5.5"]
My String["5","TRUE","{\"key1\":\"value1\",\"keys2\":\"value2\"}","[1,2,3]","My String","-5.5"]
-5.5["5","TRUE","{\"key1\":\"value1\",\"keys2\":\"value2\"}","[1,2,3]","My String","-5.5"]


注意事項:

  • LIST 函式中的第二個參數定義了可寫入的值數目上限。預設的數目上限為 1000
  • 在產生的陣列中的所有值都會寫成字串值。
  • 加了引號的值會從輸出中逸出。

以下函式可讓您使用資料欄中的值產生各種不同類型的陣列。

函式說明
LIST 函式

將資料欄中的一組值擷取到儲存在新資料欄中的陣列。此函式通常屬於匯總作業的一部分。

UNIQUE 函式

LISTIF 函式

傳回資料欄中符合指定條件的資料列所含的所有值清單。

ROLLINGLIST 函式

在指定資料欄中,計算現行資料列前後值的累計清單,並傳回這些值的陣列。

RANGE 函式

計算整數陣列,從開頭的整數到結尾 (停止) 整數,由第三個參數指定進階。

注意:包含範圍的下限,但不包含上限。

提示:上方的連結提供了這些函式的其他範例。

以物件類型建立

您可以將物件資料欄中的鍵擷取到字串值陣列中。物件類型的值會以加上引號的鍵/值組合列出,並且可以進行套疊。請參閱物件資料類型一文。

來源:

假設您的物件資料與下方類似:

myObject
{"key1":"value1","key2":"value2","key3":"value3"}
{"apples":"2","oranges":"4"}
{"planes":{"boeing":"5","airbus":"4"},"trains":{"amtrak":"1","SP":"2"}, "automobiles":{"toyota":"100","nissan":"50"}}

您可以執行以下的轉換作業,將最高層的鍵擷取到新命名資料欄的陣列中:

注意:KEYS 函式只會從物件中擷取最高層的鍵。

轉換名稱 New formula
參數:公式類型 Single row formula
參數:公式 KEYS(myObject)
參數:新資料欄名稱 myObjectKeys

結果:

myObjectmyObjectKeys
{"key1":"value1","key2":"value2","key3":"value3"}["key1","key2","key3"]
{"apples":"2","oranges":"4"}["apples","oranges"]
{"planes":{"boeing":"5","airbus":"4"},"trains":{"amtrak":"1","SP":"2"}, "automobiles":{"toyota":"100","nissan":"50"}}["planes","trains","automobiles"]

詳情請參閱 KEYS 函式一文。

讀取陣列

您可以讀取資料集的陣列中的值。

注意:建立陣列之後,您可以在陣列後面附加元素,或將它與其他陣列合併。除非將陣列拆開並重新建構它,否則您無法替換陣列中的值。

函式說明
IN 函式

如果第二個參數的值陣列中包含第一個參數,則傳回 true

ARRAYELEMENTAT 函式

針對指定資料欄、陣列常值或會傳回陣列的函式,計算從 0 開始的陣列元素索引值。

ARRAYLEN 函式

針對指定資料欄、陣列常值或會傳回陣列的函式,計算陣列所含元素的數目。

ARRAYUNIQUE 函式

產生由一或多個陣列中所有不重複的元素組成的陣列。

提示:上方的連結提供了這些函式的其他範例。

陣列運算

您可以使用以下函式來對陣列中的值執行計算:

函式說明
LISTSUM 函式

計算輸入陣列中所有數值的總和。輸入可以是陣列常值、陣列的資料欄,或傳回陣列的函式。輸入值必須是整數或小數類型。

LISTMAX 函式

計算輸入陣列中所有數值的最大值。輸入可以是陣列常值、陣列的資料欄,或傳回陣列的函式。輸入值必須是整數或小數類型。

LISTMIN 函式

計算輸入陣列中所有數值的最小值。輸入可以是陣列常值、陣列的資料欄,或傳回陣列的函式。輸入值必須是整數或小數類型。

LISTAVERAGE 函式

針對輸入陣列中的所有數值計算平均值。輸入可以是陣列常值、陣列的資料欄,或傳回陣列的函式。輸入值必須是整數或小數類型。

LISTVAR 函式

計算輸入陣列中所有數值的變異數。輸入可以是陣列常值、陣列的資料欄,或傳回陣列的函式。輸入值必須是整數或小數類型。

LISTSTDEV 函式

計算輸入陣列中所有數值的標準差。輸入可以是陣列常值、陣列的資料欄,或傳回陣列的函式。輸入值必須是整數或小數類型。

LISTMODE 函式

計算輸入陣列的所有數值中最常見的值。輸入可以是陣列常值、陣列的資料欄,或傳回陣列的函式。輸入值必須是整數或小數類型。

合併陣列

您可以使用各種合併方法將陣列合併在一起。

來源:

array1array2
["1","2","3"]["A","B","C"]
["4","5","6"]["D","E","F"]
["7","8","9"]["G","H","I"]

以下的轉換作業會將上方的陣列串連成一個陣列:

轉換名稱 New formula
參數:公式類型 Single row formula
參數:公式 ARRAYCONCAT([array1,array2])
參數:新資料欄名稱 arrayConcat

結果:

array1array2arrayConcat
["1","2","3"]["A","B","C"]["1","2","3","A","B","C"]
["4","5","6"]["D","E","F"]["4","5","6","D","E","F"]
["7","8","9"]["G","H","I"]["7","8","9","G","H","I"]

以下函式可用於將陣列合併在一起:

函式說明
ARRAYCONCAT 函式

將某一陣列的元素與另一陣列合併,會先列出第一個陣列的所有元素,再列出第二個陣列的所有元素。

ARRAYCROSS 函式

產生巢狀陣列,其中包含兩個以上的陣列中所有元素的交叉乘積。

ARRAYINTERSECT 函式

產生的陣列包含的所有元素出現在多個輸入陣列中,此陣列可做為資料欄名稱或陣列常值的參照。

ARRAYSTOMAP 函式

將含有鍵的某個陣列與含有值的另一個陣列合併成一個鍵/值組合物件。

ARRAYZIP 函式

將多個陣列合併成為一個巢狀陣列,並將陣列 1 的元素 1 與陣列 2 的元素 2 配對,依此類推。陣列是以資料欄名稱或陣列常值表示。

提示:上方的連結提供了這些函式的其他範例。

拆分陣列

將陣列擴展為資料列

您可以使用下列轉換作業,將陣列拆分成個別的值。以下是取自之前產生的 nest2 資料欄中的一些範例資料。num3 資料欄會保留做為參照:

num3nest2
13[[11,12],13]
16[[14,15],16]
19[[17,18],19]

您可以使用下列簡易的轉換作業,將 nest2 中的值展平成為各資料列中的個別值:

注意:您可以根據陣列中的元素個數,增加資料集的大小。

注意:如果來源資料欄中的某個儲存格不包含陣列,系統會在對應資料列中寫入空白值。

轉換名稱 Convert Array to Rows
參數:資料欄 nest2

結果:

num3nest2
13[11,12]
1313
16[14,15]
1616
19[17,18]
1919

注意:將陣列資料欄轉換為資料列,僅會拆解最高層的陣列。您可能需要多次執行這個轉換作業。

將巢狀陣列元素拆分為資料欄

您可以將陣列中的各個元素拆分為單獨的資料欄。

注意:您想要拆分為資料欄的每個元素都必須在元素路徑中單獨列為一行。

來源:

arrayNested
["A",["B","C"],"D"]
["H",["I","J",["K","L"]]]
["E","F","G"]

以下的轉換作業會擷取每個陣列中的第二及第三個元素:

轉換名稱 Unnest Objects into columns
參數:資料欄 arrayNested
參數:元素路徑1 [1]
參數:元素路徑2 [2]
參數:包括原始資料欄名稱 true

此轉換作業會擷取套疊為陣列第二個元素的陣列中第一個元素:

轉換名稱 Unnest Objects into columns
參數:資料欄 arrayNested
參數:元素路徑1 [1][0]
參數:包括原始資料欄名稱 true

結果資料應顯示如下:

arrayNestedarrayNested_1arrayNested_2
["A",["B","C"],"D"]["B","C"]B
["H",["I","J",["K","L"]]]["I","J",["K","L"]]I
["E","F","G"]F
本頁內容對您是否有任何幫助?請提供意見:

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

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