Sdílet prostřednictvím


Typy grafů GQL

Poznámka:

Tato funkce je aktuálně ve verzi Public Preview. Tato verze Preview se poskytuje bez smlouvy o úrovni služeb a nedoporučuje se pro produkční úlohy. Některé funkce nemusí být podporované nebo můžou mít omezené možnosti. Další informace najdete v dodatečných podmínkách použití pro verze Preview v Microsoft Azure.

Typ grafu popisuje strukturu grafu definováním uzlů a hran, které mohou existovat. Představte si ho jako podrobný plán nebo schéma – určuje tvar uzlů a hran v grafu z hlediska jejich popisků a vlastností. U hran (připojení mezi uzly) také určuje, které druhy hran se můžou připojit k jakým druhům uzlů. Pokud znáte relační databáze, typy grafů fungují podobně jako diagramy ER popisování tabulek a relací cizích klíčů.

Důležité

Tento článek výhradně používá datovou sadu grafů ze sociálních sítí.

Typy grafů poskytují několik klíčových výhod:

  • Ověření dat: Ujistěte se, že graf obsahuje jenom platné kombinace uzlů a okrajů.
  • Optimalizace dotazů: Pomozte dotazovacímu stroji porozumět vaší datové struktuře pro lepší výkon.
  • Dokumentace: Slouží jako jasná specifikace struktury grafu pro vývojáře a analytiky.

Poznámka:

Tento článek představuje typy grafů koncepčně a ilustruje jejich definici pomocí syntaxe definované ve standardu GQL. Tato syntaxe se ale v současné době nepodporuje přímo pro graf v Microsoft Fabric.

Typ grafu definuje povolené typy uzlů a hraniční typy grafů typu grafu a další omezení, která tyto grafy dále omezují.

Poznámka:

Typy grafů jsou definovány tak, že poskytují sadu typů uzlů, hraničního typu a definic omezení. Změna pořadí těchto definic nemění typ grafu, který se definuje.

Definování typů uzlů

Typ uzlu určuje, jaké popisky a typy vlastností můžou uzly mít. Tady je postup, jak zadat základní typ uzlu:

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

Tento příklad vytvoří typ uzlu, který definuje uzly pomocí:

  • Popisek Organization.
  • Vlastnost id , která obsahuje celočíselné hodnoty bez znaménka a nemůže mít hodnotu null.
  • name Vlastnost, která obsahuje řetězcové hodnoty (může mít hodnotu null).
  • url Vlastnost, která obsahuje řetězcové hodnoty (může mít hodnotu null).

Operátor :: určuje datový typ pro každou vlastnost, zatímco NOT NULL označuje, že vlastnost musí mít vždy hodnotu.

Poznámka:

NOT NULL je považován za součást typu v jazyce GQL, který se liší od JAZYKa SQL.

Typy uzlů můžou být také složitější s více vlastnostmi a datovými typy:

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

Typy uzlů s více popisky

Uzly můžou mít více popisků pro podporu dědičnosti a kategorizace. Pro typ uzlu můžete zadat více popisků, ale jeden popisek (popisek klíče) musí jednoznačně identifikovat typ uzlu (Pokud je zadán pouze jeden popisek, bude to popisek klíče typu uzlu).

Jako příklad zvažte:

(:University => :Organization),

(:Company => :Organization)

University Tady jsou Company popisky klíčů dvou definovaných typů uzlů, zatímco Organization sekundární popisek sdílený oběma typy. Všimněte si, jak se popisek klíče a sekundární popisky oddělují => v jednotlivých typech uzlů. Tento přístup vytvoří hierarchii typů, kde univerzity i společnosti jsou typy organizací.

Vzhledem k tomu, že popisky klíčů identifikují typy uzlů, vlastnosti typů uzlů identifikované sekundárními popisky se při použití této syntaxe automaticky dědí. Předchozí syntaxi proto lze efektivně definovat následující typy uzlů:

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

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

Poznámka:

Při definování hierarchií typů uzlů jsou klíčové popisky. Pomáhají systému pochopit, na jaký typ uzlu odkazujete, když stejný popisek sdílí více typů.

Úspora času pomocí zkratek dědičnosti

Opakující se popisky a vlastnosti z nadřazených typů uzlů jsou zdlouhavé a náchylné k chybám. Graph v Microsoft Fabric poskytuje operátor, += takže můžete zadat pouze nadbytečné (neinheritované) popisky a typy vlastností:

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

Pokud nejsou zadány žádné další vlastnosti, graf dědí všechny požadované vlastnosti z nadřazeného typu:

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

Použití abstraktních typů uzlů

Typy uzlů můžete definovat čistě pro vytváření hierarchií, i když graf neobsahuje konkrétní uzly tohoto typu. Abstraktní typy uzlů jsou užitečné pro vytváření koncepčních seskupení a sad sdílených vlastností. Pro tento účel můžete definovat typ uzlu jako ABSTRACT v grafu v Microsoft Fabric:

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

Abstraktní typy uzlů nejsou k dispozici pro přímé načítání grafu – existují pouze pro strukturování hierarchie a definování sdílených vlastností. Konkrétní typy uzlů, které dědí z abstraktních typů, lze načíst s daty.

Definování typů a rodin okrajů

Typ hrany definuje popisek klíče, typy vlastností a typy uzlů koncového bodu pro hrany. V grafových databázích představují hrany propojení mezi uzly. Definice hraničních zařízení říká systému, jaké relace jsou v grafu povolené:

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

Tento typ hrany definuje všechny hrany pomocí:

  • Popisek knows(klíč) .
  • Vlastnost creationDate , která obsahuje ZONED DATETIME hodnoty (časové razítko společně s posunem časového pásma).
  • Zdrojové i cílové koncové body, které musí být Person oba uzly.

Šipka -> označuje směr okraje od zdroje k cíli. Tyto směrové informace jsou zásadní pro pochopení sémantiky grafu.

Tady jsou další příklady hraničních typů:

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

Pro typy uzlů koncového bodu stačí zadat popisky klíčů (PersonUniversitynebo Company) – nemusíte opakovat úplnou definici typu uzlu. Systém tyto odkazy přeloží na definice celého typu uzlu.

Rodiny typů okrajů grafu

Popisky klíčů edge grafu fungují jinak než popisky klíčů uzlů. V typu grafu můžete mít více typů okrajů se stejným popiskem klíče, pokud mají stejné popisky a typy vlastností. Dva hraniční typy se stejným popiskem klíče se ale musí lišit alespoň v jednom typu uzlu koncového bodu. Nazýváme sadu typů okrajů se stejným popiskem klíče jako řada typů okrajů.

Tento koncept umožňuje modelovat stejný typ vztahu mezi různými typy entit.

Example:

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

Oba typy okrajů používají isPartOf popisek, ale propojují různé typy uzlů, které tvoří řadu typů okrajů, která představuje hierarchické vztahy zahrnutí.

Použijte podtypování uzlů v definicích typů hran

Muset vysvětlovat každý možný typ hrany může být trochu únavné. Pro zjednodušení je také možné definovat rodiny typů hran, které odpovídají hierarchii typů uzlů vyplývající z jejich koncových bodů.

Příklad:

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

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

To implicitně definuje následující typy hran:

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

Podporované typy vlastností

Při definování typu vlastnosti musí být typ hodnoty vlastnosti takový, který graf v Microsoft Fabric podporuje. Volba správných datových typů je důležitá pro efektivitu úložiště a výkon dotazů.

Tady jsou datové typy, které můžete použít pro hodnoty vlastností:

  • INT (také: INT64)
  • UINT (také: UINT64)
  • STRING
  • BOOL (také: BOOLEAN)
  • DOUBLE (také: FLOAT64, FLOAT)
  • T NOT NULL, kde T je některý z předchozích datových typů.
  • LIST<T> a LIST<T> NOT NULL, kde T je některý z předchozích datových typů.

Úplné informace o typech hodnot najdete v tématu Hodnoty GQL a typy hodnot.

Důležité

Všechny typy vlastností se stejným názvem, které se vyskytují v typu uzlu nebo hraničním typu daného typu grafu, musí zadat stejný typ hodnoty vlastnosti. Jedinou výjimkou: Mohou se lišit v tom, zda obsahují hodnotu null. Například podle tohoto pravidla by byl typ (:A { id :: STRING }), (:B { id :: STRING NOT NULL}) grafu s platným typem, zatímco typ grafu s (:A { id :: STRING }), (:B { id :: INT}) by byl neplatný.

Nastavení omezení klíče uzlu

Omezení klíče uzlu definují, jak se jednotlivé uzly v grafu jedinečně identifikují jednou nebo více hodnotami jeho vlastností. Klíčová omezení fungují jako omezení primárního klíče v relačních databázích a zajišťují integritu dat. Omezení klíče uzlu může cílit na uzly napříč několika typy uzlů, které umožňují definovat klíče uzlů pro celé koncepční hierarchie.

Pochopení klíčových omezení je zásadní, protože:

  • Zajištění jedinečnosti: Zabránění duplicitním uzlům na základě obchodní logiky
  • Povolte efektivní vyhledávání: Umožňuje systému optimalizovat dotazy, které hledají konkrétní uzly.
  • Integrace dat podpory: Poskytuje stabilní způsob, jak odkazovat na uzly napříč různými zdroji dat.

Důležité

Pro graf v Microsoft Fabric musí přesně jedno omezení klíče omezit každý uzel.

Jak fungují omezení klíče uzlu

V typu grafu můžete zadat omezení klíče uzlu. Každé omezení klíče uzlu má specifické charakteristiky, díky kterým funguje efektivně:

Komponenty omezení klíče uzlu:

  • Obsahuje jedinečný název v rámci typu grafu, který umožňuje snadnou referenci.
  • Definuje cílové uzly pomocí jednoduchého vzoru omezení , který určuje, na které uzly se omezení vztahuje.
  • Definuje vlastnosti, které tvoří jedinečnou hodnotu klíče.

Example:

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

Tato syntaxe vytvoří omezení klíče uzlu volané person_pk pro všechny uzly s alespoňPerson popiskem. Omezení zajišťuje, aby každý uzel v grafu byl jedinečně identifikován jeho id vlastností. Žádné dva uzly s Person popiskem mohou mít stejnou id hodnotu.

Pomocí syntaxe můžete také definovat složené klíče, které používají více vlastností, abyste zajistili jedinečnost CONSTRAINT ... FOR ... REQUIRE (n.prop1, n.prop2) IS KEY .

Důležité

Vlastnosti použité v klíčových omezeních:

  • Nemůže mít hodnotu null.
  • Musí být deklarovány jako NOT NULL v typech uzlů a hraničních typech cílených omezením klíče.