全部產品
Search
文件中心

OpenSearch:TVF使用介紹

更新時間:Mar 11, 2026

本文為您提供了自訂函數TVF的相關使用說明。

rankTvf

rankTvf主要是為了提供類sql視窗函數rank的功能,用於打散後過濾,預設在每個資料節點上執行,原型如下:

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

group_key: 用於打散的欄位,支援多個欄位,使用,分隔, 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主要是為了提供local topK的功能。例如是想在searcher上進行排序取topk的結果,再去做join。如果使用order by語句則會上推到qrs上做join,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主要是為了提供local topK的功能。例如是想在searcher上進行排序取topk的結果,再去做join。如果使用order by語句則會上推到qrs上做join,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之上的sql在qrs結點上跑,例如rankTvf,預設是可以下推到searcher,如果rankTvf中的sql包含了enableShuffleTvf, 此時rankTvf只會在qrs上跑。原型如下:

enableShuffleTvf((sql))

使用樣本:

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