自定义函数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))
)