このトピックでは、ユーザー定義のテーブル値関数 (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))
)