Untuk membantu pengguna yang tidak terbiasa dengan SQL dalam menganalisis data di database, PolarDB for AI menyediakan model AI proprietary untuk terjemahan Natural Language to SQL berbasis Large Language Model (LLM-based NL2SQL). Model ini telah terpasang dan siap digunakan. Dibandingkan metode Natural Language to SQL (NL2SQL) tradisional, model LLM-based NL2SQL menawarkan pemahaman bahasa yang lebih kuat. Pernyataan SQL yang dihasilkannya mendukung lebih banyak fungsi, seperti aritmetika tanggal, serta mampu memahami pemetaan sederhana, misalnya valid->isValid=1. Setelah Anda melakukan penyesuaian, model ini juga dapat memahami pola SQL umum Anda, contohnya secara default menggunakan datastatus=1 dalam kondisi.
Demo
/*polar4ai*/SELECT * FROM PREDICT (MODEL _polar4ai_nl2sql, SELECT 'Filter untuk 2 siswa dengan ketidakhadiran terbanyak, urutkan berdasarkan jumlah ketidakhadiran secara menurun, dan tampilkan nama serta jumlah ketidakhadiran mereka.') WITH (basic_index_name='schema_index');Output: SELECT s.student_name, COUNT(sc.id) AS leave_count FROM students s JOIN student_courses sc ON s.id = sc.student_id WHERE sc.status = 0 GROUP BY s.student_name ORDER BY leave_count DESC LIMIT 2;
Proses end-to-end untuk terjemahan bahasa alami ke SQL
Untuk membantu Anda menerapkan aplikasi NL2SQL secara efisien, proses ini dibagi menjadi tiga fase: Peluncuran Cepat, Optimasi dan Fine-tuning, serta Penyebaran Produksi.
Peluncuran Cepat: Fase ini membantu Anda membangun kemampuan NL2SQL dasar dengan cepat sejak awal.
Optimasi dan Fine-tuning: Kami menyediakan optimasi mendalam untuk mengatasi masalah spesifik dalam skenario bisnis aktual.
Penyebaran Produksi: Fase ini memastikan sistem NL2SQL dapat diterapkan dengan lancar ke lingkungan produksi.
Prasyarat
Tambahkan node AI dan atur akun database untuk menghubungkannya ke node AI tersebut. Untuk informasi selengkapnya, lihat Aktifkan fitur PolarDB for AI.
CatatanJika Anda telah menambahkan node AI saat membeli kluster, Anda dapat langsung mengatur akun database untuk node AI tersebut.
Akun database untuk node AI harus memiliki izin Read and Write agar dapat membaca dari dan menulis ke database target.
Hubungkan ke kluster PolarDB menggunakan cluster endpoint. Untuk informasi selengkapnya, lihat Masuk ke PolarDB for AI.
PentingSaat menghubungkan ke kluster melalui command line, tambahkan opsi
-c.Saat menggunakan fitur PolarDB for AI di Data Management (DMS), DMS secara default menghubungkan ke kluster PolarDB menggunakan Primary Endpoint. Hal ini mencegah pernyataan SQL diarahkan ke node AI. Anda harus mengubah endpoint koneksi secara manual ke Cluster Endpoint.
Catatan penggunaan
Cara mengajukan pertanyaan: Dalam pertanyaan Anda, nyatakan secara jelas kondisi dan nilai entitas terkait. Tempatkan kondisi terlebih dahulu, diikuti oleh entitas untuk nilai kolom yang Anda cari, lalu nama kolom yang mungkin sesuai. Contoh:
SELECT 'Apa nama properti dari "rumah" atau "apartemen" yang memiliki lebih dari satu kamar?'Di sini, dengan lebih dari satu kamar adalah kondisi, rumah dan apartemen adalah entitas yang sesuai dengan nilai kolom, dan nama properti adalah nama kolom yang mungkin sesuai.
Akurasi hasil kueri: LLM-based NL2SQL adalah model AI berbasis model bahasa besar, dan performanya dipengaruhi oleh berbagai faktor. Untuk memastikan hasil kueri sesuai harapan, pertimbangkan faktor-faktor berikut yang dapat memengaruhi akurasi keseluruhan:
Kelengkapan komentar tabel dan kolom: Menambahkan komentar pada setiap tabel dan kolomnya meningkatkan akurasi kueri.
Kesesuaian antara pertanyaan pengguna dan komentar kolom dalam tabel: Semakin dekat kesesuaian semantik antara kata kunci dalam pertanyaan pengguna dan komentar kolom, semakin baik performa kueri.
Panjang pernyataan SQL yang dihasilkan: Kueri lebih akurat jika pernyataan SQL melibatkan lebih sedikit kolom dan memiliki kondisi yang lebih sederhana.
Kompleksitas logis pernyataan SQL: Semakin sedikit sintaks lanjutan yang digunakan dalam pernyataan SQL, semakin akurat kueri tersebut.
Petunjuk
Standarisasi tabel data
Prasyarat untuk NL2SQL adalah model harus memahami makna tabel Anda, termasuk apa yang diwakili oleh nama kolom. Sebelum menggunakan LLM-based NL2SQL, Anda harus menambahkan komentar pada tabel data yang sering digunakan beserta kolom-kolomnya.
Komentar tabel
Komentar tabel membantu model LLM-based NL2SQL lebih memahami informasi dasar suatu tabel, sehingga memudahkan model menemukan tabel yang terlibat dalam pernyataan SQL. Komentar harus memberikan gambaran singkat dan jelas tentang isi utama tabel, seperti pesanan atau inventaris. Batasi komentar hingga 10 karakter dan hindari penjelasan berlebihan.
Komentar kolom
Komentar kolom biasanya berupa kata benda umum atau frasa, seperti ID pesanan, tanggal, atau nama toko. Komentar ini harus secara akurat mencerminkan makna nama kolom. Anda juga dapat menambahkan data sampel atau pemetaan ke dalam komentar kolom. Misalnya, untuk kolom bernama
isValid, komentarnya dapat berupaMenunjukkan apakah valid atau tidak. 0: Tidak. 1: Ya..
Jika Anda tidak dapat mengubah komentar asli, Anda dapat menggunakan fitur komentar tabel dan kolom kustom pada bagian penggunaan lanjutan untuk menyesuaikan komentar tersebut. Untuk informasi selengkapnya, lihat Penggunaan lanjutan - Sesuaikan komentar tabel dan kolom.
Persiapan data
Anda dapat menyiapkan set data uji berdasarkan skenario bisnis Anda. Topik ini menggunakan set data uji berikut: test_dataset.sql.
Buat tabel indeks pencarian
Untuk mengekstraksi data dari tabel data, Anda harus membuat tabel indeks pencarian. Anda dapat menggunakan nama tabel kustom yang sesuai dengan spesifikasi database. Topik ini menggunakan
schema_indexsebagai contoh. Pernyataan SQL untuk membuat tabel indeks pencarian adalah sebagai berikut:/*polar4ai*/CREATE TABLE schema_index(id integer, table_name varchar, table_comment text_ik_max_word, table_ddl text_ik_max_word, column_names text_ik_max_word, column_comments text_ik_max_word, sample_values text_ik_max_word, vecs vector_768, ext text_ik_max_word, PRIMARY KEY (id));CatatanTabel indeks pencarian tidak ditampilkan secara langsung di database. Untuk melihat informasi terkait, Anda dapat menjalankan pernyataan SQL
/*polar4ai*/SHOW TABLES;.Untuk menghapus tabel indeks pencarian, misalnya
schema_index, Anda dapat menjalankan pernyataan SQL/*polar4ai*/DROP TABLE IF EXISTS schema_index;.
Impor data dari tabel data ke tabel indeks pencarian
Setelah menjalankan pernyataan SQL berikut, PolarDB for AI melakukan vektorisasi pada semua tabel di database saat ini dan secara default mengambil sampel nilai kolom.
/*polar4ai*/SELECT * FROM PREDICT (MODEL _polar4ai_text2vec, SELECT '') WITH (mode='async', resource='schema') INTO schema_index;Deskripsi parameter
_polar4ai_text2vecadalah model teks-ke-vektor.Setelah
INTO, tentukan nama tabel indeks pencarian yang Anda buat di Langkah 1. Buat tabel indeks pencarian.Anda dapat mengonfigurasi beberapa parameter dalam
WITH()untuk mengatur perilaku terkait:Parameter
Wajib
Deskripsi
mode
Ya
Mode penulisan data. Nilainya tetap `async` untuk mode asinkron.
resource
Ya
Jenis resource. Nilainya tetap `schema` untuk melakukan vektorisasi informasi tabel.
tables_included
Tidak
Tabel yang akan divectorisasi.
Nilai default adalah
'', yang berarti melakukan vektorisasi pada semua tabel. Untuk menentukan beberapa tabel, pisahkan nama tabel dengan koma (,) dan gabungkan menjadi string.to_sample
Tidak
Menentukan apakah akan mengambil sampel nilai kolom. Mengambil sampel nilai kolom meningkatkan waktu impor data ke tabel indeks pencarian, tetapi meningkatkan kualitas SQL yang dihasilkan jika tabel memiliki sedikit kolom (kurang dari 15). Nilai yang valid:
0 (default): Tidak mengambil sampel nilai kolom.
1: Mengambil sampel nilai kolom.
columns_excluded
Tidak
Kolom yang dikecualikan dari operasi LLM-based NL2SQL.
Nilai default adalah
''. Ini berarti semua kolom di semua tabel yang digunakan untuk konversi vektor berpartisipasi dalam operasi LLM-based NL2SQL selanjutnya. Untuk mengatur parameter ini, Anda perlu menggabungkan kolom-kolom di tabel yang dipilih yang tidak berpartisipasi dalam operasi LLM-based NL2SQL selanjutnya menjadi string dengan formattable_name1.column_name1,table_name1.column_name2,table_name2.column_name1.Contoh: Pernyataan SQL berikut melakukan vektorisasi pada tabel
graph_info,image_info, dantext_infodi database saat ini dan mengambil sampel nilai kolom. Kolomtimedi tabelgraph_infodan kolomextdi tabeltext_infodikecualikan dari operasi LLM-based NL2SQL selanjutnya./*polar4ai*/SELECT * FROM PREDICT (MODEL _polar4ai_text2vec, SELECT '') WITH (mode='async', resource='schema', tables_included='graph_info,image_info,text_info', to_sample=1, columns_excluded='graph_info.time,text_info.ext') INTO schema_index;
Periksa status tugas
Setelah menjalankan pernyataan untuk mengimpor data ke tabel indeks pencarian,
task_iduntuk tugas tersebut dikembalikan, misalnyabce632ea-97e9-11ee-bdd2-492f4dfe0918. Anda dapat menggunakan perintah berikut untuk memeriksa status impor. Saat nilai kembali adalahfinish, tugas telah selesai./*polar4ai*/SHOW TASK `bce632ea-97e9-11ee-bdd2-492f4dfe0918`;Anda dapat menjalankan pernyataan SQL berikut untuk melihat informasi indeks pencarian:
/*polar4ai*/SELECT * FROM schema_index;
Gunakan LLM-based NL2SQL online
Sintaks
/*polar4ai*/SELECT * FROM PREDICT (MODEL _polar4ai_nl2sql, SELECT '<question>') WITH (basic_index_name='<basic_index_name>');Deskripsi parameter
Setelah
<question>, masukkan pertanyaan yang ingin Anda ubah menjadi pernyataan SQL. Tabel berikut menunjukkan beberapa contoh pertanyaan yang direkomendasikan:Skenario contoh ini
Skenario lain
Urutkan berdasarkan nama guru secara alfabetis menaik, dan tampilkan nama guru serta nama mata pelajaran yang mereka ajarkan.
Filter untuk 2 siswa dengan ketidakhadiran terbanyak, urutkan berdasarkan jumlah ketidakhadiran secara menurun, dan tampilkan nama serta jumlah ketidakhadiran mereka.
Kueri nama dan lokasi mata pelajaran yang dimulai antara 1 Oktober 2023 dan 3 Oktober 2023.
Hitung jumlah mata pelajaran yang diambil setiap siswa, filter untuk siswa yang mengambil lebih dari 2 mata pelajaran, dan tampilkan nama serta jumlah mata pelajaran mereka dalam urutan menurun berdasarkan jumlah mata pelajaran.
Filter untuk siswa yang alamatnya mengandung "Beijing" atau "Shanghai" dan tampilkan nama serta nomor telepon mereka.
Apa ID, peran, dan nama ahli yang telah melakukan dua atau lebih perawatan?
Apa nama ras anjing yang paling banyak dipelihara?
Pemilik mana yang paling banyak membayar untuk perawatan anjingnya? Cantumkan ID dan nama belakang pemilik.
Beritahu saya ID dan nama belakang pemilik yang paling banyak menghabiskan uang untuk perawatan anjingnya.
Apa deskripsi jenis perawatan dengan total biaya terendah?
Anda dapat mengonfigurasi beberapa parameter dalam
WITH()untuk mengatur perilaku terkait:Nama parameter
Wajib
Deskripsi
basic_index_name
Ya
Nama tabel indeks pencarian di database saat ini.
to_optimize
Tidak
Menentukan apakah akan melakukan optimasi SQL. Nilai yang valid:
0 (default): Tidak ada optimasi.
1: Melakukan optimasi SQL. PolarDB for AI memproses lebih lanjut pernyataan SQL yang dihasilkan agar lebih optimal.
basic_index_top
Tidak
Jumlah tabel paling mirip yang diambil. Nilai yang valid: [1,10].
Nilai default adalah 3, yang memilih 3 tabel paling optimal untuk pertanyaan saat ini. Pengaturan 1 biasanya sudah cukup.
Jika melibatkan beberapa tabel, Anda dapat mengatur nilai ini ke 4 atau lebih tinggi untuk memperluas pengambilan dan meningkatkan hasil.
basic_index_threshold
Tidak
Ambang batas yang digunakan untuk menentukan kesamaan tabel yang diambil. Nilai yang valid: (0,1].
Nilai default adalah 0,1. Tabel database dipilih hanya jika skor kecocokan vektornya melebihi 0,1.
Contoh
Tampilkan konten tertentu dan urutkan dalam urutan yang ditentukan.
/*polar4ai*/SELECT * FROM PREDICT (MODEL _polar4ai_nl2sql, SELECT 'Urutkan berdasarkan nama guru secara alfabetis menaik, dan tampilkan nama guru serta nama mata pelajaran yang mereka ajarkan.') WITH (basic_index_name='schema_index');SELECT t.teacher_name, c.course_name FROM teachers t JOIN courses c ON t.id = c.teacher_id ORDER BY t.teacher_name ASC;Cari berdasarkan kondisi tertentu, tampilkan konten yang memenuhi kondisi, dan urutkan dalam urutan yang ditentukan.
/*polar4ai*/SELECT * FROM PREDICT (MODEL _polar4ai_nl2sql, SELECT 'Filter untuk 2 siswa dengan ketidakhadiran terbanyak, urutkan berdasarkan jumlah ketidakhadiran secara menurun, dan tampilkan nama serta jumlah ketidakhadiran mereka.') WITH (basic_index_name='schema_index');SELECT s.student_name, COUNT(sc.id) AS leave_count FROM students s JOIN student_courses sc ON s.id = sc.student_id WHERE sc.status = 0 GROUP BY s.student_name ORDER BY leave_count DESC LIMIT 2;
Penggunaan lanjutan
PolarDB for AI menyediakan empat metode penggunaan lanjutan. Jika Anda mengalami masalah berikut, Anda dapat merujuk ke petunjuk penggunaan lanjutan yang sesuai untuk mengatasinya.
Konfigurasikan templat pertanyaan: Konfigurasikan templat pertanyaan umum untuk memungkinkan model menghasilkan pernyataan SQL berdasarkan pengetahuan spesifik.
Buat tabel konfigurasi: Pra-proses pertanyaan atau pasca-proses pernyataan SQL yang dihasilkan.
Sesuaikan komentar tabel dan kolom: Jika komentar tabel atau kolom asli tidak dapat diubah, Anda dapat menambahkan komentar baru untuk tabel dan kolomnya guna menimpa komentar asli.
Dukungan tabel lebar: Saat tabel memiliki terlalu banyak kolom atau Anda menerima error
Please use column index to avoid oversize table information., Anda dapat membuat tabel indeks kolom untuk mengaktifkan dukungan model terhadap tabel lebar.
Konfigurasikan templat pertanyaan
Templat pertanyaan dibuat untuk pengetahuan domain spesifik dan membantu model lebih memahami pertanyaan saat ini. Anda dapat mengonfigurasi templat pertanyaan umum untuk memandu model dengan pengetahuan spesifik, sehingga memungkinkannya menghasilkan pernyataan SQL berdasarkan pengetahuan tersebut.
Petunjuk
Buat tabel templat pertanyaan
Nama tabel templat pertanyaan harus diawali dengan
polar4ai_nl2sql_pattern, dan skemanya harus mencakup lima kolom dari pernyataan `CREATE TABLE` berikut.DROP TABLE IF EXISTS `polar4ai_nl2sql_pattern`; CREATE TABLE `polar4ai_nl2sql_pattern` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Primary key', `pattern_question` text COMMENT 'Template question', `pattern_description` text COMMENT 'Template description', `pattern_sql` text COMMENT 'Template SQL', `pattern_params` text COMMENT 'Template parameters', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;Deskripsi kolom templat pertanyaan
Nama kolom
Deskripsi
Template question
Pertanyaan dengan parameter, disediakan sebagai input ke model LLM-based NL2SQL.
Dalam templat pertanyaan, tulis parameter dalam format
#{XXX}.Template description
Rangkuman templat pertanyaan, dengan beberapa entitas sebagai parameter, seperti tanggal, tahun, atau organisasi. Entitas ini biasanya sesuai dengan kolom tertentu di tabel.
Dalam deskripsi templat, tulis parameter dalam format
[XXX], dan urutannya harus sama dengan parameter dalam templat pertanyaan.Template SQL
Pernyataan SQL yang benar sesuai dengan templat pertanyaan. Pernyataan SQL ini harus memperlakukan parameter dari templat pertanyaan sebagai variabel.
CatatanParameter dalam templat pertanyaan dan templat SQL dapat berbeda, tetapi harus saling terkait. Misalnya, parameter harus memiliki awalan yang sama, dan nilainya harus memiliki pemetaan satu-ke-satu. Untuk
#{category}dan#{categoryCode}, jika nilai parameter untukcategoryadalah common trademark, special trademark, dan collective trademark, maka nilaicategoryCodeyang sesuai adalah 0, 1, dan 2. Untuk informasi selengkapnya, lihat contoh di bawah.Template parameters
Parameter templat adalah string JSON dengan struktur yang terdiri dari tiga parameter:
table_name,param_info, danexplanation. Parameter-parameter tersebut adalah sebagai berikut:table_name
string: Nama tabel dalam templat SQL.param_info
array: Deskripsi parameter dalam templat SQL.param_name
string: Nama parameter.value
array: Nilai sampel untuk parameter.CatatanJika parameter sesuai dengan himpunan nilai enumerasi terbatas, cantumkan semua nilai dalam value.
Jika hanya nilai sampel, Anda dapat mencantumkan 2 hingga 4 nilai.
Jika ada parameter yang saling berkaitan, Anda perlu memetakannya menggunakan indeks array. Untuk
#{category}dan#{categoryCode}, "common trademark" dalamcategorysesuai dengan 0 dalamcategoryCode, dan "special trademark" sesuai dengan 2 dalamcategoryCode. Untuk informasi selengkapnya, lihat contoh di bawah.
explanation
string: Informasi tambahan. Biasanya mencakup persyaratan untuk pernyataan SQL yang dihasilkan, seperti informasi apa yang harus ditampilkan atau deskripsi bidang.
CatatanJika Anda tidak perlu menentukan parameter templat, Anda dapat mengatur nilai parameter templat ke salah satu berikut:
NULL
String kosong
String daftar kosong []
Contoh
Template question
Template description
Template SQL
Template parameters
Query for courses with course name #{courseName} and status #{status}
What are the courses with [Course Name] and [Status]?
SELECT course_name, course_time, course_location FROM courses WHERE course_name=#{courseName} AND status=#{statusCode}[{"table_name":"courses","param_info":[{"param_name":"#{courseName}","value":["Mathematics","Physics","Chemistry","English","History","Geography","Biology","Computer Science","Art","Music","Physical Education","Programming","Literature","Psychology","Philosophy","Economics","Sociology","Physics Lab","Chemistry Lab","Biology Lab"]},{"param_name": "#{status}", "value": ["Not started","In progress"]},{"param_name": "#{statusCode}","value": [0,1]}], "explanation": "Output the course name (course_name), course time (course_time), and course location (course_location). Note: status is a constant mapping type. The variable mapping field is statusCode."}]
What are the national standards planned for release in the year #{issueDate} for projects with the status #{projectStat}?
What are the national standards planned for release in [Year] for projects with [Project Status]?
SELECT DISTINCT planNum, projectCnName, projectStat FROM sy_cd_me_buss_std_gjbzjh WHERE `planNum` IS NOT NULL AND `dataStatus` != 3 AND `isValid` = 1 AND projectStat=#{projectStat} AND DATE_FORMAT(`issueDate`, '%Y')=#{issueDate}[{"table_name":"sy_cd_me_buss_std_gjbzjh","param_info":[{"param_name":"#{issueDate}","value":[2009,2010,2011,2012]},{"param_name":"#{projectStat}","value":["Seeking comments","Published","Under review"]}],"explanation":"Output the standard name (projectCnName), plan number, and project status"}]
What are the trademarks of type #{category} and international classification #{intCls}?
What are the trademarks of [Trademark Type] and [International Classification]?
SELECT DISTINCT tmName, regNo, status FROM sy_cd_me_buss_ip_tdmk_new WHERE dataStatus!=3 AND isValid = 1 AND category=#{categoryCode} AND intCls=#{intClsCode}[{"table_name":"sy_cd_me_buss_ip_tdmk_new","param_info":[{"param_name":"#{intCls}","value":["Chemical raw materials","Paints and varnishes","Cosmetics and cleaning preparations","Industrial oils and greases","Pharmaceuticals"]},{"param_name":"#{category}","value":["Common trademark","Special trademark","Collective trademark"]},{"param_name":"#{intClsCode}","value":[1,2,3,4,5]},{"param_name":"#{categoryCode}","value":[0,1,2]}],"explanation":"Output the trademark name (tmName), application/registration number (regNo), and trademark status (status). Note: category is a constant mapping type. The variable mapping field is categoryCode. intCls is a constant mapping type. The variable mapping field is intClsCode."}]
Menggunakan skenario dalam topik ini sebagai contoh, buat templat pertanyaan pertama dalam tabel di atas. Jalankan pernyataan SQL berikut:
INSERT INTO `polar4ai_nl2sql_pattern` (`pattern_question`,`pattern_description`,`pattern_sql`,`pattern_params`) VALUES ('Query for courses with course name #{courseName} and status #{status}','What are the courses with [Course Name] and [Status]?','SELECT course_name, course_time, course_location FROM courses WHERE course_name=#{courseName} AND status=#{statusCode}','[{"table_name":"courses","param_info":[{"param_name":"#{courseName}","value":["Mathematics","Physics","Chemistry","English","History","Geography","Biology","Computer Science","Art","Music","Physical Education","Programming","Literature","Psychology","Philosophy","Economics","Sociology","Physics Lab","Chemistry Lab","Biology Lab"]},{"param_name": "#{status}", "value": ["Not started","In progress"]},{"param_name": "#{statusCode}","value": [0,1]}], "explanation": "Output the course name (course_name), course time (course_time), and course location (course_location). Note: status is a constant mapping type. The variable mapping field is statusCode."}]');Buat tabel indeks templat pertanyaan
Anda dapat menggunakan nama tabel indeks kustom yang sesuai dengan spesifikasi database. Topik ini menggunakan
pattern_indexsebagai contoh. Pernyataan SQL untuk membuat tabel indeks templat pertanyaan adalah sebagai berikut:/*polar4ai*/CREATE TABLE pattern_index(id integer, pattern_question text_ik_max_word, pattern_description text_ik_max_word, pattern_sql text_ik_max_word, pattern_params text_ik_max_word, pattern_tables text_ik_max_word, vecs vector_768, PRIMARY KEY (id));CatatanTabel indeks templat pertanyaan tidak ditampilkan secara langsung di database. Untuk melihat informasi terkait, Anda dapat menjalankan pernyataan SQL
/*polar4ai*/SHOW TABLES;.Untuk menghapus tabel indeks templat pertanyaan, misalnya
pattern_index, Anda dapat menjalankan pernyataan SQL/*polar4ai*/DROP TABLE IF EXISTS pattern_index;.
Impor informasi dari tabel templat pertanyaan ke tabel indeks
CatatanTabel templat pertanyaan tidak boleh kosong. Sebelum menjalankan pernyataan SQL untuk mengimpor data ke tabel indeks, Anda harus menambahkan setidaknya satu catatan.
/*polar4ai*/SELECT * FROM PREDICT (MODEL _polar4ai_text2vec, SELECT '') WITH (mode='async', resource='pattern') INTO pattern_index;Deskripsi parameter
_polar4ai_text2vecadalah model teks-ke-vektor.Setelah
INTO, tentukan nama tabel indeks templat pertanyaan yang Anda buat di Langkah 2. Buat tabel indeks templat pertanyaan.Anda dapat mengonfigurasi beberapa parameter dalam
WITH()untuk mengatur perilaku terkait:Parameter
Wajib
Deskripsi
mode
Ya
Mode penulisan data. Nilainya tetap `async` untuk mode asinkron.
resource
Ya
Jenis resource. Nilainya tetap `pattern` untuk melakukan vektorisasi informasi templat pertanyaan.
pattern_table_name
Tidak
Nama tabel templat pertanyaan yang akan divectorisasi. Ini adalah nama tabel dari Langkah 1: Buat tabel templat pertanyaan.
Nilai default adalah
polar4ai_nl2sql_pattern, yang melakukan vektorisasi pada tabelpolar4ai_nl2sql_pattern. Saat mengatur ini, tentukan nama tabel templat pertanyaan yang diawali denganpolar4ai_nl2sql_pattern.Jika Anda ingin mempertahankan tabel indeks templat pertanyaan yang berbeda untuk skenario atau bisnis yang berbeda, Anda dapat menentukan nama tabel yang berbeda saat membuat tabel indeks templat pertanyaan. Misalnya, Anda dapat membuat tabel
polar4ai_nl2sql_pattern_useruntuk skenario terkait pengguna, lalu pada langkah kedua pembuatan indeks templat pertanyaan, atur nama indeks menjadipattern_index_user. Saat mengimpor informasi ke tabel indeks, gunakan pernyataan SQL berikut:/*polar4ai*/SELECT * FROM PREDICT (MODEL _polar4ai_text2vec, SELECT '') WITH (mode='async', resource='pattern', pattern_table_name='polar4ai_nl2sql_pattern_user') INTO pattern_index_user;
Periksa status tugas
Setelah menjalankan pernyataan untuk mengimpor data ke tabel indeks,
task_iduntuk tugas tersebut dikembalikan, misalnyabce632ea-97e9-11ee-bdd2-492f4dfe0918. Anda dapat menggunakan perintah berikut untuk memeriksa status impor./*polar4ai*/SHOW TASK `bce632ea-97e9-11ee-bdd2-492f4dfe0918`;Saat nilai kembali adalah
finish, tugas telah selesai. Informasi templat pertanyaan kemudian dapat dirujuk oleh model. Anda dapat menjalankan pernyataan SQL berikut untuk melihat informasi indeks templat pertanyaan:/*polar4ai*/SELECT * FROM pattern_index;CatatanJika data dalam tabel
polar4ai_nl2sql_patternberubah, Anda harus menjalankan kembali Langkah 3. Impor informasi dari tabel templat pertanyaan ke tabel indeks.Gunakan templat pertanyaan online
Anda dapat menjalankan pernyataan SQL berikut untuk menggunakan LLM-based NL2SQL dan templat pertanyaan secara online:
/*polar4ai*/SELECT * FROM PREDICT (MODEL _polar4ai_nl2sql, SELECT 'Query for courses with the course name Mathematics and status in progress') WITH (basic_index_name='schema_index', pattern_index_name='pattern_index');SELECT course_name, course_time, course_location FROM courses WHERE course_name='Mathematics' AND status=1;Deskripsi parameter
Setelah SELECT, masukkan pertanyaan yang ingin Anda ubah menjadi pernyataan SQL.
basic_index_nameadalah nama tabel indeks pencarian di database saat ini.pattern_index_nameadalah nama tabel indeks templat pertanyaan.Anda dapat mengonfigurasi beberapa parameter dalam
WITH()untuk mengatur perilaku terkait. Untuk informasi selengkapnya tentang parameter lainnya, lihat Gunakan LLM-based NL2SQL online:Nama parameter
Deskripsi parameter
Rentang nilai
pattern_index_top
Jumlah templat pertanyaan paling mirip yang diambil.
Nilai yang valid: [1,10].
Nilai default adalah 2, yang memilih 2 templat paling optimal untuk templat pertanyaan saat ini.
pattern_index_threshold
Ambang batas yang digunakan untuk menentukan kesamaan templat pertanyaan yang diambil.
Nilai yang valid: (0,1].
Nilai default adalah 0,85. Templat pertanyaan dipilih hanya jika skor kecocokan vektornya melebihi 0,85.
Buat tabel konfigurasi
Jika Anda ingin pra-proses pertanyaan atau pasca-proses pernyataan SQL akhir yang dihasilkan, Anda dapat menggunakan tabel konfigurasi.
Skenario
Skenario 1: Ganti kata deterministik dalam pertanyaan, seperti nama, istilah industri, atau nama produk.
Misalnya, untuk semua pertanyaan yang melibatkan
Zhang San, Anda dapat menggantiZhang SandenganZS001. Dalam hal ini, untuk pertanyaanWhat were Zhang San's sales last month?danWhat are Zhang San's total sales this year?, Anda dapat menggunakan tabel konfigurasi untuk pra-prosesnya menjadiWhat were ZS001's sales last month?danWhat are ZS001's total sales this year?sebelum memanggil model bahasa besar.Skenario 2: Tambahkan informasi tambahan ke pertanyaan yang mengandung kata tertentu.
Misalnya, untuk semua pertanyaan yang melibatkan
total sales, Anda dapat menambahkan rumus perhitungan untuktotal sales:Total sales = SUM(sales). Sebelum memanggil model bahasa besar, Anda dapat menggunakan tabel konfigurasi untuk menambahkan informasi jenis ini, yang ditambahkan saat pertanyaan memenuhi kondisi yang sesuai.Skenario 3: Petakan dan ganti nilai untuk tabel atau kolom tertentu.
Misalnya, untuk semua pernyataan SQL akhir yang melibatkan tabel
student_courses, Anda dapat menggantistatus = 'on leave'denganstatus = 0sebagai langkah cadangan untuk pemetaan nilai kolom.
Sintaks
Pernyataan SQL untuk membuat tabel konfigurasi adalah sebagai berikut. Nama tabel polar4ai_nl2sql_llm_config bersifat tetap dan tidak dapat diubah.
DROP TABLE IF EXISTS `polar4ai_nl2sql_llm_config`;
CREATE TABLE `polar4ai_nl2sql_llm_config` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Primary key',
`is_functional` int(11) NOT NULL DEFAULT '1' COMMENT 'Whether it is effective',
`text_condition` text COMMENT 'Text condition',
`query_function` text COMMENT 'Query processing',
`formula_function` text COMMENT 'Formula information',
`sql_condition` text COMMENT 'SQL condition',
`sql_function` text COMMENT 'SQL processing',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;Saat data dalam tabel polar4ai_nl2sql_llm_config berubah, Anda tidak perlu melakukan operasi apa pun. Perubahan tersebut berlaku segera.
Deskripsi parameter
Nama kolom | Deskripsi | Rentang nilai | Contoh |
is_functional | Menunjukkan apakah konfigurasi pada baris ini berlaku. Saat tabel konfigurasi ada, tabel tersebut digunakan secara default untuk setiap operasi NL2SQL. Jika ada item konfigurasi yang tidak ingin Anda gunakan tetapi tidak ingin dihapus, Anda dapat mengatur is_functional ke 0 untuk menonaktifkan konfigurasi untuk baris tersebut. |
|
|
text_condition | Pra-pemrosesan: Melakukan pemeriksaan kondisi teks pada pertanyaan. Jika kondisi terpenuhi, kolom query_function dan formula_function digunakan untuk pemrosesan. Jika tidak, kolom tersebut tidak digunakan. |
| Jika text_condition adalah Misalnya:
|
query_function | Pra-pemrosesan: Memproses pertanyaan. Ini digunakan saat text_condition terpenuhi. |
| Jika query_function diatur ke Misalnya:
|
formula_function | Pra-pemrosesan: Menambahkan rumus perhitungan atau informasi lain yang terkait dengan logika bisnis atau konsep spesifik ke pertanyaan. Ini digunakan saat text_condition terpenuhi. | - | Jika formula_function adalah |
sql_condition | Pasca-pemrosesan: Melakukan pemeriksaan kondisi pada pernyataan SQL yang dihasilkan oleh model. Jika kondisi terpenuhi, sql_function digunakan untuk memproses pernyataan SQL. Jika tidak, tidak digunakan. |
| Jika sql_condition= Misalnya:
|
sql_function | Pasca-pemrosesan: Memproses pernyataan SQL. Ini dapat digunakan untuk menerapkan pemetaan nilai dalam logika bisnis. Ini digunakan saat sql_condition terpenuhi. |
| Jika sql_function= |
Contoh
is_functional | text_condition | query_function | formula_function | sql_condition | sql_function |
1 |
|
| |||
1 |
| ||||
1 |
|
|
Sebelum menambahkan tabel konfigurasi, jalankan pernyataan SQL berikut:
/*polar4ai*/SELECT * FROM PREDICT (MODEL _polar4ai_nl2sql, SELECT 'Filter untuk 2 siswa dengan ketidakhadiran terbanyak, urutkan berdasarkan jumlah ketidakhadiran secara menurun, dan tampilkan nama serta jumlah ketidakhadiran mereka.') WITH (basic_index_name='schema_index');SELECT s.student_name, COUNT(sc.id) AS leave_count FROM students s JOIN student_courses sc ON s.id = sc.student_id WHERE sc.status = 0 GROUP BY s.student_name ORDER BY leave_count DESC LIMIT 2;Buat tabel konfigurasi sesuai dengan Sintaks.
Tambahkan catatan konfigurasi. Jika tabel
studentsatau tabelstudent_coursesada dalam pernyataan SQL, dan tabelcoursestidak ada, gantistatus = 0denganstatus = 10.INSERT INTO `polar4ai_nl2sql_llm_config` (`is_functional`,`sql_condition`,`sql_function`) VALUES (1,'students||student_courses&&!!courses','{"replace":{"status = 0":"status = 10"}}');Jalankan pernyataan SQL dari Langkah 1. Pernyataan SQL yang dihasilkan sekarang memiliki nilai
statusyang diganti./*polar4ai*/SELECT * FROM PREDICT (MODEL _polar4ai_nl2sql, SELECT 'Filter untuk 2 siswa dengan ketidakhadiran terbanyak, urutkan berdasarkan jumlah ketidakhadiran secara menurun, dan tampilkan nama serta jumlah ketidakhadiran mereka.') WITH (basic_index_name='schema_index');SELECT s.student_name, COUNT(sc.id) AS leave_count FROM students s JOIN student_courses sc ON s.id = sc.student_id WHERE sc.status = 10 GROUP BY s.student_name ORDER BY leave_count DESC LIMIT 2;
Sesuaikan komentar tabel dan kolom
Jika Anda menemukan bahwa tidak dapat mengubah komentar tabel data atau kolom yang ada selama proses Standarisasi tabel data, Anda dapat menambahkan komentar baru untuk tabel dan kolomnya di tabel polar4ai_nl2sql_table_extra_info. Saat menggunakan LLM-based NL2SQL, komentar dalam tabel ini akan menimpa komentar asli.
Sintaks
Pernyataan SQL untuk membuat tabel komentar tabel dan kolom kustom adalah sebagai berikut. Nama tabel polar4ai_nl2sql_table_extra_info bersifat tetap dan tidak dapat diubah.
DROP TABLE IF EXISTS `polar4ai_nl2sql_table_extra_info`;
CREATE TABLE `polar4ai_nl2sql_table_extra_info` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Primary key',
`table_name` text COMMENT 'Table name',
`table_comment` text COMMENT 'Table description',
`column_name` text COMMENT 'Column name',
`column_comment` text COMMENT 'Column description',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;Saat data dalam tabel polar4ai_nl2sql_table_extra_info berubah, Anda harus menjalankan kembali langkah untuk mengimpor data dari tabel data ke tabel indeks pencarian agar perubahan dalam tabel polar4ai_nl2sql_table_extra_info berlaku.
Contoh
Buat tabel komentar untuk tabel dan kolom kustom.
Ubah komentar untuk kolom
statusdi tabelstudent_courses. Dalam contoh ini, deskripsi opsi baru ditambahkan untuk kolomstatus: 2-Absent.INSERT INTO `polar4ai_nl2sql_table_extra_info` (`table_name`,`table_comment`,`column_name`,`column_comment`) VALUES ('student_courses','Course and student information table','status','Student status: 0-On leave, 1-Normal, 2-Absent.');Jalankan kembali langkah untuk mengimpor data dari tabel data ke tabel indeks pencarian.
/*polar4ai*/SELECT * FROM PREDICT (MODEL _polar4ai_text2vec, SELECT '') WITH (mode='async', resource='schema') INTO schema_index;Periksa status tugas.
Setelah menjalankan pernyataan untuk mengimpor data ke tabel indeks pencarian,
task_iduntuk tugas tersebut dikembalikan, misalnyabce632ea-97e9-11ee-bdd2-492f4dfe0918. Anda dapat menggunakan perintah berikut untuk memeriksa status impor. SaattaskStatusadalahfinish, tugas telah selesai./*polar4ai*/SHOW TASK `bce632ea-97e9-11ee-bdd2-492f4dfe0918`;Gunakan LLM-based NL2SQL online.
/*polar4ai*/SELECT * FROM PREDICT (MODEL _polar4ai_nl2sql, SELECT 'Filter untuk 2 siswa dengan ketidakhadiran terbanyak, urutkan berdasarkan jumlah ketidakhadiran secara menurun, dan tampilkan nama serta jumlah ketidakhadiran mereka.') WITH (basic_index_name='schema_index');SELECT s.student_name, COUNT(sc.id) AS absence_count FROM student_courses sc JOIN students s ON sc.student_id = s.id WHERE sc.status = 2 GROUP BY s.student_name ORDER BY absence_count DESC LIMIT 2;Dari output di atas, Anda dapat melihat bahwa model LLM-based NL2SQL telah memetakan absent ke nilai kolom 2 untuk kolom
statusdi tabelstudent_courses.
Dukungan tabel lebar
Jika tabel data Anda mencakup tabel lebar dengan banyak kolom, atau jika Anda menerima error Please use column index to avoid oversize table information. saat menggunakan LLM-based NL2SQL, Anda dapat menggunakan proses berikut untuk mendukung tabel lebar.
Saat menggunakan LLM-based NL2SQL online, baik basic_index_name maupun pattern_index_name dalam WITH() dapat menggunakan column_index_name yang sama. Berbeda dengan schema atau pattern, ini hanya untuk penyederhanaan informasi.
Untuk sebagian besar permintaan, parameter column_index_name tidak berpengaruh. Parameter ini hanya diperlukan untuk permintaan NL2SQL yang memicu batas panjang, di mana parameter ini menyederhanakan informasi tabel. Hal ini dapat menyebabkan sedikit penurunan akurasi tetapi secara efektif menghindari error pada model LLM-based NL2SQL yang disebabkan oleh prompt yang terlalu panjang.
Buat tabel indeks kolom.
Anda dapat menggunakan nama tabel indeks kolom kustom yang sesuai dengan spesifikasi database, tetapi nama tersebut tidak boleh sama dengan tabel yang sudah ada di database saat ini. Selain itu, hanya diperlukan satu tabel indeks kolom per database. Pernyataan `CREATE TABLE` adalah sebagai berikut:
/*polar4ai*/CREATE TABLE column_index(id integer, table_name varchar, table_comment text_ik_max_word, column_name text_ik_max_word, column_comment text_ik_max_word, is_primary integer, is_foreign integer, vecs vector_768, ext text_ik_max_word, PRIMARY KEY (id));CatatanTabel indeks kolom tidak ditampilkan secara langsung di database. Untuk melihat informasi terkait, Anda dapat menjalankan pernyataan SQL
/*polar4ai*/SHOW TABLES;.Untuk menghapus tabel indeks kolom, misalnya
column_index, Anda dapat menjalankan pernyataan SQL/*polar4ai*/DROP TABLE IF EXISTS column_index;.
Impor data dari tabel data ke tabel indeks kolom berdasarkan granularitas kolom.
/*polar4ai*/SELECT * FROM PREDICT (MODEL _polar4ai_text2vec, SELECT '') WITH (mode='async', resource='column') into column_index;Periksa status tugas.
Setelah menjalankan pernyataan untuk mengimpor data ke tabel indeks kolom,
task_iduntuk tugas tersebut dikembalikan, misalnyabce632ea-97e9-11ee-bdd2-492f4dfe0918. Anda dapat menggunakan perintah berikut untuk memeriksa status impor. SaattaskStatusadalahfinish, tugas telah selesai./*polar4ai*/SHOW TASK `bce632ea-97e9-11ee-bdd2-492f4dfe0918`;Gunakan LLM-based NL2SQL untuk tabel lebar secara online.
/*polar4ai*/SELECT * FROM PREDICT (MODEL _polar4ai_nl2sql, SELECT 'Urutkan berdasarkan nama guru secara alfabetis menaik, dan tampilkan nama guru serta nama mata pelajaran yang mereka ajarkan.') WITH (basic_index_name='schema_index', column_index_name='column_index');

