Bagikan melalui


Apa bahasa kueri di Cosmos DB (di Azure dan Fabric)

Bahasa kueri menyediakan sintaksis seperti SQL yang kuat untuk bekerja dengan data JSON. Bahasa ini dirancang untuk akrab bagi pengguna dengan pengalaman SQL, sekaligus mendukung fleksibilitas dan sifat hierarkis dokumen JSON. Artikel ini memperkenalkan konsep inti, sintaksis, dan fitur bahasa kueri.

Konsep inti bahasa kueri

Bahasa kueri dibuat untuk menyediakan akses ekspresif dan efisien ke data yang disimpan sebagai dokumen JSON. Pada dasarnya, bahasa ini dirancang untuk bekerja secara asli dengan data hierarkis dan fleksibel, mendukung kueri sederhana dan kompleks atas dokumen yang dapat memiliki berbagai struktur.

Kueri terdiri menggunakan sintaks seperti SQL yang sudah dikenal, tetapi diadaptasi untuk model dokumen. Adaptasi ini berarti bahwa, tidak seperti database relasional tradisional, tidak ada skema tetap—properti dapat hilang atau memiliki jenis yang berbeda di seluruh dokumen. Bahasa ini peka huruf besar/kecil dan mendukung referensi properti berlapis, array, dan objek langsung dalam kueri. Operator logis, perbandingan, dan aritmatika tersedia, dan bahasa ini dirancang untuk menjadi intuitif bagi pengembang tersebut dengan pengalaman SQL sambil merangkul fleksibilitas data NoSQL.

Mesin kueri dioptimalkan untuk performa dan skalabilitas tinggi, secara otomatis menggunakan indeks untuk memfilter, mengurutkan, dan menggabungkan data secara efisien. Ini mendukung berbagai pola kueri, dari pencarian sederhana hingga agregasi dan subkueri yang kompleks. Dukungan ini membuat mesin kueri cocok untuk beban kerja transaksi dan analitik. Bahasa ini juga menyediakan konstruksi untuk bekerja dengan array, menangani nilai null dan tidak terdefinisi, dan memproyeksikan menghasilkan bentuk JSON yang fleksibel. Konstruksi ini memungkinkan pengembang untuk mengambil data yang mereka butuhkan dalam format yang diperlukan oleh aplikasi mereka.

Struktur Kueri Dasar

Kueri umum terdiri dari klausul berikut:

  • SELECT: Menentukan bidang atau nilai mana yang akan dikembalikan.
  • FROM: Mengidentifikasi kontainer sumber dan dapat menetapkan alias.
  • WHERE: Memfilter dokumen berdasarkan kondisi.
  • ORDER BY: Mengurutkan hasilnya.
  • GROUP BY: Mengelompokkan hasil menurut satu atau beberapa properti.

Contoh: Kueri Sederhana

SELECT p.id, p.name
FROM products p
WHERE p.price > 20
ORDER BY p.price ASC

Kueri ini mengembalikan id dan name produk dengan harga lebih besar dari 20, diurutkan berdasarkan harga dalam urutan naik.

Bekerja dengan Properti JSON

Anda dapat mengakses properti berlapis menggunakan notasi titik atau notasi tanda kurung:

SELECT p.manufacturer.name, p["metadata"].sku
FROM products p

Array dapat dilalui menggunakan JOIN subkueri atau :

SELECT p.name, c AS color
FROM products p
JOIN c IN p.metadata.colors

Memfilter Data

Klausa ini WHERE mendukung berbagai operator, termasuk operasi aritmatika, logis, perbandingan, dan string:

SELECT *
FROM products p
WHERE p.category IN ("Accessories", "Clothing") AND p.price BETWEEN 10 AND 50

Agregasi dan Pengelompokan

Anda dapat menggunakan fungsi agregat dan hasil grup:

SELECT p.category, COUNT(1) AS productCount
FROM products p
GROUP BY p.category

Berbeda, Atas, dan Suka

  • DISTINCT menghapus nilai duplikat.
  • TOP N membatasi jumlah hasil.
  • LIKE mendukung pencocokan pola dengan kartubebas.
SELECT DISTINCT VALUE p.category
FROM products p

SELECT TOP 5 *
FROM products p
ORDER BY p.price DESC

SELECT *
FROM products p
WHERE p.name LIKE "%bike%"

Subkueri

Subkueri memungkinkan pemfilteran dan proyeksi yang lebih canggih, termasuk memeriksa keberadaan nilai dalam array:

SELECT VALUE p.name
FROM products p
WHERE EXISTS (
    SELECT VALUE c FROM c IN p.metadata.colors WHERE c LIKE "%blue%"
)