All Products
Search
Document Center

OpenSearch:Pengenalan TVF

Last Updated:Mar 11, 2026

Topik ini menjelaskan cara menggunakan user-defined table-valued functions (TVF).

rankTvf

Fungsi rankTvf menyediakan fitur yang mirip dengan fungsi jendela SQL rank. Fungsi ini dapat digunakan untuk memfilter data setelah pengelompokan. Secara default, rankTvf dieksekusi pada setiap data node. Sintaksnya adalah sebagai berikut:

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

group_key: Bidang-bidang yang digunakan untuk pengelompokan. Anda dapat menentukan beberapa bidang yang dipisahkan koma (,). Parameter ini boleh kosong.

sort_key: Bidang-bidang yang digunakan untuk sorting. Anda dapat menentukan beberapa bidang. Gunakan tanda plus (+) untuk urutan menaik dan tanda minus (-) untuk urutan menurun. Nilai default-nya adalah urutan menaik. Parameter ini tidak boleh kosong.

reserved_count: Jumlah catatan yang dipertahankan dalam setiap kelompok. Nilai negatif akan mempertahankan semua catatan.

SQL: Pernyataan SQL yang akan didiskretisasi.

rankTvf mendiskretisasi dan memfilter hasil kueri SQL, mempertahankan urutan baris asli sekaligus menghapus baris-baris yang tidak memenuhi kriteria filter.

Contoh:

select * from table (
  rankTvf('brand','-size','1', (SELECT brand, size FROM phone))
) 
order by brand 
limit 100 

sortTvf

Fungsi sortTvf menyediakan fitur TopK lokal. Misalnya, Anda dapat melakukan sorting dan mengambil hasil TopK pada searcher node sebelum melakukan join. Jika Anda menggunakan klausa ORDER BY, operasi tersebut akan di-push ke QRS node untuk join, dan ORDER BY akan melakukan sorting global. Sintaksnya adalah sebagai berikut:

sortTvf("sort_key", "reserved_count", (sql))

sort_key: Bidang-bidang yang digunakan untuk sorting. Anda dapat menentukan beberapa bidang. Gunakan tanda plus (+) untuk urutan menaik dan tanda minus (-) untuk urutan menurun. Nilai default-nya adalah urutan menaik. Parameter ini tidak boleh kosong.

reserved_count: Jumlah catatan yang dipertahankan dalam setiap kelompok.

sql: Pernyataan SQL yang akan diurutkan.

Perbedaan antara sortTvf dan rankTvf: Fungsi sortTvf mengubah urutan baris dari pernyataan SQL asli.

Contoh:

select * from table (
  sortTvf('-size','3', (SELECT brand, size FROM phone))
)

topKTvf

Fungsi topKTvf menyediakan fitur TopK lokal. Misalnya, Anda dapat melakukan sorting dan mengambil hasil TopK pada searcher node sebelum melakukan join. Jika Anda menggunakan klausa ORDER BY, operasi tersebut akan di-push ke QRS node untuk join, dan ORDER BY akan melakukan sorting global. Sintaksnya adalah sebagai berikut:

topKTvf("sort_key", "reserved_count", (sql))

sort_key: Bidang-bidang yang digunakan untuk sorting. Anda dapat menentukan beberapa bidang. Gunakan tanda plus (+) untuk urutan menaik dan tanda minus (-) untuk urutan menurun. Nilai default-nya adalah urutan menaik. Parameter ini tidak boleh kosong.

reserved_count: Jumlah catatan yang dipertahankan dalam setiap kelompok.

sql: Pernyataan SQL yang akan diurutkan.

Perbedaan antara topKTvf dan sortTvf: Set hasil akhir tidak terurut.

Contoh:

select * from table (
  topKTvf('-size','3', (SELECT brand, size FROM phone))
)

enableShuffleTvf

Fungsi enableShuffleTvf memaksa TVF luar untuk dijalankan pada QRS node. Sebagai contoh, rankTvf secara default dapat di-push down ke searcher node. Jika pernyataan SQL di dalam rankTvf memuat enableShuffleTvf, maka rankTvf hanya akan dijalankan pada QRS node. Sintaksnya adalah sebagai berikut:

enableShuffleTvf((sql))

Contoh:

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