Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Cambiare i servizi usando l'elenco a discesa Version .Switch services using the Version drop-down list. Altre informazioni sulla navigazione.
Si applica a: ✅ Esplora dati di Azure in Microsoft Fabric ✅
Annotazioni
Il supporto GQL è disponibile in anteprima. Le funzionalità e la sintassi possono cambiare in base al feedback e allo sviluppo in corso.
Introduzione
Questo riferimento illustra i concetti fondamentali, le funzioni e gli operatori di Graph Query Language (GQL). Graph Query Language (GQL) è basato sui concetti matematici della teoria del grafo che forniscono una solida base per l'esecuzione di query sui dati del grafo. Comprendere questi concetti fondamentali consente di scrivere query più efficaci e comprendere meglio il modo in cui GQL elabora i dati. GQL offre anche un set completo di funzioni e operatori per lavorare con modelli, nodi, bordi e proprietà del grafo.
Concetti fondamentali
Questa sezione illustra i concetti di base che costituiscono la base dell'analisi dei dati del grafo con GQL.
Modelli di grafo
I modelli di grafo sono i blocchi predefiniti principali delle query GQL. Descrivono la struttura che si vuole trovare nei dati del grafo usando una sintassi dichiarativa che rispecchia la rappresentazione visiva dei grafici.
Modelli di nodo
I modelli di nodo specificano come trovare le corrispondenze con i singoli nodi nel grafico:
(n) -- Any node
(n:Person) -- Node with Person label
(n:Person&City) -- Node with Person AND City label
(:Person) -- Person node, don't bind variable
Concetti chiave:
-
Associazione di variabili:
(n)crea una variabilena cui è possibile fare riferimento in un secondo momento nella query -
Nodi anonimi:
(:Person)corrisponde ai nodi senza creare una variabile -
Filtro delle etichette:
:Personlimita le corrispondenze ai nodi con l'etichetta Person -
Combinazioni di etichette: usare
&per AND,|per le operazioni OR
Modelli di arco
I modelli perimetrali definiscono il modo in cui i nodi si connettono tra loro:
-[e]-> -- Directed outgoing edge, any label
-[e:works_at]-> -- Directed edge, works_at label
-[e:knows|likes]-> -- knows OR likes edge
<-[e]- -- Directed incoming edge
-[e]- -- Undirected (any direction)
Concetti chiave:
-
Direzione:
->per in uscita,<-per in ingresso,-per qualsiasi direzione -
Tipi di arco: usare etichette come
:works_atfiltrare in base al tipo di relazione -
Più tipi:
knows|likescorrisponde a uno dei due tipi di relazione
Espressioni di etichetta
Le etichette forniscono un significato semantico ai nodi e ai bordi. GQL supporta espressioni di etichetta complesse:
:Person&Company -- Both Person AND Company labels
:Person|Company -- Person OR Company labels
:!Company -- NOT Company label
:(Person|!Company)&City -- Complex expressions with parentheses
Operatori:
-
&(AND): il nodo deve avere tutte le etichette specificate -
|(OR): il nodo deve avere almeno un'etichetta specificata -
!(NOT): il nodo non deve avere l'etichetta specificata -
(): parentesi per il raggruppamento di espressioni complesse
Modelli di percorso
I modelli di percorso descrivono le relazioni multi hop nel grafico:
(a)-[e1]->(b)-[e2]->(c) -- 2-hop path
(a)-[e]->{2,4}(b) -- 2 to 4 hops
(a)-[e]->{1,}(b) -- 1 or more hops
(a)-[:knows|likes]->{1,3}(b) -- 1-3 hops via knows/likes
p=()-[:works_at]->() -- Binding a path variable
Percorsi a lunghezza variabile:
-
{2,4}: esattamente da 2 a 4 hop -
{1,}: 1 o più hop (senza vincoli) -
{,3}: fino a 3 hop -
{5}: esattamente 5 hop
Variabili di percorso:
-
p=()->(): acquisisce l'intero percorso per un'analisi successiva - Accesso con
NODES(p),RELATIONSHIPS(p),PATH_LENGTH(p)
Più modelli
GQL supporta strutture di gragrafi complesse e non lineari:
(a)->(b), (a)->(c) -- Multiple edges from same node
(a)->(b)<-(c), (b)->(d) -- Non-linear structures
Composizione modello:
- Usare le virgole
,per separare più modelli - Tutti i modelli devono corrispondere simultaneamente
- Le variabili possono essere condivise tra modelli
Modalità di corrispondenza
GQL supporta diverse modalità di corrispondenza dei percorsi che controllano il modo in cui i modelli vengono confrontati con i dati del grafo. Queste modalità influiscono sulle prestazioni, sulla completezza dei risultati e sui tipi di percorsi restituiti.
Le modalità di corrispondenza controllano il modo in cui gli elementi del grafo possono essere riutilizzati tra le variabili del modello all'interno di una singola clausola MATCH.
DIFFERENT EDGE (impostazione predefinita)
Modalità predefinita in Kusto. Un bordo corrispondente non può essere associato a più di una variabile perimetrale, ma i nodi possono essere riutilizzati liberamente.
MATCH (a)-[r1]->(b)-[r2]->(c)
-- r1 and r2 must be different edges
-- a, b, c can be the same or different nodes
ELEMENTI RIPETIBILI
Consente di riutilizzare sia i bordi che i nodi tra le variabili del modello senza restrizioni.
MATCH REPEATABLE ELEMENTS (a)-[r1]->(b)-[r2]->(c)
-- r1 and r2 can be the same edge
-- a, b, c can be the same or different nodes
Modalità percorso
Le modalità percorso controllano i tipi di percorsi inclusi nei risultati in base ai vincoli di ripetizione.
WALK (impostazione predefinita)
Modalità percorso GQL predefinita. Include tutti i percorsi possibili senza restrizioni per la ripetizione dei nodi o dei bordi.
MATCH WALK (a)-[]->{1,3}(b)
-- Allows paths with repeating nodes and edges
SENTIERO
Filtra i percorsi con bordi ripetuti. I nodi possono essere ripetuti, ma ogni arco può essere visualizzato una sola volta per percorso.
MATCH TRAIL (a)-[]->{1,3}(b)
-- No edge can appear twice in the same path
-- Nodes may repeat
ACICLICO
Filtra i percorsi con nodi ripetuti. Ogni nodo può essere visualizzato una sola volta per percorso.
MATCH ACYCLIC (a)-[]->{1,3}(b)
-- No node can appear twice in the same path
-- Prevents cycles entirely
SEMPLICE
Uguale a ACYCLIC, ma consente ai primi e agli ultimi nodi nel percorso di essere uguali (formando un ciclo semplice).
MATCH SIMPLE (a)-[]->{1,3}(b)
-- No node repetition except first/last can match
-- Currently not supported in implementation
Combinazioni di modalità e parametro cicli Kusto
Diverse combinazioni di modalità di corrispondenza e modalità percorso vengono mappate a valori di parametro Kusto cycles specifici:
MODALITÀ ARCHI DIVERSI
| Modalità percorso | Percorso singolo | Modello multi-percorso ("stella") |
|---|---|---|
| CAMMINARE | cycles=unique_edges |
cycles=unique_edges (solo se tutti i percorsi sono WALK/TRAIL) |
| SENTIERO | cycles=unique_edges |
cycles=unique_edges (solo se tutti i percorsi sono WALK/TRAIL) |
| ACICLICO | cycles=none |
Non supportato |
| SEMPLICE | Non supportato | Non supportato |
MODALITÀ ELEMENTI RIPETIBILI
| Modalità percorso | Percorso singolo | Modello multi-percorso ("stella") |
|---|---|---|
| CAMMINARE | cycles=all |
cycles=all (solo se tutti i percorsi sono WALK) |
| SENTIERO | cycles=unique_edges |
Non supportato |
| ACICLICO | cycles=none |
Non supportato |
| SEMPLICE | Non supportato | Non supportato |
Esempi di sintassi
Modalità di percorso di base
-- Default (WALK with DIFFERENT EDGES)
MATCH (n)-[]->(m)
RETURN n, m
-- Explicit WALK mode
MATCH WALK (n)-[]->(m)
RETURN n, m
-- TRAIL mode - no repeating edges
MATCH TRAIL (n)-[]->{1,3}(m)
RETURN n, m
-- ACYCLIC mode - no repeating nodes
MATCH ACYCLIC (n)-[]->{1,3}(m)
RETURN n, m
Combinazioni di modalità di corrispondenza
-- DIFFERENT EDGES with WALK (default)
MATCH DIFFERENT EDGES WALK (n)-[]->(m)
RETURN n, m
-- REPEATABLE ELEMENTS with WALK
MATCH REPEATABLE ELEMENTS WALK (n)-[]->(m)
RETURN n, m
-- REPEATABLE ELEMENTS with TRAIL
MATCH REPEATABLE ELEMENTS TRAIL (n)-[]->(m)
RETURN n, m
Query a più criteri
-- Multiple WALK patterns (star pattern)
MATCH WALK (n)-[]->(a), WALK (n)-[]->(b)
RETURN n, a, b
-- Mixed path modes (both must be WALK/TRAIL for multi-path)
MATCH WALK (n)-[]->(a), TRAIL (n)-[]->(b)
RETURN n, a, b
Informazioni di riferimento su funzioni e operatori
Graph Query Language (GQL) offre un set completo di funzioni e operatori per lavorare con modelli, nodi, archi e proprietà del grafo.
Funzioni e operatori GQL principali
Questa tabella elenca le funzioni e gli operatori GQL principali, insieme agli esempi e agli equivalenti KQL (Kusto Query Language).
| Funzione/operatore GQL | Description | Esempio di GQL |
|---|---|---|
MATCH |
Trovare modelli di grafo | MATCH (a)-[r]->(b) |
OPTIONAL MATCH |
Trovare modelli che potrebbero non esistere | OPTIONAL MATCH (p)->(c:City) |
WHERE |
Filtrare modelli e proprietà | WHERE person.age > 25 |
FILTER |
Equivalente a WHERE ma usato senza clausole MATCH | FILTER p.name = 'Carol' OR c.name = 'Seattle' |
IS NULL |
Verificare la presenza di valori Null | WHERE person.age IS NULL |
IS NOT NULL |
Verificare la presenza di valori non Null | WHERE person.age IS NOT NULL |
RETURN |
Risultati del progetto | RETURN person.name, person.age |
DISTINCT |
Restituisce valori univoci | RETURN DISTINCT person.name |
COUNT(*) |
Conteggio di tutte le righe | RETURN COUNT(*) |
COUNT() |
Conteggio valori non Null | RETURN COUNT(person.name) |
SUM() |
Sommare i valori numerici | RETURN SUM(person.age) |
MIN() |
Valore minimo | RETURN MIN(person.age) |
MAX() |
Valore massimo | RETURN MAX(person.age) |
AVG() |
Valore medio | RETURN AVG(person.age) |
COLLECT_LIST() |
Raccogliere valori in matrice | RETURN COLLECT_LIST(person.name) |
SIZE() |
Lunghezza matrice | RETURN SIZE(COLLECT_LIST(n.firstName)) |
Labels() |
Mostra etichette per un nodo o un bordo | RETURN labels(entity) |
UPPER() |
Converti in maiuscolo | RETURN UPPER(person.name) |
LOWER() |
Converti in minuscolo | RETURN LOWER(person.name) |
LEFT() |
Estrarre la sottostringa sinistra | WHERE LEFT(person.name, 3) = 'Tom' |
RIGHT() |
Estrarre sottostringa destra | WHERE RIGHT(person.name, 5) = 'Hanks' |
STARTS WITH |
La stringa inizia con il criterio | WHERE person.name STARTS WITH 'Tom' |
ENDS WITH |
La stringa termina con il criterio | WHERE person.name ENDS WITH 'Hanks' |
CONTAINS |
String contiene il criterio | WHERE person.name CONTAINS 'Tom' |
\|\| |
Concatenazione di stringhe | RETURN n.firstName \|\| ' ' \|\| n.lastName |
TRIM() |
Rimuovere spazi vuoti da entrambe le estremità | RETURN TRIM(' abc ') |
BTRIM() |
Rimuovere spazi vuoti da entrambe le estremità (alias per TRIM) | RETURN BTRIM(' abc ') |
LTRIM() |
Rimuovere spazi vuoti dall'estremità sinistra | RETURN LTRIM(' abc ') |
RTRIM() |
Rimuovere spazi vuoti dall'estremità destra | RETURN RTRIM(' abc ') |
TRIM(BOTH FROM) |
Rimuovere spazi vuoti da entrambe le estremità (esplicito) | RETURN TRIM(BOTH FROM ' abc ') |
TRIM(LEADING FROM) |
Rimuovere spazi vuoti dall'estremità sinistra (esplicita) | RETURN TRIM(LEADING FROM ' abc') |
TRIM(TRAILING FROM) |
Rimuovere spazi vuoti dall'estremità destra (esplicita) | RETURN TRIM(TRAILING FROM 'abc ') |
TRIM(chars FROM) |
Rimuovere i caratteri specificati da entrambe le estremità | RETURN TRIM('_' FROM '_abc_') |
TRIM(BOTH chars FROM) |
Rimuovere i caratteri specificati da entrambe le estremità (esplicito) | RETURN TRIM(BOTH '_' FROM '_abc_') |
TRIM(LEADING chars FROM) |
Rimuovere i caratteri specificati dall'estremità sinistra | RETURN TRIM(LEADING 'd' FROM 'dddabc') |
TRIM(TRAILING chars FROM) |
Rimuovere i caratteri specificati dall'estremità destra | RETURN TRIM(TRAILING 't' FROM 'abcttt') |
STRING_JOIN() |
Unire elementi di matrice con delimitatore | RETURN STRING_JOIN(["a", "b" \|\| "c"], "-") |
CAST() |
Convertire i tipi di dati | CAST(person.age AS STRING) |
ZONED_DATETIME() |
Creare datetime dalla stringa | ZONED_DATETIME('2024-01-01') |
CURRENT_TIMESTAMP |
Timestamp corrente | WHERE created < CURRENT_TIMESTAMP |
DURATION() |
Creare intervalli di tempo da unità di tempo (giorni a nanosecondi) | DURATION({days: 3, hours: 2}) |
DURATION_BETWEEN() |
Calcolare la durata tra due valori datetime | DURATION_BETWEEN(start_time, end_time) |
NODES() |
Estrarre nodi da un percorso | RETURN NODES(path_variable) |
RELATIONSHIPS() |
Estrarre i bordi da un percorso | RETURN RELATIONSHIPS(path_variable) |
PATH_LENGTH() |
Ottenere la lunghezza di un percorso | RETURN PATH_LENGTH(path_variable) |
ORDER BY |
Ordinare i risultati | ORDER BY person.age DESC |
LIMIT |
Limitare il conteggio dei risultati | LIMIT 10 |
& (AND) |
Intersezione di etichette | MATCH (p:Person & Male) |
\| (OR) |
Unione delle etichette | MATCH (n:Person \| Movie) |
! (NOT) |
Negazione delle etichette | MATCH (p:!Female) |
Procedure consigliate
KQL supporta i tipi dinamici, ma GQL non definisce chiaramente come devono essere gestiti. Per evitare errori di runtime, eseguire il cast esplicito dei campi annidati nel tipo previsto (vedere
CAST).Poiché GQL viene eseguito in KQL, alcune operazioni ereditano la semantica KQL. Ad esempio,
COLLECT_LIST(l'equivalente GQL dimake_list) appiattirà le matrici se il campo è già una matrice. Se i risultati differiscono dalle aspettative, consultare la documentazione di KQL per la funzione equivalente.
Ottimizzazione delle prestazioni
Usare queste strategie per ottimizzare le prestazioni delle query GQL negli ambienti di produzione:
Suggerimento
Iniziare con modelli semplici, quindi aumentare la complessità, se necessario. Monitorare le prestazioni delle query e regolare le lunghezze e i filtri del percorso per migliorare i risultati.
Limitare l'ambito di corrispondenza del percorso:
- Usare filtri di etichetta specifici per ridurre lo spazio di ricerca:
MATCH (start:SpecificType)invece diMATCH (start) - Limitare i percorsi di lunghezza variabile con limiti ragionevoli:
MATCH (a)-[]->{1,3}(b)invece di percorsi non associati - Applicare
WHEREle clausole in anticipo per filtrare i risultati prima delle operazioni costose.
Usare COUNT(*) per i controlli di esistenza:
Se è sufficiente verificare se esiste un modello, usare COUNT(*) anziché restituire i risultati completi.
MATCH (user:User)-[:SUSPICIOUS_ACTIVITY]->(target)
WHERE user.id = 'user123'
RETURN COUNT(*) > 0 AS HasSuspiciousActivity
Limitazioni
Struttura di query: tutte le query openCypher devono iniziare con un'istruzione
MATCH.Parole chiave riservate: alcune parole chiave GQL non possono essere usate come identificatori nelle query. Alcune parole chiave riservate non sono immediatamente ovvie( ad esempio,
DATEè una parola chiave riservata). Se i dati del grafo hanno nomi di proprietà in conflitto con parole chiave riservate GQL, usare nomi di proprietà diversi nello schema del grafo o rinominarli per evitare conflitti di analisi.Importante
Quando si progetta lo schema del grafo, alcuni nomi di proprietà comuni potrebbero essere in conflitto con parole chiave riservate GQL. Evitare o rinominare questi nomi di proprietà.
No
INSERT/CREATEsupporto: le operazioni per modificare le strutture del grafo non sono supportate. Usare invece KQL per tutte le attività di creazione, modifica e gestione dei grafi.Corrispondenze facoltative: supportate solo per i modelli di nodo (non per i bordi).
Controlli di equivalenza delle
(MATCH (n)-[]-(n2) WHERE n1 <> n2)entità non supportati: GQL non è supportato. Usare invece confronti di campi espliciti,n.id <> n2.idad esempio .Fuso orario e fuso orario: il motore funziona in formato UTC. I valori letterali datetime devono usare datetime con zone; solo la zona UTC è supportata tramite
ZONED_DATETIME("2011-12-31 23:59:59.9").Granularità della durata: le durate supportano fino a giorni e unità più piccole fino a nanosecondi. Le unità più grandi del giorno (ad esempio settimane, mesi, anni) non sono supportate.
Modalità di attraversamento: GQL definisce le modalità di attraversamento configurabili per la corrispondenza e i percorsi. Per
MATCH, le modalità sono'DIFFERENT EDGES'e'REPEATABLE EDGES'; perPATH, le modalità sono'WALK','TRAIL''ACYCLIC', e'SIMPLE'. Per impostazione predefinita, l'implementazione corrente è'DIFFERENT EDGES'rispettivamente e'WALK'. Alcune combinazioni non sono supportate.
Label() funzione GQL personalizzata
La labels() funzione mostra le etichette per un nodo o un bordo come matrice.
Sintassi:
labels(
entità')
Parametri:
-
entity: variabile nodo o arco da un criterio corrispondente.
restituisce:
Restituisce una matrice di stringhe con tutte le etichette per l'entità specificata.
Esempi:
Mostra etichette per i nodi corrispondenti:
MATCH (entity)
RETURN entity.name, labels(entity)
Risultato
Questa query mostra il nome e tutte le etichette per ogni nodo nel grafico.
| entity.name | labels(entity) |
|---|---|
| john.doe | ["User"] |
| admin.user | ["User"] |
| server Web | ["System"] |
| banca dati | ["System"] |
| controller di dominio | ["System"] |
Mostra etichette nelle proiezioni con alias:
MATCH (n)-[e]->(target)
RETURN n.name, labels(n) AS n_labels, labels(e) AS edge_labels, target.name
Questa query mostra i nomi dei nodi, le relative etichette e le etichette dei bordi di connessione.
| n.name | n_labels | edge_labels | target.name |
|---|---|---|---|
| john.doe | ["User"] | ["CAN_ACCESS"] | server Web |
| admin.user | ["User"] | ["CAN_ACCESS"] | controller di dominio |
| server Web | ["System"] | ["CAN_ACCESS"] | banca dati |
| controller di dominio | ["System"] | ["CAN_ACCESS"] | banca dati |