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.
Note
Questa funzionalità è attualmente disponibile in anteprima pubblica. Questa anteprima viene messa a disposizione senza contratto di servizio e non è consigliata per i carichi di lavoro di produzione. Alcune funzionalità potrebbero non essere supportate o potrebbero presentare funzionalità limitate. Per ulteriori informazioni, vedere Condizioni supplementari per l'uso delle versioni di anteprima di Microsoft Azure.
Questo articolo fornisce modelli di query GQL pratici per le attività comuni del grafico in Microsoft Fabric: ricerca di vicini, attraversamento di connessioni multihop, identificazione di connessioni condivise, conteggio delle relazioni e ricerca di entità senza connessioni.
Gli esempi utilizzano il set di dati di esempio di social network. Per informazioni di riferimento sul linguaggio completo, vedere guida al linguaggio GQL.
Prerequisiti
- Elemento del grafo con dati caricati. Se non si ha familiarità con il grafico, completare prima l'esercitazione .
- Familiarità con
MATCHe le query di baseRETURN. Vedere la guida al linguaggio GQL.
Trovare vicini diretti
Restituisce tutti i nodi connessi a un nodo iniziale con un salto.
Trovare tutte le persone che una persona specifica conosce:
MATCH (p:Person WHERE p.firstName = 'Alice')-[:knows]->(friend:Person)
RETURN friend.firstName, friend.lastName
Trova tutte le aziende a cui lavora una persona:
MATCH (p:Person WHERE p.firstName = 'Alice')-[:workAt]->(c:Company)
RETURN c.name, c.url
Trova amici di amici (multi-hop)
Usare modelli a lunghezza variabile con {min,max} per attraversare più hop.
Trovare persone a due gradi di separazione - amici degli amici di Alice che Alice non conosce direttamente.
MATCH (alice:Person WHERE alice.firstName = 'Alice')-[:knows]->{2,2}(fof:Person)
RETURN DISTINCT fof.firstName, fof.lastName
LIMIT 100
Trova tutte le persone raggiungibili entro tre gradi:
MATCH (src:Person WHERE src.firstName = 'Alice')-[:knows]->{1,3}(dst:Person)
RETURN DISTINCT dst.firstName, dst.lastName
LIMIT 100
Tip
Impostare sempre un limite superiore sull'attraversamento a lunghezza variabile. I modelli non associati in grafici di grandi dimensioni o densi possono raggiungere i limiti di timeout delle query. Vedere Limitazioni correnti.
Conteggio delle relazioni per entità
Usare GROUP BY con count(*) per contare il numero di relazioni di ogni entità.
Contare il numero di amici che ogni persona ha, ordinato da più a pochi:
MATCH (p:Person)-[:knows]->(friend:Person)
LET name = p.firstName || ' ' || p.lastName
RETURN name, count(*) AS friendCount
GROUP BY name
ORDER BY friendCount DESC
LIMIT 20
Contare il numero di dipendenti che lavorano in ogni azienda:
MATCH (p:Person)-[:workAt]->(c:Company)
LET companyName = c.name
RETURN companyName, count(*) AS employeeCount
GROUP BY companyName
ORDER BY employeeCount DESC
Trovare connessioni condivise
Il riutilizzo di una variabile in due parti di un modello crea un vincolo implicito di "stesso nodo". Usare questo vincolo per trovare le entità connesse tramite una terza entità condivisa.
Trovare coppie di persone che conoscono entrambe la stessa persona:
MATCH (a:Person)-[:knows]->(mutual:Person)<-[:knows]-(b:Person)
WHERE a.id < b.id
RETURN a.firstName, b.firstName, mutual.firstName AS sharedContact
LIMIT 100
Trovare coppie di persone che lavorano nella stessa azienda:
MATCH (c:Company)<-[:workAt]-(a:Person), (c)<-[:workAt]-(b:Person)
WHERE a.id < b.id
RETURN a.firstName, b.firstName, c.name AS company
LIMIT 100
Tip
La WHERE a.id < b.id condizione impedisce la visualizzazione di coppie duplicate (Alice-Bob e Bob-Alice) nei risultati.
Trovare entità senza relazioni
Usare OPTIONAL MATCH seguito da un controllo Null per trovare i nodi che non hanno alcuna relazione corrispondente.
Trovare persone che non lavorano in nessuna azienda:
MATCH (p:Person)
OPTIONAL MATCH (p)-[:workAt]->(c:Company)
FILTER c IS NULL
RETURN p.firstName, p.lastName
LIMIT 100
Trova post senza commenti:
MATCH (post:Post)
OPTIONAL MATCH (comment:Comment)-[:replyOf]->(post)
FILTER comment IS NULL
RETURN post.id, post.content
LIMIT 100
Trovare entità con molte connessioni
Combinare GROUP BY e FILTER per identificare i nodi altamente connessi. Questo metodo è utile per trovare hub o outlier.
Trova persone con più di 10 amici:
MATCH (p:Person)-[:knows]->(friend:Person)
LET name = p.firstName || ' ' || p.lastName
RETURN name, count(*) AS friendCount
GROUP BY name
FILTER friendCount > 10
ORDER BY friendCount DESC
Note
FILTER dopo GROUP BY funziona come HAVING in SQL. Filtra il risultato aggregato, non le singole righe.