Teilen über


GQL-Diagrammtypen

Hinweis

Dieses Feature ist zurzeit als öffentliche Preview verfügbar. Diese Vorschauversion wird ohne Vereinbarung zum Servicelevel bereitgestellt und ist nicht für Produktionsworkloads vorgesehen. Manche Features werden möglicherweise nicht unterstützt oder sind nur eingeschränkt verwendbar. Weitere Informationen finden Sie unter Zusätzliche Nutzungsbestimmungen für Microsoft Azure-Vorschauen.

Ein Diagrammtyp beschreibt die Struktur Ihres Diagramms, indem definiert wird, welche Knoten und Kanten vorhanden sein können. Stellen Sie sich eine Vorlage oder ein Schema vor– sie gibt die Form von Knoten und Kanten im Diagramm in Bezug auf ihre Beschriftungen und Eigenschaften an. Für Ränder (die Verbindungen zwischen Knoten) gibt sie auch an, welche Arten von Rändern eine Verbindung herstellen können. Wenn Sie mit relationalen Datenbanken vertraut sind, funktionieren Diagrammtypen ähnlich wie er-Diagramme, die Tabellen und Fremdschlüsselbeziehungen beschreiben.

Von Bedeutung

In diesem Artikel wird ausschließlich das Beispieldiagramm-Dataset für soziale Netzwerke verwendet.

Graph-Typen bieten mehrere wichtige Vorteile:

  • Datenüberprüfung: Stellen Sie sicher, dass Ihr Diagramm nur gültige Knoten- und Randkombinationen enthält.
  • Abfrageoptimierung: Helfen Sie dem Abfragemodul, Ihre Datenstruktur zu verstehen, um eine bessere Leistung zu erzielen.
  • Dokumentation: Dient als klare Spezifikation der Diagrammstruktur für Entwickler und Analysten.

Hinweis

In diesem Artikel werden Diagrammtypen konzeptuell vorgestellt und ihre Definition mithilfe der im GQL-Standard definierten Syntax veranschaulicht. Diese Syntax wird derzeit jedoch nicht direkt für Graph in Microsoft Fabric unterstützt.

Strukturell definiert ein Diagrammtyp zulässige Knotentypen und Randtypen von Diagrammen des Diagrammtyps sowie zusätzliche Einschränkungen, die diese Diagramme weiter einschränken.

Hinweis

Graph-Typen werden durch eine Reihe von Knotentypen, Edgetyp- und Einschränkungsdefinitionen definiert. Durch das Ändern der Reihenfolge dieser Definitionen wird der diagrammtyp, der definiert wird, nicht geändert.

Definieren von Knotentypen

Ein Knotentyp gibt an, welche Bezeichnungen und Eigenschaftentypen Ihre Knoten aufweisen können. Hier erfahren Sie, wie Sie einen einfachen Knotentyp angeben:

(:Organization => { 
  id :: UINT64 NOT NULL, 
  name :: STRING, 
  url :: STRING 
})

In diesem Beispiel wird ein Knotentyp erstellt, der Knoten definiert mit:

  • Die Bezeichnung Organization.
  • Eine id Eigenschaft, die nicht signierte ganzzahlige Werte enthält und nicht null sein kann.
  • Eine name Eigenschaft, die Zeichenfolgenwerte enthält (kann null sein).
  • Eine url Eigenschaft, die Zeichenfolgenwerte enthält (kann null sein).

Der :: Operator gibt den Datentyp für jede Eigenschaft an, während NOT NULL angegeben wird, dass die Eigenschaft immer einen Wert aufweisen muss.

Hinweis

NOT NULL wird als Teil des Typs in GQL betrachtet, der sich von SQL unterscheidet.

Knotentypen können auch komplexer sein, mit weiteren Eigenschaften und Datentypen:

(:Person => {
    id :: UINT64 NOT NULL,
    creationDate :: ZONED DATETIME,
    firstName :: STRING,
    lastName :: STRING,
    gender :: STRING,
    birthday :: UINT64,
    browserUsed :: STRING,
    locationIP :: STRING
})

Knotentypen mit mehreren Bezeichnungen

Knoten können mehrere Bezeichnungen aufweisen, um Vererbung und Kategorisierung zu unterstützen. Sie können mehrere Bezeichnungen für einen Knotentyp angeben, aber eine Bezeichnung (die "Schlüsselbeschriftung") muss den Knotentyp eindeutig identifizieren (Wenn nur eine Bezeichnung angegeben ist, wird dies als Schlüsselbeschriftung des Knotentyps bezeichnet).

Betrachten Sie beispielsweise Folgendes:

(:University => :Organization),

(:Company => :Organization)

University Hier sind Company die Schlüsselbeschriftungen der beiden definierten Knotentypen, während Organization es sich um eine sekundäre Bezeichnung handelt, die von beiden Typen gemeinsam verwendet wird. Beachten Sie, wie die Schlüsselbeschriftung und sekundäre Bezeichnungen in => jedem Knotentyp voneinander getrennt werden. Dieser Ansatz erstellt eine Typhierarchie, in der sowohl Universitäten als auch Unternehmen Arten von Organisationen sind.

Da Schlüsselbeschriftungen Knotentypen identifizieren, werden die eigenschaften von sekundären Bezeichnungen identifizierten Knotentypen bei Verwendung dieser Syntax automatisch geerbt. Daher kann die vorherige Syntax verstanden werden, um die folgenden Knotentypen effektiv zu definieren:

(:University => :Organization {
  id :: UINT64 NOT NULL, 
  name :: STRING, 
  url :: STRING 
}),

(:Company => :Organization {
  id :: UINT64 NOT NULL, 
  name :: STRING, 
  url :: STRING 
})

Hinweis

Schlüsselbeschriftungen sind wichtig, wenn Sie Knotentyphierarchien definieren. Sie helfen dem System zu verstehen, auf welchen Knotentyp Sie verweisen, wenn mehrere Typen dieselben Bezeichnungen gemeinsam verwenden.

Zeit sparen mit Vererbungsverknüpfungen

Wiederholte Bezeichnungen und Eigenschaften von übergeordneten Knotentypen werden mühsam und fehleranfällig. Graph in Microsoft Fabric stellt den += Operator bereit, sodass Sie nur die zusätzlichen (nicht inheritierten) Bezeichnungen und Eigenschaftentypen angeben können:

(:Post => :Message += {
    language :: STRING,
    imageFile :: STRING
})

Wenn keine zusätzlichen Eigenschaften angegeben werden, erbt das Diagramm alle erforderlichen Eigenschaften vom übergeordneten Typ:

(:Comment => :Message)  -- Same as: (:Comment => :Message += {})

Verwenden abstrakter Knotentypen

Sie können Knotentypen nur für die Erstellung von Hierarchien definieren, auch wenn Ihr Diagramm keine konkreten Knoten dieses Typs enthält. Abstrakte Knotentypen sind nützlich zum Erstellen konzeptioneller Gruppierungen und freigegebener Eigenschaftensätze. Zu diesem Zweck können Sie einen Knotentyp wie ABSTRACT in Graph in Microsoft Fabric definieren:

ABSTRACT (:Message => {
    id :: UINT64 NOT NULL,
    creationDate :: ZONED DATETIME,
    browserUsed :: STRING,
    locationIP :: STRING,
    content :: STRING,
    length :: UINT64
})

Abstrakte Knotentypen sind für das laden von direkten Diagrammen nicht verfügbar – sie sind nur vorhanden, um Ihre Hierarchie zu strukturieren und freigegebene Eigenschaften zu definieren. Konkrete Knotentypen, die von abstrakten Typen erben, können mit Daten geladen werden.

Definieren von Edgetypen und Familien

Ein Edgetyp definiert die Schlüsselbeschriftung, Eigenschaftentypen und Endpunktknotentypen für Kanten. In Graphdatenbanken stellen Ränder Verbindungen zwischen Knoten dar. Die Edgedefinition teilt dem System mit, welche Beziehungen in Ihrem Diagramm zulässig sind:

(:Person)-[:knows { creationDate :: ZONED DATETIME }]->(:Person)

Dieser Edgetyp definiert alle Kanten mit:

  • Die (Schlüssel) Beschriftung knows.
  • Eine creationDate Eigenschaft, die Werte enthält ZONED DATETIME (Zeitstempel zusammen mit einem Zeitzonenoffset).
  • Quell- und Zielendpunkte, die beide Knoten sein Person müssen.

Der Pfeil -> gibt die Richtung des Rands von Quelle zu Ziel an. Diese direktionalen Informationen sind entscheidend für das Verständnis der Semantik Ihres Graph.

Hier sind weitere Beispiele für Edgetypen:

(:Person)-[:studyAt { classYear :: UINT64 }]->(:University)
(:Person)-[:workAt { workFrom :: UINT64 }]->(:Company)

Sie müssen nur die Schlüsselbeschriftungen (Person, Universityoder Company) für Endpunktknotentypen angeben– Sie müssen die vollständige Knotentypdefinition nicht wiederholen. Das System löst diese Verweise auf die vollständigen Knotentypdefinitionen auf.

Graph-Edgetypfamilien

Graph Edge-Tastenbeschriftungen funktionieren anders als Knotenschlüsselbeschriftungen. Sie können mehrere Edgetypen mit derselben Schlüsselbeschriftung in einem Diagrammtyp haben, solange sie dieselben Bezeichnungen und Eigenschaftentypen haben. Zwei Edgetypen mit derselben Schlüsselbezeichnung müssen sich jedoch in mindestens einem Endpunktknotentyp unterscheiden. Wir rufen eine Reihe von Edgetypen mit derselben Schlüsselbezeichnung auf, die eine Edgetypfamilie ist.

Mit diesem Konzept können Sie den gleichen Beziehungstyp zwischen verschiedenen Entitätstypen modellieren.

Example:

(:City)-[:isPartOf]->(:Country),
(:Country)-[:isPartOf]->(:Continent)

Beide Edgetypen verwenden die isPartOf Bezeichnung, verbinden jedoch unterschiedliche Knotentypen und bilden eine Edgetypfamilie, die hierarchische Eindämmungsbeziehungen darstellt.

Verwenden Sie Knoten-Subtyping in Kantentypisierungen

Jeden möglichen Kantentyp zu erklären, kann etwas mühsam sein. Vereinfacht ist es auch möglich, Kantentypfamilien zu definieren, die mit der Hierarchie der Knotentypen übereinstimmen, die durch ihre Endpunkte impliziert wird.

Beispiel:

-- Node types
ABSTRACT (:Message { ... }),
(:Post => :Message { ... }),
(:Comment => :Message { ... }),

-- All edge types (x)-[:hasTag]->(:Tag) where x is at least a (:Message)
(<:Message)-[:hasTag]->(:Tag) 

Dies definiert implizit die folgenden Kantentypen:

(:Post)-[:hasTag]->(:Tag) 
(:Comment)-[:hasTag]->(:Tag) 

Unterstützte Eigenschaftentypen

Wenn Sie einen Eigenschaftstyp definieren, muss der Eigenschaftswerttyp eins sein, der in Microsoft Fabric unterstützt wird. Die Auswahl der richtigen Datentypen ist wichtig für die Speichereffizienz und abfrageleistung.

Hier sind die Datentypen, die Sie für Eigenschaftswerte verwenden können:

  • INT (auch: INT64)
  • UINT (auch: UINT64)
  • STRING
  • BOOL (auch: BOOLEAN)
  • DOUBLE (auch: FLOAT64, FLOAT)
  • T NOT NULL, wobei T es sich um einen der vorherigen Datentypen handelt.
  • LIST<T> und LIST<T> NOT NULL, wobei T es sich um einen der vorherigen Datentypen handelt.

Vollständige Informationen zu Werttypen finden Sie unter GQL-Werte und -Werttypen.

Von Bedeutung

Alle Eigenschaftstypen mit demselben Namen, die in einem Knotentyp oder Randtyp eines bestimmten Diagrammtyps auftreten, müssen denselben Eigenschaftswerttyp angeben. Die einzige Ausnahme: Sie können unterscheiden, ob sie den Nullwert enthalten. Beispielsweise wäre ein Diagrammtyp mit (:A { id :: STRING }), (:B { id :: STRING NOT NULL}) dieser Regel gültig, während ein Diagrammtyp ungültig (:A { id :: STRING }), (:B { id :: INT}) wäre.

Einrichten von Knotenschlüsseleinschränkungen

Knotenschlüsseleinschränkungen definieren, wie jeder Knoten in Ihrem Diagramm durch einen oder mehrere eigenschaftswerte eindeutig identifiziert wird. Schlüsseleinschränkungen funktionieren wie Primärschlüsseleinschränkungen in relationalen Datenbanken und stellen die Datenintegrität sicher. Eine Knotenschlüsseleinschränkung kann knotenübergreifend auf mehrere Knotentypen ausgerichtet werden, mit denen Sie Knotenschlüssel für ganze konzeptionelle Hierarchien definieren können.

Das Verständnis wichtiger Einschränkungen ist von entscheidender Bedeutung, da sie:

  • Eindeutigkeit sicherstellen: Verhindern doppelter Knoten basierend auf Ihrer Geschäftslogik.
  • Effiziente Nachschlagevorgänge ermöglichen: Ermöglichen Sie dem System, Abfragen zu optimieren, die nach bestimmten Knoten suchen.
  • Unterstützung der Datenintegration: Bieten Sie eine stabile Möglichkeit zum Verweisen auf Knoten in verschiedenen Datenquellen.

Von Bedeutung

Für Graph in Microsoft Fabric muss genau eine Schlüsseleinschränkung jeden Knoten einschränken.

Funktionsweise von Knotenschlüsseleinschränkungen

Sie können Knotenschlüsseleinschränkungen in Ihrem Diagrammtyp angeben. Jede Knotenschlüsseleinschränkung weist bestimmte Merkmale auf, die sie effektiv funktionieren lassen:

Komponenten einer Knotenschlüsseleinschränkung:

  • Verfügt über einen eindeutigen Namen innerhalb des Diagrammtyps, um leicht zu referenziert werden.
  • Definiert gezielte Knoten mithilfe eines einfachen Einschränkungsmusters , das angibt, auf welche Knoten die Einschränkung angewendet wird.
  • Definiert die Eigenschaften, die den eindeutigen Schlüsselwert bilden.

Example:

CONSTRAINT person_pk
  FOR (n:Person) REQUIRE n.id IS KEY

Diese Syntax erstellt eine Knotenschlüsseleinschränkung, die für alle Knoten mit person_pk der Bezeichnung aufgerufen Person wird. Die Einschränkung stellt sicher, dass jeder Knoten im Diagramm durch seine id Eigenschaft eindeutig identifiziert wird. Keine zwei Knoten mit der Person Beschriftung können denselben id Wert aufweisen.

Sie können auch zusammengesetzte Schlüssel definieren, die mehrere Eigenschaften zusammen verwenden, um die Eindeutigkeit mithilfe der CONSTRAINT ... FOR ... REQUIRE (n.prop1, n.prop2) IS KEY Syntax sicherzustellen.

Von Bedeutung

Eigenschaften, die in Schlüsseleinschränkungen verwendet werden:

  • Darf nicht null sein.
  • Muss wie NOT NULL in den Knotentypen und Edgetypen deklariert werden, die durch die Schlüsseleinschränkung bestimmt sind.