轉換資料
串流表達式提供了一組強大的函式,用於轉換結果集。本使用者指南的此章節概述了應用於結果集的實用轉換。
選取和新增欄位
select
函式包裝另一個串流表達式,可以對串流中的每個元組執行以下操作
-
選取欄位的子集
-
將欄位對應到新的名稱
-
計算新的欄位
以下範例顯示 select
函式包裝 search
函式,並將欄位對應到新的欄位名稱。recNum
函式是一個數學表達式,它只會傳回元組的目前記錄編號。select
表達式可以呼叫任何數學表達式來計算新的值。

以下範例使用 div
函式從兩個現有欄位計算新的欄位

處理 Null 值
notNull
和 isNull
函式可以用來將 null 值替換為不同的值,或篩選出具有 null 值的元組。
以下範例在 select
函式中使用 isNull
函式,將 null 值替換為 -1。if
函式採用 3 個參數。第一個是布林表達式,在此案例中為 isNull
。如果布林函式傳回 true,if
函式會傳回第二個參數,如果傳回 false,則傳回第三個參數。在此案例中,isNull
永遠為 true,因為它正在檢查元組中未包含在結果集中的欄位。

notNull
和 isNull
也可以與 having
函式一起使用,以篩選出具有 null 值的元組。
以下範例會發出所有文件,因為它正在針對結果集中不存在的欄位評估 isNull
,這會永遠傳回 true。

以下範例會發出零個文件,因為它正在針對結果集中不存在的欄位評估 notNull
,這會永遠傳回 false。

正規表示式匹配與篩選
可以在 having
函式內使用 matches
函式,測試記錄中的欄位是否符合特定的正規表示式。這允許對搜尋結果進行複雜的正規表示式匹配。
以下範例使用 matches
函式來傳回 complaint_type_s
欄位以 Commercial 結尾的所有記錄。

Rollups
可以使用 rollup
和 hashRollup
函式來對結果集執行彙總。這與 facet
、facet2D
和 timeseries
彙總函式不同,後者使用 JSON 分面 API 將彙總推送到搜尋引擎。
rollup
函數執行類似 map-reduce 風格的彙總操作,這需要結果串流依據分組欄位排序。這允許對高基數欄位進行彙總。hashRollup
函數執行彙總操作時,將所有桶保存在記憶體中的雜湊映射中。這需要足夠的記憶體來儲存所有不同的分組依據欄位,但不要求底層串流已排序。
下面的範例顯示從 nyc311
投訴資料庫的隨機樣本中,前 5 大投訴類型的視覺化呈現。top
函數用於根據 hashRollup
輸出的 count(*)
欄位,選取前 5 大投訴類型。
