すべてのプロダクト
Search
ドキュメントセンター

OpenSearch:概要

最終更新日:Apr 02, 2026

テーブル値関数 (TVF) は、検索結果に対するグループ化、ランキング、ソート、トップ K フィルタリングといった後処理機能で OpenSearch SQL を拡張します。

関数一覧

関数シグネチャ説明
rankTvfrankTvf("group_key", "sort_key", "reserved_count", (sql))キーフィールドで結果をグループ化し、グループごとに上位 N 件のレコードを保持し、元の行の順序を維持します
sortTvfsortTvf("sort_key", "reserved_count", (sql))指定された順序でソートされた上位 K 件のレコードを返します
topKTvftopKTvf("sort_key", "reserved_count", (sql))順序付けられていない結果セットから上位 K 件のレコードを返します
enableShuffleTvfenableShuffleTvf((sql))SQL の実行をサーチャーからクエリレコードサーチャー (QRS) にルーティングします

rankTvf

rankTvf は、SQL のランクウィンドウ関数のように動作します。キーフィールドで結果をグループ化し、グループごとに上位 N 件のレコードを保持して残りを削除します。その際、元の SQL 結果のソート順は維持されます。

構文

rankTvf("group_key", "sort_key", "reserved_count", (sql))

パラメーター

パラメーター説明
group_key結果のグループ化に使用するフィールド。カンマ区切りで複数のフィールドを指定できます。グループ化をスキップする場合は、空白のままにします。
sort_key各グループ内の結果のソートに使用するフィールド。複数のフィールドを指定できます。昇順の場合は +、降順の場合は - をプレフィックスとして付けます。デフォルトは昇順です。空白にはできません。
reserved_countグループごとに保持するレコード数。負の数を設定すると、各グループのすべてのレコードが保持されます。
sql結果がグループ化およびフィルタリングされる SQL ステートメント。

ブランドごとに `size` の降順で上位 1 件の結果を保持し、最終的な出力をブランドでソートします:

select * from table (
  rankTvf('brand', '-size', '1', (SELECT brand, size FROM phone))
)
order by brand
limit 100

sortTvf

sortTvf は、ローカルでのトップ K 機能を提供します。JOIN 操作の前にサーチャーレベルで結果をソートおよび切り捨て、元の SQL 結果の行の順序を変更します。クエリに ORDER BY 句も含まれている場合、その句はグローバルソートのために QRS にプッシュされます。

構文

sortTvf("sort_key", "reserved_count", (sql))

パラメーター

パラメーター説明
sort_key結果のソートに使用するフィールド。複数のフィールドを指定できます。昇順の場合は +、降順の場合は - をプレフィックスとして付けます。デフォルトは昇順です。空白にはできません。
reserved_count保持するレコード数。
sql結果がソートされる SQL ステートメント。

`size` の降順で上位 3 件のスマートフォンを返します:

select * from table (
  sortTvf('-size', '3', (SELECT brand, size FROM phone))
)

topKTvf

topKTvf は、sortTvf と同様のローカルでのトップ K 機能を提供します。主な違いは、topKTvf順序付けられていない結果セットを返す点です。クエリに ORDER BY 句が含まれている場合、その句はグローバルソートのために QRS にプッシュされます。

構文

topKTvf("sort_key", "reserved_count", (sql))

パラメーター

パラメーター説明
sort_keyトップ K レコードの選択に使用するフィールド。複数のフィールドを指定できます。昇順の場合は +、降順の場合は - をプレフィックスとして付けます。デフォルトは昇順です。空白にはできません。
reserved_count保持するレコード数。
sql結果がフィルタリングされる SQL ステートメント。

`size` で上位 3 件のスマートフォンを取得します (結果の順序は保証されません):

select * from table (
  topKTvf('-size', '3', (SELECT brand, size FROM phone))
)

sortTvf と topKTvf の使い分け

どちらの関数もローカルでトップ K の結果を返しますが、出力の順序が異なります:

sortTvftopKTvf
出力順序ソート済み (順序は保証されます)順序付けなし
使用ケースJOIN の前にソート済みのローカル結果が必要な場合トップ K レコードのみが必要で、順序は問わない場合

enableShuffleTvf

デフォルトでは、rankTvf によって処理される SQL ステートメントはサーチャーにプッシュダウンされます。enableShuffleTvf を使用すると、代わりに実行を QRS にルーティングできます。

構文

enableShuffleTvf((sql))

select * from table (
  enableShuffleTvf((SELECT brand, size FROM phone))
)