本文為您提供了自訂函數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))
)