Bagikan melalui


Ekspresi, predikat, dan fungsi GQL

Nota

Fitur ini saat ini dalam pratinjau publik. Pratinjau ini disediakan tanpa perjanjian tingkat layanan, dan tidak disarankan untuk beban kerja produksi. Fitur tertentu mungkin tidak didukung atau mungkin memiliki kemampuan terbatas. Untuk informasi lebih lanjut, lihat Supplemental Terms of Use for Microsoft Azure Previews.

Ekspresi GQL memungkinkan Anda melakukan perhitungan, perbandingan, dan transformasi pada data dalam kueri Anda. Dalam kombinasi dengan fungsi bawaan, ekspresi menyediakan alat yang kuat untuk pemrosesan, pemfilteran, dan analisis data dalam kueri grafik.

Literals

Literal adalah ekspresi sederhana yang secara langsung mengevaluasi ke nilai yang dinyatakan. Literal dari setiap jenis nilai dijelaskan secara rinci dalam nilai GQL dan jenis nilai.

Example:

1
1.0d
TRUE
"Hello, graph!"
[ 1, 2, 3 ]
NULL

Untuk sintaks harfiah terperinci untuk setiap jenis data, lihat Nilai GQL dan jenis nilai.

Predicates

Predikat adalah ekspresi boolean, yang umumnya digunakan untuk memfilter hasil dalam kueri GQL. Mereka mengevaluasi ke TRUE, FALSE, atau UNKNOWN (null).

Perhatian

Ketika digunakan sebagai filter, predikat hanya mempertahankan item tersebut, yang predikatnya dievaluasi ke TRUE.

Predikat perbandingan

Bandingkan nilai menggunakan operator ini:

  • = (sama dengan)
  • <> (tidak sama dengan)
  • < (kurang dari)
  • > (lebih besar dari)
  • <= (kurang dari atau sama dengan)
  • >= (lebih besar dari atau sama dengan)

GQL menggunakan logika tiga nilai di mana perbandingan dengan pengembalian UNKNOWNnull :

Expression Result
5 = 5 TRUE
5 = 3 FALSE
5 = NULL UNKNOWN
NULL = NULL UNKNOWN

Untuk perilaku perbandingan tertentu, lihat dokumentasi untuk setiap jenis nilai dalam nilai GQL dan jenis nilai.

Example:

MATCH (p:Person)
FILTER WHERE p.birthday <= 20050915
RETURN p.firstName

Aturan koersi angka:

Urutan prioritas:

  1. Ekspresi perbandingan yang melibatkan argumen perkiraan jenis numerik memaksa semua argumen menjadi dari perkiraan jenis numerik.
  2. Ekspresi perbandingan yang melibatkan argumen jenis bilangan bulat yang ditandatangani dan tidak ditandatangani memaksa semua argumen menjadi jenis bilangan bulat yang ditandatangani.

Ekspresi logika

Gabungkan kondisi dengan operator logis:

  • AND (kedua kondisi benar)
  • OR (salah satu kondisi benar)
  • NOT (meniadakan kondisi)

Example:

MATCH (p:Person)
FILTER WHERE p.birthday <= 20050915 AND p.firstName = 'John'
RETURN p.firstName || ' ' || p.lastName AS fullName

Predikat keberadaan properti

Untuk memeriksa apakah properti ada, Anda dapat menggunakan:

p.locationIP IS NOT NULL
p.browserUsed IS NULL

Nota

Mencoba mengakses properti yang diketahui tidak ada menghasilkan kesalahan sintaks. Akses ke properti yang berpotensi tidak ada mengevaluasi ke null. Penentuan apakah suatu properti diketahui atau berpotensi tidak ada dibuat berdasarkan jenis simpul atau tepi yang diakses.

Mencantumkan predikat keanggotaan

Uji apakah nilai ada dalam daftar:

p.firstName IN ['Alice', 'Bob', 'Charlie']
p.gender NOT IN ['male', 'female']

Predikat pola string

Cocokkan string menggunakan pencocokan pola:

p.firstName CONTAINS 'John'
p.browserUsed STARTS WITH 'Chrome'
p.locationIP ENDS WITH '.1'

Ekspresi aritmetika

Gunakan operator aritmatika standar dengan nilai numerik:

  • + (tambahan)
  • - (pengurangan)
  • * (perkalian)
  • / (divisi)

Operator aritmatika mengikuti konvensi matematika umum.

Didahulukan:

Umumnya operator mengikuti aturan prioritas operator yang ditetapkan, seperti * sebelum +. Gunakan tanda kurung untuk mengontrol urutan evaluasi sesuai kebutuhan.

Example:

(p.birthday < 20050915 OR p.birthday > 19651231) AND p.gender = 'male'

Aturan koersi:

Urutan prioritas:

  1. Ekspresi aritmatika yang melibatkan argumen perkiraan jenis angka mengembalikan hasil dari perkiraan jenis numerik.
  2. Ekspresi aritmatika yang melibatkan argumen jenis bilangan bulat yang ditandatangani dan tidak ditandatangani mengembalikan hasil dari jenis bilangan bulat yang ditandatangani.

Example:

LET birth_year = p.birthday / 10000
RETURN birth_year

Akses properti

Akses properti menggunakan notasi titik:

p.firstName
edge.creationDate

Akses ke daftar

Elemen daftar akses menggunakan pengindeksan berbasis nol:

interests[0]    -- first element
interests[1]    -- second element

Fungsi bawaan

GQL mendukung berbagai fungsi bawaan untuk pemrosesan dan analisis data.

Fungsi agregat

Fungsi agregat digunakan untuk mengevaluasi ekspresi atas sekumpulan baris dan mendapatkan nilai hasil akhir dengan menggabungkan nilai yang dihitung untuk setiap baris. Fungsi agregat berikut didukung untuk grafik di Microsoft Fabric:

  • count(*) - menghitung baris
  • sum(expression) - menjumlahkan nilai numerik
  • avg(expression) - nilai numerik rata-rata
  • min(expression) - menemukan nilai minimum
  • max(expression) - menemukan nilai maksimum
  • collect_list(expression) - mengumpulkan nilai ke dalam daftar

Secara umum, fungsi agregat mengabaikan nilai null dan selalu mengembalikan nilai null ketika tidak ada nilai input material yang disediakan. Anda dapat menggunakan coalesce untuk mendapatkan nilai default yang berbeda: coalesce(sum(expr), 0). Satu-satunya pengecualian adalah count fungsi agregat, yang selalu menghitung nilai non-null yang disediakan, mengembalikan 0 jika tidak ada. Gunakan count(*) juga untuk menyertakan nilai null dalam hitungan.

Fungsi agregat digunakan dengan tiga cara berbeda:

  • Untuk komputasi (vertikal) agregat di seluruh tabel
  • Untuk komputasi (vertikal) agregat melalui subtable yang ditentukan oleh kunci pengelompokan
  • Untuk komputasi (horizontal) agregat atas elemen daftar grup

Agregat vertikal:

-- Vertical aggregate over whole table
MATCH (p:Person)
RETURN count(*) AS total_people, avg(p.birthday) AS average_birth_year
-- Vertical aggregate with grouping
MATCH (p:Person)-[:isLocatedIn]->(c:City)
RETURN c.name, count(*) AS population, avg(p.birthday) AS average_birth_year
GROUP BY c.name

Agregat horizontal:

Agregasi horizontal menghitung agregat atas elemen variabel daftar grup dari pola panjang variabel:

-- Horizontal aggregate over a group list variable
MATCH (p:Person)-[edges:knows]->{1,3}(:Person)
RETURN p.firstName, avg(edges.creationDate) AS avg_connection_date

Agregasi horizontal selalu diutamakan daripada agregasi vertikal. Untuk mengonversi daftar grup menjadi daftar biasa, gunakan collect_list(edges).

Nota

Untuk cakupan komprehensif teknik agregasi termasuk pengikatan tepi panjang variabel dan menggabungkan agregasi horizontal/vertikal, lihat Teknik Agregasi Tingkat Lanjut.

Fungsi String

  • char_length(string) - mengembalikan panjang string
  • upper(string)- mengembalikan varian huruf besar dari string yang disediakan (hanya ASCII ASCII)
  • lower(string)- mengembalikan varian huruf kecil dari string yang disediakan (hanya ASCII ASCII)
  • trim(string) - menghapus spasi kosong di depan dan belakang
  • string_join(list, separator) - menggabungkan elemen daftar dengan pemisah

Example:

MATCH (p:Person)
WHERE char_length(p.firstName) > 5
RETURN upper(p.firstName) AS name_upper

Fungsi grafik

  • nodes(path) - mengembalikan simpul dari nilai jalur
  • edges(path) - mengembalikan tepi dari nilai jalur
  • labels(node_or_edge) - mengembalikan label simpul atau tepi sebagai daftar string

Example:

MATCH p=(:Company)<-[:workAt]-(:Person)-[:knows]-{1,3}(:Person)-[:workAt]->(:Company)
RETURN nodes(p) AS chain_of_colleagues

Mencantumkan fungsi

  • size(list) - mengembalikan ukuran nilai daftar
  • trim(list,n) - memangkas daftar menjadi ukuran paling besar n

Example:

MATCH (p:Person)-[:hasInterest]->(t:Tag)
WHERE size(collect_list(t)) > 3
RETURN p.firstName, collect_list(t.name) AS interests

Fungsi temporal

  • zoned_datetime() - mengembalikan tanggalwaktu zona saat ini
  • zoned_datetime("2025-09-12T10:10:52Z") - mengembalikan datetime zona yang diberikan oleh argumen dalam format ISO 8601

Example:

RETURN zoned_datetime() AS now

Fungsi generik

  • coalesce(value1, value2, ...) - mengembalikan nilai non-null pertama

Example:

MATCH (p:Person)
RETURN coalesce(p.firstName, 'Unknown') AS display_name