データの変換
ストリーミング式は、結果セットを変換するための強力な関数セットを提供します。ユーザーガイドのこのセクションでは、結果セットに適用される有用な変換の概要を示します。
フィールドの選択と追加
select
関数は、別のストリーミング式をラップし、ストリーム内の各タプルに対して以下の操作を実行できます。
-
フィールドの**サブセットを選択**する
-
フィールドを新しい名前に**マッピング**する
-
新しいフィールドを**計算**する
以下は、select
関数がsearch
関数をラップし、フィールドを新しいフィールド名にマッピングする例です。recNum
関数は、タプルの現在のレコード番号を返すだけの数式です。select
式は、任意の数式を呼び出して新しい値を計算できます。

以下は、div
関数を使用して、2つの既存のフィールドから新しいフィールドを計算する例です。

タプルのフィルタリング
having
関数は、ブールロジックに基づいてストリーム内のタプルをフィルタリングするために使用できます。
以下の例では、having
関数はfacet
関数の出力をフィルタリングして、`count(*)`が20404を超えるタプルのみを出力しています。

ページング
recNum
関数で追加された**レコード番号**は、ページングをサポートするためにフィルタリングできます。
以下の例では、ネストされたlt
関数とgt
関数を持つ

Nullの処理
notNull
関数とisNull
関数は、null値を異なる値に置き換えたり、null値を持つタプルを除外したりするために使用できます。
以下の例では、select
関数内でisNull
関数を使用して、null値を-1に置き換えています。if
関数は3つのパラメータを取ります。1つ目はブール式で、この場合はisNull
です。if
関数は、ブール関数がtrueを返すと2番目のパラメータを返し、falseを返すと3番目のパラメータを返します。この場合、結果セットに含まれていないタプルのフィールドをチェックしているため、isNull
は常にtrueです。

notNull
とisNull
は、having
関数と組み合わせて、null値を持つタプルを除外することもできます。
以下の例では、結果セットにないフィールドに対してisNull
を評価しているため、常にtrueが返され、すべてのドキュメントが出力されます。

以下の例では、結果セットにないフィールドに対してnotNull
を評価しているため、常にfalseが返され、ドキュメントは出力されません。

正規表現の一致とフィルタリング
matches
関数は、having
関数内で使用して、レコード内のフィールドが特定の正規表現に一致するかどうかをテストできます。これにより、検索結果に対して高度な正規表現マッチングを行うことができます。
以下の例では、matches
関数を使用して、complaint_type_s
フィールドが**Commercial**で終わるすべてのレコードを返します。

ソート
sort
関数とtop
関数は、結果セットをメモリ内で並べ替えるために使用できます。sort
関数は、ソート条件に基づいて結果セット全体をソートして返します。top
関数は、ソート条件に基づいて結果セットの上位N個の値を返すために使用できます。

ロールアップ
rollup
関数と hashRollup
関数は、結果セットに対して集計を実行するために使用できます。これは、JSON ファセット API を使用して検索エンジンに集計をプッシュする facet
、facet2D
、および timeseries
集計関数とは異なります。
rollup
関数は、MapReduce スタイルのロールアップを実行します。これには、結果ストリームがグループ化フィールドでソートされている必要があります。これにより、非常に高いカーディナリティのフィールドに対する集計が可能になります。 hashRollup
関数は、すべてのバケットをインメモリハッシュマップに保持することでロールアップを実行します。これには、すべての個別のグループ化フィールドをメモリに格納するのに十分なメモリが必要ですが、基になるストリームがソートされている必要はありません。
以下の例は、nyc311
苦情データベースのランダムサンプルから上位 5 件の苦情の種類を視覚化したものです。 top
関数は、hashRollup
によって出力された count(*)
フィールドに基づいて上位 5 件の苦情の種類を選択するために使用されます。
