S-JIS[2026-03-06/2026-03-08]
TsurugiのSQLのユーザー定義表値関数(UDTF)のメモ。
Tsurugi 1.9.0で、ユーザー定義表値関数(User-Defined Table-valued Function(UDTF))が使えるようになった。
UDTFはユーザー定義関数(UDF)の一種で、ユーザーが関数を定義してselect文から呼び出すことが出来る。
UDFは関数呼び出し1回につき1つの値(スカラー値)しか返せないのに対し、UDTFは複数列・複数行の値を返せる。すなわちテーブルのような形で値を返せる。
TsurugiのUDTFは、UDFと同じくgRPCで定義する(gRPCサーバーを用意する)。
gRPC的には、UDFは単一レスポンス(Unary)なのに対し、UDTFはstreamでメッセージを返す形になる。
UDTFの関数から値を受け取るには、Tsurugi独自のapply演算子を使用する。
(UDSFはwhereで呼び出すことも出来るが、UDTFはapplyのみで使用できる)
applyはjoinと似た概念で、戻り値の表がjoin風に結合される。
select foo, f.value1, f.value2 from test apply my_table_function(foo) as f
applyにはcross applyとouter applyがある。単なるapplyは「cross apply」と同じ。
UDTFが値を返さない(0行だった)場合、cross applyはその行全体が出力されないのに対し、outer
applyはfromの値だけは出力され、UDTFのカラムはNULLになる。