Catatan penggunaan untuk user-defined functions (UDFs).
Daftar UDF
Function | Deskripsi |
Memeriksa apakah nilai bidang termasuk dalam himpunan yang ditentukan. Mendukung bidang bernilai tunggal dan bernilai ganda. | |
Memeriksa apakah nilai bidang tidak termasuk dalam himpunan yang ditentukan. Mendukung bidang bernilai tunggal dan bernilai ganda. | |
Menanyakan indeks terbalik dari bidang tertentu berdasarkan kondisi yang ditentukan. | |
Menanyakan indeks terbalik berdasarkan kondisi yang ditentukan, menggunakan sintaks kueri HA3 asli. | |
Menggabungkan beberapa nilai INT64 menjadi satu nilai INT64. | |
Memetakan nilai bidang berdasarkan rentang. | |
Memeriksa apakah nilai bidang termasuk dalam interval tertentu. | |
Menormalisasi nilai bidang. |
Contoh kueri
Kueri seluruh data dalam tabel
SELECT nid, price, brand, size FROM phone ORDER BY nid LIMIT 1000 USE_TIME: 0.881, ROW_COUNT: 10
------------------------------- TABLE INFO ---------------------------
nid | price | brand | size |
1 | 3599 | Huawei | 5.9 |
2 | 4388 | Huawei | 5.5 |
3 | 899 | Xiaomi | 5 |
4 | 2999 | OPPO | 5.5 |
5 | 1299 | Meizu | 5.5 |
6 | 169 | Nokia | 1.4 |
7 | 3599 | Apple | 4.7 |
8 | 5998 | Apple | 5.5 |
9 | 4298 | Apple | 4.7 |
10 | 5688 | Samsung | 5.6 |contain
Prototipe
boolean contain(INT a, const string b) boolean contain(LITERAL a, const string b) boolean contain(INT_ARRAY a, const string b) boolean contain(LITERAL_ARRAY a, const string b)Deskripsi
Memeriksa apakah bidang bernilai tunggal atau bernilai ganda a berisi konten yang dijelaskan dalam b.
Parameter
Parameter a: Input bertipe INT, LITERAL, INT_ARRAY, atau LITERAL_ARRAY.
Parameter b: Ekspresi string konstan, dipisahkan oleh
|, yang menunjukkan bahwa pencocokan dengan salah satu item sudah cukup.Nilai kembali
Nilai boolean yang menunjukkan apakah parameter a berisi himpunan yang dijelaskan dalam parameter b.
Contoh
SELECT nid, price, brand, size FROM phone WHERE contain(nid, '1|2|3') ORDER BY nid LIMIT 100USE_TIME: 0.059, ROW_COUNT: 3
------------------------------- TABLE INFO ---------------------------
nid | price | brand | size |
1 | 3599 | Huawei | 5.9 |
2 | 4388 | Huawei | 5.5 |
3 | 899 | Xiaomi | 5 |notcontain
Prototipe
boolean notcontain(INT a, const string b) boolean notcontain(LITERAL a, const string b) boolean notcontain(INT_ARRAY a, const string b) boolean notcontain(LITERAL_ARRAY a, const string b)Deskripsi
Memeriksa apakah bidang bernilai tunggal atau bernilai ganda a tidak termasuk dalam konten yang dijelaskan dalam b.
Parameter
Parameter a: Input bertipe INT, LITERAL, INT_ARRAY, atau LITERAL_ARRAY.
Parameter b: Ekspresi string konstan, dipisahkan oleh
|, yang menunjukkan bahwa tidak ada item yang boleh cocok.Nilai kembali
Nilai boolean yang menunjukkan apakah parameter a tidak termasuk dalam himpunan yang dijelaskan dalam parameter b.
Contoh
Gunakan notcontain untuk mengambil semua catatan yang nilai bidang
nid-nya tidak termasuk dalam rentang [1,2,3].SELECT nid, price, brand, size FROM phone WHERE notcontain(nid, '1|2|3') ORDER BY nid LIMIT 100USE_TIME: 0.092, ROW_COUNT: 7 ------------------------------- TABLE INFO --------------------------- nid | price | brand | size | 4 | 2999 | OPPO | 5.5 | 5 | 1299 | Meizu | 5.5 | 6 | 169 | Nokia | 1.4 | 7 | 3599 | Apple | 4.7 | 8 | 5998 | Apple | 5.5 | 9 | 4298 | Apple | 4.7 | 10 | 5688 | Samsung | 5.6 |
MATCHINDEX
Prototipe
boolean MATCHINDEX(const string a, const string b)Deskripsi
Memeriksa apakah bidang a berisi konten yang dijelaskan dalam b, untuk pengambilan indeks bidang tunggal.
Hanya digunakan untuk optimisasi percepatan indeks terbalik selama fase pengambilan tabel indeks, dalam kondisi WHERE.
Parameter
Parameter a: Input bertipe string konstan, sesuai dengan bidang tempat optimisasi indeks terbalik dibangun.
Parameter b: Input bertipe string konstan, yang isinya merupakan deskripsi string.
Parameter b dapat ditanyakan sebagai string tunggal.
Nilai kembali
Nilai boolean yang menunjukkan apakah bidang a berisi konten yang dijelaskan dalam parameter b.
Contoh
Gunakan
MATCHINDEXuntuk mengambil catatan yang bidang indeks terbaliknyatitleberisi kata kunci "lens".SELECT nid, brand FROM phone WHERE MATCHINDEX('title', 'lens')------------------------------- TABLE INFO --------------------------- nid | brand | 1 | Huawei |
QUERY
Prototipe
boolean QUERY(const string a, const string b)Deskripsi
Memeriksa apakah bidang a berisi konten yang dijelaskan dalam b, menyediakan kemampuan tokenisasi dan pengambilan otomatis.
Digunakan untuk mendukung sintaks kueri asli mesin HA3 (sintaks kueri HA3) dalam mode SQL.
Hanya digunakan untuk optimisasi percepatan indeks terbalik selama fase pengambilan tabel indeks, dalam kondisi WHERE.
Parameter
Parameter a: Input bertipe string konstan, yang digunakan sebagai bidang indeks default.
Parameter b: Input bertipe string konstan, yang isinya merupakan deskripsi string.
Ini ditambahkan ke penguraian kueri dan dapat digunakan untuk indeks rentang.
Nilai kembali
Nilai boolean yang menunjukkan apakah bidang a berisi konten yang dijelaskan dalam parameter b.
Contoh
Gunakan
QUERYuntuk menanyakan entri yangtitle-nya berisi "Huawei phone".
SELECT nid, price, brand, size FROM phone WHERE QUERY(title, 'Huawei phone')USE_TIME: 0.034, ROW_COUNT: 1
------------------------------- TABLE INFO ---------------------------
nid | price | brand | size |
2 | 4388 | Huawei | 5.5 |Gunakan kondisi gabungan untuk mengambil entri yang title-nya berisi "Huawei phone" atau "OPPO phone".
SELECT nid, price, brand, size FROM phone
WHERE QUERY(title, 'Huawei phone OR OPPO phone')USE_TIME: 0.03, ROW_COUNT: 2
------------------------------- TABLE INFO ---------------------------
nid | price | brand | size |
2 | 4388 | Huawei | 5.5 |
4 | 2999 | OPPO | 5.5 |Catatan:
Parameter kedua dari UDF QUERY diurai oleh parser sintaks kueri HA3. Dalam sintaks kueri HA3, ketika parameter kedua adalah string konstan, perhatikan bahwa tanda petik tunggal di awal dan akhir harus dihilangkan saat dilewatkan ke kueri HA3. Misalnya, QUERY(title, 'Huawei phone OPPO phone') setara dengan kueri HA3 query=Huawei phone OPPO phone. Jika Anda perlu menambahkan tanda kutip di dalam deskripsi kueri, seperti string kueri HA3 query='Huawei phone' AND 'OPPO phone', bentuk ekuivalennya dalam UDF QUERY adalah QUERY(title, '''Huawei phone'' AND ''OPPO phone'''). Untuk catatan penggunaan tentang string konstan dalam deskripsi SQL, lihat bagian 'Constant strings' di [Limits].
Kesalahan umum:
Jenis kesalahan | Bentuk salah | Bentuk benar |
Kesalahan sintaks, kueri tidak mengembalikan hasil | QUERY('pidvid','123:456') | QUERY('pidvid','"123:456"') |
rangevalue
Prototipe
float rangevalue(float v, string desc)Deskripsi
Memetakan nilai kontinu ke nilai diskrit.
Parameter
Parameter v: Kolom nilai kontinu.
Parameter desc: Aturan pemetaan.
Nilai kembali
Nilai diskrit setelah pemetaan.
Contoh
Gunakan rangevalue untuk memetakan nilai
price: nilai kurang dari atau sama dengan 1000 dipetakan ke 1,0; nilai lebih dari 1000 dan kurang dari atau sama dengan 5000 dipetakan ke 2,0; dan nilai lainnya tetap menggunakan harga asli.SELECT rangevalue(price,'(,1000]:1.0;(1000,5000]:2.0') FROM phone;
range
Prototipe
boolean range(INT v, const string rangeDesc) boolean range(FLOAT v, const string rangeDesc) boolean range(DOUBLE v, const string rangeDesc)Deskripsi
Memeriksa apakah nilai bidang indeks maju berada dalam suatu interval.
Parameter
Parameter v: Suatu bidang. Tipe numerik bernilai tunggal didukung.
Parameter rangeDesc: Konstanta yang menjelaskan interval rentang numerik. Interval terbuka, tertutup, dan semi-terbuka didukung.
Nilai kembali
Memeriksa apakah v berada dalam rentang yang dijelaskan oleh rangeDesc. Tabel berikut mencantumkan notasi yang didukung beserta nilai kembalinya.
Contoh notasi pemanggilan | Nilai kembali |
range(v, "[0, 100]") | 0<=v<=100 |
range(v, "(0, 100)") | 0<v<100 |
range(v, "[0, 100)") | 0<=v<100 |
range(v, "(0, 100]") | 0<v<=100 |
range(v, "(0,)") range(v, "(0,]") | 0<v |
range(v, "[0,)") range(v, "[0,]") | 0<=v |
range(v, "(,100)") range(v, "[,100)") | v<100 |
range(v, "(,100]") range(v, "[,100]") | v<=100 |
range(v, "(,)") range(v, "[,]") range(v, "[,)") range(v, "(,]") | true |
Catatan: rangeDesc juga mendukung simbol "!" di awal baris untuk meniadakan interval yang dimaksud.
Contoh
Gunakan
rangeSELECT nid FROM phone where range(price,"(127.0,30.0)") SELECT nid FROM phone where range(price,"!(127.0,30.0)")Catatan: range adalah kata kunci yang dicadangkan dalam SQL dan harus di-escape.
normalizescore
Prototipe
double normalizescore(INT v, const double defaultScore) double normalizescore(FLOAT v, const double defaultScore) double normalizescore(DOUBLE v, const double defaultScore)Deskripsi
Menormalisasi bidang input v dan mengonversinya ke tipe double. Jika telah diinisialisasi, nilai asli dikembalikan; jika belum diinisialisasi, defaultScore dikembalikan.
Parameter
Parameter v: Suatu bidang. Tipe numerik bernilai tunggal didukung.
Parameter defaultScore: Deskripsi konstan yang harus berupa string yang dapat dikonversi ke tipe double yang valid.
Nilai kembali
Jika v telah diinisialisasi, nilai asli dikembalikan; jika belum diinisialisasi, defaultScore dikembalikan.
Contoh
Untuk 3 dokumen yang memiliki bidang price, konten aslinya sebagai berikut:
doc1: price=1.0
doc2: price= (belum diinisialisasi)
doc3: price=2.0
Jalankan
select normalizescore(price, "1000.0") as normalized_score from phone
USE_TIME: 32.141ms, ROW_COUNT: 2
------------------------------- TABLE INFO ---------------------------
normalized_score(double) |
1.0 |
1000.0 |
2.0. |