このトピックでは、テーブル値関数 (TVF) について説明します。
rankTvf
rankTvf は、SQL ステートメントの rank ウィンドウ関数に似ています。この関数は、データが分散された後にデータをフィルタリングするために使用されます。次のサンプルコードは、関数のプロトタイプを示しています。
rankTvf("group_key", "sort_key", "reserved_count", (sql))
group_key: データを分散するために使用されるフィールド。複数のフィールドを指定することも、パラメーターを空のままにすることもできます。複数のフィールドはコンマ (,) で区切ります。
sort_key: データのソートに使用するフィールド。複数のフィールドを指定できます。正符号 (+) は、システムがデータを昇順でソートすることを指定します。負符号 (-) は、システムがデータを降順でソートすることを指定します。デフォルトでは、システムはデータを昇順でソートします。このフィールドを空にすることはできません。
reserved_count: 各グループで保持する返されるレコードの数。負の数は、返されるすべてのレコードが各グループで保持されることを指定します。
sql: クエリ結果を分散する必要がある SQL ステートメント。
rankTvf を使用して SQL ステートメントの結果を分散およびフィルタリングした後も、出力結果は SQL ステートメントの元の結果がソートされた順序でソートされます。フィルタリングされた行は出力結果から削除されます。
例:
select * from table (
rankTvf('brand','-size','1', (SELECT brand, size FROM phone))
)
order by brand
limit 100
sortTvf
sortTvf は、ローカルのトップ K 機能を提供するために使用されます。たとえば、sortTvf 関数を使用して、サーチャーによって返された上位 K 件の結果をソートし、結果に対して結合操作を実行できます。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 は、ローカルのトップ K 機能を提供するために使用されます。たとえば、topKTvf 関数を使用して、サーチャーによって返された上位 K 件の結果をソートし、結果に対して結合操作を実行できます。ORDER BY 句を使用する場合、句は結合操作のためにクエリレコードサーチャー (QRS) にプッシュされます。ORDER BY 句は、グローバルソート操作に使用されます。
次のサンプルコードは、関数のプロトタイプを示しています。
topKTvf("sort_key", "reserved_count", (sql))
sort_key: データのソートに使用するフィールド。複数のフィールドを指定できます。正符号 (+) は、システムがデータを昇順でソートすることを指定します。負符号 (-) は、システムがデータを降順でソートすることを指定します。デフォルトでは、システムはデータを昇順でソートします。このフィールドを空にすることはできません。
reserved_count: 各グループで保持されるフィールドの数。
sql: クエリ結果をソートする必要がある SQL ステートメント。
topKTvf と sortTvf の違い: topKTvf によって返される最終結果は順序付けされていません。
例:
select * from table (
topKTvf('-size','3', (SELECT brand, size FROM phone))
)
enableShuffleTvf
enableShuffleTvf 関数は、SQL ステートメントを TVF から QRS に切り替えるために使用されます。たとえば、rankTvf 関数によって処理される必要がある SQL ステートメントは、デフォルトでサーチャーにプッシュダウンできます。rankTvf 関数の SQL ステートメントに enableShuffleTvf が含まれている場合、rankTvf 関数は QRS 上でのみ実行されます。次のサンプルコードは、関数のプロトタイプを示しています。
enableShuffleTvf((sql))
次のサンプルコードは、enableShuffleTvf 関数の使用方法の例を示しています。
select * from table (
enableShuffleTvf((SELECT brand, size FROM phone))
)