Freigeben über


Grundlagen der Graph-Erkundung

Gilt für: ✅Microsoft Fabric✅Azure Data Explorer

Diese Seite bietet wiederverwendbare Kusto Query Language (KQL)-Muster zum schnellen Untersuchen von Graph-Datasets und beantworten häufig gestellte Fragen zu Struktur, Knoten, Kanten und Eigenschaften.

Tipp

Suchen Sie nach Design- und Leistungsleitfaden? Siehe bewährte Methoden für die Diagrammsemantik.

Allgemeine Analyseabfragen

Diese wiederverwendbaren Abfragemuster funktionieren in allen Diagrammmodellen und helfen Ihnen, die Struktur und Merkmale eines beliebigen Graph-Datasets zu verstehen. Im folgenden Beispiel werden Beispieldiagramme verwendet, die in unserem Hilfecluster in der Beispieldatenbank zur Verfügung stehen. Ausführliche Informationen zu diesen Diagrammen finden Sie unter Graph-Beispiel-Datasets und -Beispiele. Verwenden Sie diese Abfragen, um neue Diagramme zu untersuchen, grundlegende Analysen durchzuführen oder als Ausgangspunkte für komplexere Graph-Untersuchungen.

Graph-Übersicht und -Statistiken

Das Verständnis der grundlegenden Merkmale Ihres Diagramms ist für die Analyseplanung und Leistungsoptimierung unerlässlich. Diese Abfragen stellen grundlegende Metriken zur Diagrammgröße und -struktur bereit.

Anzahl der Gesamtknoten und Kanten:

Verwenden Sie diese Abfragen, um den Umfang Ihres Graph-Datasets zu verstehen. Knoten- und Edgeanzahl helfen dabei, geeignete Abfragestrategien zu ermitteln und potenzielle Leistungsüberlegungen zu identifizieren. In diesen Beispielen wird das Simple Diagramm verwendet, das ideal zum Erlernen grundlegender Diagrammvorgänge ist.

// Get node count
graph('Simple')
| graph-match (node)
    project node
| count
Anzahl
11
// Get edge count
graph('Simple')
| graph-match (source)-[edge]->(target)
    project edge
| count
Anzahl
20

Abrufen von Diagrammzusammenfassungsstatistiken:

Diese kombinierte Abfrage stellt beide Metriken in einem einzigen Ergebnis effizient bereit, nützlich für die anfängliche Diagrammbewertung und -berichterstellung. In diesem Beispiel wird die Technik mithilfe des DiagrammsSimple veranschaulicht.

let nodes = view() { graph('Simple') | graph-match (node) project node | count }; 
let edges = view() { graph('Simple') | graph-match (source)-[edge]->(target) project edge | count };
union withsource=['Graph element'] nodes, edges
Graph-Element Anzahl
nodes 11
Kanten 20

Alternative Verwendung von Graph-zu-Tabelle:

Für die einfache Zählung kann der graph-to-table Operator effizienter sein, da er Diagrammelemente ohne Musterüberlastung direkt exportiert. In diesem Beispiel wird der alternative Ansatz mithilfe desselben Simple Diagramms veranschaulicht.

let nodes = view() { graph('Simple') | graph-to-table nodes | count };
let edges = view() { graph('Simple') | graph-to-table edges | count };
union nodes, edges
Anzahl
11
20

Knotenanalyse

Die Knotenanalyse hilft Ihnen, die Entitäten in Ihrem Diagramm, deren Typen und Verteilung zu verstehen. Diese Muster sind für die Datenqualitätsbewertung und das Schemaverständnis von wesentlicher Bedeutung.

Entdecken Sie alle Knotentypen (Bezeichnungen):

Diese Abfrage zeigt die verschiedenen Entitätstypen in Ihrem Diagramm und deren Frequenzen an. Verwenden Sie es, um Ihr Datenmodell zu verstehen, die am häufigsten verwendeten Entitätstypen zu identifizieren und potenzielle Probleme mit der Datenqualität zu erkennen. In diesem Beispiel wird das Simple Diagramm verwendet, das Person-, Company- und City-Entitäten enthält.

graph('Simple')
| graph-match (node) 
    project labels = labels(node)
| mv-expand label = labels to typeof(string)
| summarize count() by label
| order by count_ desc
label zählen_
Person 5
Firma 3
Stadt 3

Suchen von Knoten mit mehreren Bezeichnungen:

Identifiziert Knoten, die gleichzeitig zu mehreren Kategorien gehören. Dies ist nützlich, um überlappende Klassifizierungen und komplexe Entitätsbeziehungen in Ihrem Datenmodell zu verstehen. In diesem Beispiel wird das BloodHound_Entra Diagramm verwendet, das Microsoft Entra-Objekte mit mehreren Bezeichnungsklassifizierungen enthält.

graph('BloodHound_Entra')
| graph-match (node) 
    project node_id = node.id, labels = labels(node), label_count = array_length(labels(node))
| where label_count > 1
| take 3
node_id labels label_count
2 [
"AZBase",
"AZServicePrincipal"
]
2
4 [
"AZBase",
"AZUser"
]
2
5 [
"AZBase",
"AZUser"
]
2

Beispielknoten nach Typ:

Ruft repräsentative Beispiele bestimmter Knotentypen ab, um deren Struktur und Eigenschaften zu verstehen. Wichtig für die Datensuche und Abfrageentwicklung. In diesem Beispiel wird das BloodHound_Entra Diagramm verwendet, um AZUser-Knoteneigenschaften in Microsoft Entra-Umgebungen zu untersuchen.

graph('BloodHound_Entra')
| graph-match (node) 
    where labels(node) has "AZUser"
    project node_id = node.id, properties = node.properties
| sample 2
node_id Eigenschaften
5 {
"lastseen": "2025-08-11T09:21:19.002Z[UTC]",
"lastcollected": "2025-08-11T09:21:07.472380514Z[UTC]",
"enabled": true,
"displayname": "Jack Miller",
"name": "JMILLER@PHANTOMCORP.ONMICROSOFT.COM",
"tenantid": "6c12b0b0-b2cc-4a73-8252-0b94bfca2145",
"objectid": "9a20c327-8cc7-4425-9480-11fb734db194",
"onpremid": "",
"usertype": "Member",
"title": "",
"userprincipalname": "jmiller@phantomcorp.onmicrosoft.com",
"system_tags": "admin_tier_0",
"pwdlastset": "2021-06-16T17:51:03Z[UTC]",
"onpremsyncenabled": false,
"whencreated": "2021-06-16T17:29:16Z[UTC]",
"email": ""
}
10 {
"lastseen": "2025-08-11T09:21:07.472380514Z[UTC]",
"onpremid": "",
"usertype": "Member",
"title": "",
"lastcollected": "2025-08-11T09:21:07.472380514Z[UTC]",
"enabled": true,
"userprincipalname": "cjackson@phantomcorp.onmicrosoft.com",
"system_tags": "admin_tier_0",
"displayname": "Chris Jackson",
"pwdlastset": "2022-07-19T15:18:49Z[UTC]",
"onpremsyncenabled": false,
"name": "CJACKSON@PHANTOMCORP.ONMICROSOFT.COM",
"tenantid": "6c12b0b0-b2cc-4a73-8252-0b94bfca2145",
"whencreated": "2022-07-19T15:01:55Z[UTC]",
"email": "cjackson@phantomcorp.onmicrosoft.com",
"objectid": "bfb6a9c2-f3c8-4b9c-9d09-2924d38895f7"
}

Edgeanalyse

Das Verständnis von Beziehungen in Ihrem Diagramm ist entscheidend für die Identifizierung von Mustern, Datenqualitätsproblemen und potenzielle Analyserichtungen.

Entdecken Sie alle Edgetypen (funktioniert mit verschiedenen Diagrammschemas):

Diese Abfrage identifiziert alle Beziehungstypen in Ihrem Diagramm und hilft Ihnen dabei, die für die Analyse verfügbaren Verbindungen zu verstehen. Verschiedene Diagramme verwenden unterschiedliche Eigenschaftsnamen für Edgetypen, sodass mehrere Variationen bereitgestellt werden. In diesem Beispiel wird das BloodHound_Entra Diagramm verwendet, um Berechtigungsbeziehungen in Microsoft Entra-Umgebungen anzuzeigen.

graph('BloodHound_Entra')
| graph-match (source)-[edge]->(target)
    project edge_labels = labels(edge)
| mv-expand label = edge_labels to typeof(string)
| summarize count() by label
| top 5 by count_ desc
label zählen_
AZMGAddOwner 403412
AZMGAddSecret 345324
AZAddSecret 24666
AZContains 12924
AZRunsAs 6269

Suchen der meisten verbundenen Knoten (höchster Grad):

Die Knotengradanalyse zeigt die einflussreichsten oder zentralen Entitäten in Ihrem Diagramm an. Knoten mit hohem Grad stellen häufig wichtige Akteure, Engpässe oder wichtige Infrastrukturkomponenten dar. In diesem Beispiel wird das LDBC_SNB_Interactive Diagramm verwendet, ein Dataset für soziale Netzwerke ideal zum Analysieren von Verbindungsmustern und Einfluss.

// Find nodes with highest total degree (in + out)
graph('LDBC_SNB_Interactive')
| graph-match (node)
    project node_id = node.id, 
            in_degree = node_degree_in(node),
            out_degree = node_degree_out(node),
            total_degree = node_degree_in(node) + node_degree_out(node)
| order by total_degree desc
| take 5
node_id in_degree out_degree total_degree
0 41076 1 41077
1 35169 1 35170
50 12080 1 12081
49 11554 1 11555
58 7571 1 7572

Suchen von Knoten mit dem höchsten Grad (die meisten eingehenden Verbindungen):

Hohe In-Grad-Knoten sind häufig Ziele von Einfluss, beliebten Zielen oder zentralen Ressourcen. In sozialen Netzwerken könnten diese einflussreiche Menschen sein; in Infrastrukturdiagrammen könnten diese kritische Dienste sein. In diesem Beispiel wird das LDBC_Financial Diagramm verwendet, um Konten zu identifizieren, die die meisten Transaktionen erhalten.

graph('LDBC_Financial')
| graph-match (node)
    project node_id = node.node_id, 
            node_labels = labels(node),
            in_degree = node_degree_in(node)
| order by in_degree desc
| take 3
node_id node_labels in_degree
Account::99079191802151398 [
"ACCOUNT"
]
314
Account::4868391197187506662 [
"ACCOUNT"
]
279
Account::4896538694858573544 [
"ACCOUNT"
]
184

Suchen von Knoten mit dem höchsten Grad (die meisten ausgehenden Verbindungen):

Knoten mit hohem Grad sind häufig Quellen von Einfluss, Distributoren oder Verbinderhubs. Diese Entitäten initiieren in der Regel viele Beziehungen oder verteilen Ressourcen an andere. In diesem Beispiel wird das LDBC_Financial Diagramm verwendet, um Konten zu identifizieren, die die meisten Transaktionen tätigen.

graph('LDBC_Financial')
| graph-match (node)
    project node_id = node.node_id, 
            node_labels = labels(node),
            out_degree = node_degree_out(node)
| order by out_degree desc
| take 3
node_id node_labels out_degree
Account::236720455413661980 [
"ACCOUNT"
]
384
Konto::56576470318842045 [
"ACCOUNT"
]
106
Account::4890627720347648300 [
"ACCOUNT"
]
81

Beziehungsmusteranalyse

Diese Abfragen helfen bei der Identifizierung struktureller Muster und komplexer Beziehungen, die auf wichtige Verhaltensweisen oder Anomalien in Ihren Daten hinweisen können.

Entdecken Sie dreieckige Beziehungen (Knoten, die in einem Dreieck verbunden sind):

Dreieckige Muster deuten häufig auf enge Zusammenarbeit, gegenseitige Abhängigkeiten oder geschlossene Prozesse hin. In sozialen Netzwerken vertreten diese Gruppen von Freunden; in Geschäftsprozessen können sie Genehmigungsketten oder Redundanzmuster angeben. In diesem Beispiel wird das BloodHound_AD Diagramm verwendet, um Zirkelberechtigungsbeziehungen in Active Directory-Umgebungen zu identifizieren.

graph('BloodHound_AD')
| graph-match (a)-->(b)-->(c)-->(a)
    where a.id != b.id and b.id != c.id and c.id != a.id
    project node1 = a.name, node2 = b.name, node3 = c.name
| take 3
node1 node2 node3
GEIST. CORP USERS@GHOST.CORP DOMÄNE CONTROLLERS@GHOST.CORP
GESPENST. CORP USERS@WRAITH.CORP DOMÄNE CONTROLLERS@WRAITH.CORP
DU001@PHANTOM.CORP ADMINISTRATORS@PHANTOM.CORP DOMÄNE ADMINS@PHANTOM.CORP

Eigenschaftenanalyse

Wenn Sie die auf Ihren Knoten verfügbaren Eigenschaften verstehen, können Sie komplexere Abfragen erstellen und Probleme mit der Datenqualität identifizieren.

Erkunden von Knoteneigenschaften:

Diese Abfrage zeigt an, welche Informationen mit Ihren Knoten gespeichert werden, sodass Sie die verfügbaren Attribute zum Filtern und Analysieren verstehen können. In diesem Beispiel wird das BloodHound_Entra Diagramm verwendet, um das Schema von AZUser-Knoten zu untersuchen und zu verstehen, welche Eigenschaften für Microsoft Entra-Benutzerobjekte verfügbar sind.

graph('BloodHound_Entra')
| graph-match (node)
    where labels(node) has "AZUser"  // Replace with actual label
    project properties = node.properties
| mv-apply properties on (
        mv-expand kind=array properties
        | where isnotempty(properties[1])
        | extend bag =bag_pack(tostring(properties[0]), properties[1])
        | summarize properties = make_bag(bag)
    )
| summarize buildschema(properties)
schema_properties
{
"onpremsyncenabled": "bool",
"system_tags": "string",
"lastcollected": "string",
"pwdlastset": "string",
"usertype": "string",
"userprincipalname": "string",
"email": "string",
"tenantid": "guid",
"name": "string",
"lastseen": "string",
"displayname": "string",
"enabled": "bool",
"title": "string",
"onpremid": "string",
"objectid": "guid",
"whencreated": "string"
}

Suchen Sie alle Eigenschaften aller Knoten nach Beschriftung:

Diese erweiterte Schemaermittlungsabfrage identifiziert alle Eigenschaftsnamen, die über Knoten jedes Bezeichnungstyps vorhanden sind. Im Gegensatz zur vorherigen Abfrage, die die Schemastruktur anzeigt, aggregiert diese Abfrage Eigenschaftsnamen über alle Knoten desselben Typs, sodass Sie verstehen können, welche Eigenschaften konsistent verfügbar sind und welche optional oder selten sein können. In diesem Beispiel wird das LDBC_SNB_Interactive Diagramm verwendet, um die vollständige Eigenschaftslandschaft verschiedener Entitätstypen im Dataset für soziale Netzwerke zu untersuchen.

graph('LDBC_SNB_Interactive')
| graph-match (node)
    project properties = node, labels = labels(node)
| mv-apply properties on (
        mv-expand kind=array properties
        | where isnotempty(properties[1])
        | summarize properties = make_set(properties[0])
    )
| mv-expand label = labels to typeof(string)
| summarize properties =make_set(properties) by label
| take 3
label Eigenschaften
TAGCLASS [
"id",
"node_id",
"lbl",
"name",
"url"
]
ETIKETT [
"id",
"node_id",
"lbl",
"name",
"url"
]
FORUM [
"id",
"creationDate",
"node_id",
"lbl",
"title"
]

Suchen Sie alle Eigenschaften aller Kanten nach Beschriftung:

Diese Abfrage führt die Schemaermittlung für Edgeeigenschaften (Beziehung) aus, die zeigt, welche Informationen mit jedem Beziehungstyp in Ihrem Diagramm gespeichert werden. Das Verständnis von Edgeeigenschaften ist entscheidend für die Analyse von Beziehungsmetadaten wie Zeitstempeln, Gewichtungen, Konfidenzbewertungen oder anderen Attributen, die Kontext zu Verbindungen bereitstellen. In diesem Beispiel wird das BloodHound_AD Diagramm verwendet, um die Eigenschaften zu untersuchen, die für verschiedene Typen von Active Directory-Berechtigungsbeziehungen verfügbar sind.

graph('BloodHound_AD')
| graph-match ()-[e]-()
    project properties = e, labels = labels(e)
| mv-apply properties on (
        mv-expand kind=array properties
        | where isnotempty(properties[1])
        | summarize properties = make_set(properties[0])
    )
| mv-expand label = labels to typeof(string)
| summarize properties =make_set(properties) by label
| take 3
label Eigenschaften
GetChangesAll [
"id",
"lbl",
"src",
"dst",
"properties",
"lastseen"
]
OwnsRaw [
"id",
"lbl",
"src",
"dst",
"properties",
"lastseen"
]
AddKeyCredentialLink [
"id",
"lbl",
"src",
"dst",
"properties",
"lastseen"
]

Suchen von Knoten mit bestimmten Eigenschaftswerten:

Verwenden Sie dieses Muster, um Entitäten mit bestimmten Merkmalen zu suchen oder die Datenqualität zu überprüfen, indem Sie auf erwartete Eigenschaftswerte überprüfen. In diesem Beispiel wird das BloodHound_Entra Diagramm verwendet, um Knoten mit bestimmten Namenseigenschaften in Microsoft Entra-Umgebungen zu finden.

graph('BloodHound_Entra')
| graph-match (node)
    where isnotempty(node.properties.name)
    project node_id = node.id, property_value = node.properties.name
| take 3
node_id property_value
1 JJACOB@PHANTOMCORP.ONMICROSOFT.COM
10 CJACKSON@PHANTOMCORP.ONMICROSOFT.COM
12 RHALL@PHANTOMCORP.ONMICROSOFT.COM

Topologie des Diagramms

Wenn Sie die allgemeine Topologie Ihres Diagramms verstehen, werden die Typen von Verbindungen angezeigt, die zwischen verschiedenen Entitätstypen vorhanden sind. Diese Analyse hilft Ihnen, das Datenmodell zu verstehen, die am häufigsten verwendeten Beziehungsmuster zu identifizieren und potenzielle Pfade für Traversalabfragen zu ermitteln. Die Topologieabfrage zeigt an, welche Knotenbeschriftungen eine Verbindung mit den anderen Knotenbeschriftungen über bestimmte Edgetypen herstellen, wodurch eine umfassende Übersicht über die Struktur Ihres Diagramms bereitgestellt wird.

//Topology of the graph - What's connected to what?
graph('LDBC_Financial')
| graph-match (src)-[e]->(dst)
    project SourceLabels = labels(src), EdgeLabels = labels(e), DestinationLabels = labels(dst)
| mv-expand EdgeLabel = EdgeLabels to typeof(string)
| mv-expand SourceLabel = SourceLabels to typeof(string)
| mv-expand DestinationLabel = DestinationLabels to typeof(string)
| summarize Count = count() by SourceLabel, EdgeLabel, DestinationLabel
SourceLabel EdgeLabel DestinationLabel Anzahl
FIRMA GARANTIE FIRMA 202
FIRMA APPLY DARLEHEN 449
PERSON APPLY DARLEHEN 927
KONTO ZURÜCKZAHLEN DARLEHEN 2747
DARLEHEN DEPONIEREN KONTO 2758
KONTO ÜBERTRAGUNG KONTO 8132
KONTO ZURÜCKZIEHEN KONTO 9182
PERSON GARANTIE PERSON 377
FIRMA BESITZEN KONTO 671
FIRMA INVESTIEREN FIRMA 679
PERSON BESITZEN KONTO 1384
MITTEL SIGN_IN KONTO 2489
PERSON INVESTIEREN FIRMA 1304