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

OpenSearch:テーブル値関数 (TVF) の概要

最終更新日:Mar 11, 2026

このトピックでは、ユーザー定義のテーブル値関数 (TVF) の使用方法について説明します。

rankTvf

rankTvf 関数は、SQL のウィンドウ関数 RANK と同様の機能を提供します。この関数を使用すると、グループ化後のデータをフィルター処理できます。デフォルトでは、rankTvf は各データノードで実行されます。構文は以下のとおりです:

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

group_key:グループ化に使用するフィールドです。カンマ (,) で区切って複数のフィールドを指定できます。このパラメーターは空のままにすることも可能です。

sort_key:ソートに使用するフィールドです。複数のフィールドを指定できます。昇順にはプラス記号 (+)、降順にはマイナス記号 (-) を使用します。デフォルトは昇順です。このパラメーターは必須です。

reserved_count:各グループに保持するレコード数です。負の値を指定すると、すべてのレコードが保持されます。

SQL:離散化対象の SQL ステートメントです。

rankTvf は、SQL クエリの結果を離散化およびフィルター処理し、元の行順序を維持したまま、フィルター条件を満たさない行を削除します。

例:

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

sortTvf

sortTvf 関数は、ローカル TopK 機能を提供します。たとえば、結合操作の前に検索ノード (searcher node) でソートおよび TopK 結果の取得が可能です。ORDER BY 句を使用した場合、その操作は結合のために QRS ノードにプッシュアップされ、ORDER BY はグローバルソートを実行します。構文は以下のとおりです:

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

sort_key:ソートに使用するフィールドです。複数のフィールドを指定できます。昇順にはプラス記号 (+)、降順にはマイナス記号 (-) を使用します。デフォルトは昇順です。このパラメーターは必須です。

reserved_count:各グループに保持するレコード数です。

sql:ソート対象の SQL ステートメントです。

sortTvf と rankTvf の違い:sortTvf 関数は、元の SQL ステートメントの行順序を変更します。

例:

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

topKTvf

topKTvf 関数は、ローカル TopK 機能を提供します。たとえば、結合操作の前に検索ノード (searcher node) でソートおよび TopK 結果の取得が可能です。ORDER BY 句を使用した場合、その操作は結合のために QRS ノードにプッシュアップされ、ORDER BY はグローバルソートを実行します。構文は以下のとおりです:

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

sort_key:ソートに使用するフィールドです。複数のフィールドを指定できます。昇順にはプラス記号 (+)、降順にはマイナス記号 (-) を使用します。デフォルトは昇順です。このパラメーターは必須です。

reserved_count:各グループに保持するレコード数です。

sql:ソート対象の SQL ステートメントです。

topKTvf と sortTvf の違い:最終的な結果セットは並び順が保証されません。

例:

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

enableShuffleTvf

enableShuffleTvf 関数は、外部 TVF を強制的に QRS ノードで実行させます。たとえば、rankTvf はデフォルトで検索ノード (searcher node) にプッシュダウンされますが、rankTvf 内の SQL ステートメントに enableShuffleTvf が含まれている場合、rankTvf は QRS ノードでのみ実行されます。構文は以下のとおりです:

enableShuffleTvf((sql))

例:

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