Referenz zur Azure Digital Twins-Abfragesprache: MATCH-Klausel

Dieses Dokument enthält Referenzinformationen zur MATCH-Klausel für die Azure Digital Twins-Abfragesprache.

Die MATCH-Klausel wird in der Azure Digital Twins-Abfragesprache als Teil der FROM-Klausel verwendet. Mit MATCH können Sie angeben, welchem Muster beim Durchlaufen von Beziehungen im Azure Digital Twins-Graphen gefolgt werden soll (dies wird auch als Abfragemuster „variabler Hop“ bezeichnet).

Diese Klausel kann bei Abfragen optional genutzt werden.

Kernsyntax: MATCH

MATCH unterstützt beliebige Abfragen, die basierend auf bestimmten Beziehungsbedingungen einen Pfad zwischen Zwillingen in einem Bereich von Hops ermitteln.

Die Beziehungsbedingung kann mindestens eines der folgenden Details enthalten:

Eine Abfrage mit einer MATCH-Klausel muss auch die WHERE-Klausel verwenden, um $dtId für mindestens einen der Zwillinge anzugeben, auf den sie verweist.

Hinweis

MATCH ist eine Obermenge aller JOIN-Abfragen, die im Abfragespeicher ausgeführt werden können.

Syntax

Dies ist die grundlegende MATCH-Syntax.

Es enthält die folgenden Platzhalter:

  • twin_or_twin_collection (x2): Die MATCH-Klausel erfordert einen Operanden, um einen einzelnen Zwilling darzustellen. Der andere Operand kann einen weiteren einzelnen Zwilling oder eine Sammlung von Zwillingen darstellen.
  • relationship_condition: Definieren Sie in diesem Raum eine Bedingung, die die Beziehung zwischen den Zwillingen oder Zwillingssammlungen beschreibt. Die Bedingung kann die Beziehungsrichtung, den Beziehungsnamen, die Anzahl von Hops, Beziehungseigenschaften oder eine beliebige Kombination dieser Optionen angeben.
  • twin_ID: Geben Sie hier $dtId in einer der Zwillingssammlungen an, damit einer der Operanden einen einzelnen Zwilling darstellt.
--SELECT ... FROM ...  
MATCH (twin_or_twin_collection_1)-[relationship_condition]-(twin_or_twin_collection_2)
WHERE twin_or_twin_collection.$dtId = 'twin_ID' 
-- AND ...

Sie können eine der Zwillingssammlungen leer lassen, damit jeder Zwilling an dieser Stelle funktioniert.

Sie können auch die Anzahl der Beziehungsbedingungen ändern, um mehrere verkettete Beziehungsbedingungen oder überhaupt keine Beziehungsbedingung zu verwenden:

--Chained relationship conditions
-- SELECT ... FROM ... 
MATCH (twin_or_twin_collection_1)-[relationship_condition]-(twin_or_twin_collection_2)-[relationship_condition]-(twin_or_twin_collection_3)...
WHERE twin_or_twin_collection.$dtId = 'twin_ID'
-- No relationship condition
-- SELECT ... FROM ... 
MATCH (twin_or_twin_collection_1)
WHERE twin_or_twin_collection.$dtId = 'twin_ID'

Weitere Informationen zu den einzelnen Beziehungsbedingungstypen und deren Kombination finden Sie in den anderen Abschnitten dieses Dokuments.

Beispiel

Dies ist eine Beispielabfrage mit MATCH.

Die Abfrage gibt eine Beziehungsrichtung an und sucht nach Gebäude- und Sensorzwillingen. Dabei gilt Folgendes:

  • Der Sensor wird durch eine beliebige Beziehung von einem Gebäudezwilling mit der $dtId „Building21“ als Ziel angesprochen.
  • Der Sensor weist eine Temperatur über 50 Grad Fahrenheit auf. Das Gebäude und der Sensor sind beide im Abfrageergebnis enthalten.
SELECT Building, Sensor FROM DIGITALTWINS 
MATCH (Building)-[]->(Sensor) 
WHERE Building.$dtId = 'Building21' AND Sensor.temperature > 50

Angeben der Beziehungsrichtung

Verwenden Sie die Beziehungsbedingung in der MATCH-Klausel, um eine Beziehungsrichtung zwischen den Zwillingen anzugeben. Mögliche Richtungen sind von links nach rechts, von rechts nach links oder nicht richtungsgebunden. Zyklische Beziehungen werden automatisch erkannt, sodass eine Beziehung nur ein Mal durchlaufen wird.

Hinweis

Es ist möglich, bidirektionale Beziehungen mithilfe von Verkettung darzustellen.

Syntax

Hinweis

Die Beispiele in diesem Abschnitt konzentrieren sich auf die Beziehungsrichtung. Sie geben keine Beziehungsnamen an, sie verwenden standardmäßig einen einzelnen Hop und weisen den Beziehungen keine Abfragevariablen zu. Anweisungen zur weiteren Verwendung dieser anderen Bedingungen finden Sie unter Angeben des Beziehungsnamens, Angeben der Anzahl von Hops und Zuweisen einer Abfragevariablen zu einer Beziehung. Informationen dazu, wie Sie mehrere dieser Bedingungen in derselben Abfrage verwenden, finden Sie unter Kombinieren von MATCH-Vorgängen.

Direktionale Beziehungsbeschreibungen verwenden eine visuelle Darstellung eines Pfeils, um die Richtung der Beziehung anzugeben. Der Pfeil enthält ein Leerzeichen, in eckigen Klammern ([]), das für einen optionalen Beziehungsnamen vorgesehen ist.

In diesem Abschnitt wird die Syntax für verschiedene Richtungen von Beziehungen veranschaulicht. Die Platzhalterwerte, die durch Ihre Werte ersetzt werden sollen, sind source_twin_or_twin_collection und target_twin_or_twin_collection.

Verwenden Sie für eine Beziehung von links nach rechts die folgende Syntax.

-- SELECT ... FROM ...
MATCH (source_twin_or_twin_collection)-[]->(target_twin_or_twin_collection)
-- WHERE ...

Verwenden Sie für eine Beziehung von rechts nach links die folgende Syntax.

-- SELECT ... FROM ...
MATCH (target_twin_or_twin_collection)<-[]-(source_twin_or_twin_collection)
-- WHERE ...

Verwenden Sie für eine nicht richtungsgebundene Beziehung die folgende Syntax. Dadurch wird keine Richtung für die Beziehung angegeben, sodass Beziehungen in beliebiger Richtung in das Ergebnis aufgenommen werden.

-- SELECT ... FROM ...
MATCH (source_twin_or_twin_collection)-[]-(target_twin_or_twin_collection)
-- WHERE ...

Tipp

Nicht richtungsgebundene Abfragen erfordern zusätzliche Verarbeitung, was zu erhöhter Latenz und höheren Kosten führen kann.

Beispiele

Das erste Beispiel zeigt ein richtungsgebundenes Durchlaufen von links nach rechts. Diese Abfrage findet die Zwillinge „Room“ und „Factory“. Dabei gilt Folgendes:

  • „Room“ zielt auf „Factory“ (mit beliebigem Beziehungsnamen) ab.
  • „Room“ weist einen Temperaturwert auf, der größer als 50 ist.
  • Die $dtId von „Factory“ lautet „ABC“.
SELECT Room, Factory FROM DIGITALTWINS MATCH (Room)-[]->(Factory) 
WHERE Room.temperature > 50 AND Factory.$dtId = 'ABC'

Hinweis

MATCH-Abfragen, die $dtId-Filter für einen anderen als den Startzwilling für den MATCH-Durchlauf enthalten, zeigen möglicherweise leere Ergebnisse an. Dies gilt für factory.$dtId im obigen Beispiel. Weitere Informationen finden Sie unter Einschränkungen.

Das folgende Beispiel zeigt ein richtungsgebundenes Durchlaufen von rechts nach links. Diese Abfrage ähnelt der Abfrage oben, aber die Richtung der Beziehung zwischen „Room“ und „Factory“ wird umgekehrt. Diese Abfrage findet die Zwillinge „Room“ und „Factory“. Dabei gilt Folgendes:

  • „Factory“ zielt auf „Room“ (mit beliebigem Beziehungsnamen) ab.
  • Die $dtId von „Factory“ lautet „ABC“.
  • „Room“ weist einen Temperaturwert auf, der größer als 50 ist.
SELECT Room, Factory FROM DIGITALTWINS MATCH (Room)<-[]-(Factory) 
WHERE Factory.$dtId = 'ABC' AND Room.temperature > 50

Das folgende Beispiel zeigt ein nicht richtungsgebundenes Durchlaufen. Diese Abfrage findet die Zwillinge „Room“ und „Factory“. Dabei gilt Folgendes:

  • „Room“ und „Factory“ teilen sich einen beliebigen Beziehungsnamen in beide Richtungen.
  • Die $dtId von „Factory“ lautet „ABC“.
  • „Room“ weist einen Luftfeuchtigkeitswert auf, der größer als 70 ist.
SELECT Factory, Room FROM DIGITALTWINS MATCH (Factory)-[]-(Room) 
WHERE Factory.$dtId ='ABC'  AND Room.humidity > 70

Angeben des Beziehungsnamens

Optional können Sie die Beziehungsbedingung in der MATCH-Klausel verwenden, um Namen für die Beziehungen zwischen den Zwillingen anzugeben. Sie können einen einzelnen Namen oder eine Liste möglicher Namen angeben. Der optionale Beziehungsname ist als Teil der Pfeilsyntax zum Angeben der Beziehungsrichtung enthalten.

Wenn Sie keinen Beziehungsnamen angeben, bindet die Abfrage standardmäßig alle Beziehungsnamen ein.

Tipp

Das Angeben von Beziehungsnamen in der Abfrage kann die Leistung verbessern und Ergebnisse besser vorhersagbar machen.

Syntax

Hinweis

Die Beispiele in diesem Abschnitt konzentrieren sich auf den Beziehungsnamen. Sie zeigen alle nicht richtungsgebundenen Beziehungen an, sie verwenden standardmäßig einen einzelnen Hop und weisen den Beziehungen keine Abfragevariablen zu. Anweisungen zur weiteren Verwendung dieser anderen Bedingungen finden Sie unter Angeben der Beziehungsrichtung, Angeben der Anzahl von Hops und Zuweisen einer Abfragevariablen zu einer Beziehung. Informationen dazu, wie Sie mehrere dieser Bedingungen in derselben Abfrage verwenden, finden Sie unter Kombinieren von MATCH-Vorgängen.

Geben Sie in eckigen Klammern ([]) nach einem Doppelpunkt (:) den Namen einer Beziehung an, die in der MATCH-Klausel durchlaufen werden soll. In diesem Abschnitt wird die Syntax zum Angeben benannter Beziehungen gezeigt.

Verwenden Sie für einen einzelnen Namen die folgende Syntax. Die Platzhalterwerte, die durch Ihre Werte ersetzt werden sollen, sind twin_or_twin_collection_1, relationship_name und twin_or_twin_collection_2.

-- SELECT ... FROM ...
MATCH (twin_or_twin_collection_1)-[:relationship_name]-(twin_or_twin_collection_2)
-- WHERE ...

Verwenden Sie für mehrere mögliche Namen die folgende Syntax. Die Platzhalterwerte, die durch Ihre Werte ersetzt werden sollen, sind twin_or_twin_collection_1, relationship_name_option_1, relationship_name_option_2, twin_or_twin_collection_2 und der Hinweis, das Muster bei Bedarf für die Anzahl der Beziehungsnamen fortzusetzen, die Sie eingeben möchten.

-- SELECT ... FROM ...
MATCH (twin_or_twin_collection_1)-[:relationship_name_option_1|relationship_name_option_2|continue pattern as needed...]-(twin_or_twin_collection_2)
-- WHERE ...

Wichtig

Der Doppelpunkt (:) innerhalb der eckigen Klammern ist für die Syntax erforderlich, um einen Beziehungsnamen in einer MATCH-Abfrage anzugeben. Wenn Sie den Doppelpunkt nicht einschließen, gibt Ihre Abfrage keinen Beziehungsnamen an. Stattdessen haben Sie dann eine Abfrage, die der Beziehung eine Abfragevariable zuweist.

(Standard) Um den Namen nicht anzugeben, belassen Sie die Klammern wie hier gezeigt ohne Namensinformationen:

-- SELECT ... FROM ...
MATCH (twin_or_twin_collection_1)-[]-(twin_or_twin_collection_2)
-- WHERE ...

Beispiele

Das folgende Beispiel zeigt einen einzelnen Beziehungsnamen. Diese Abfrage findet die Zwillinge „Building“ und „Sensor“. Dabei gilt Folgendes:

  • „Building“ verfügt über eine „contains“-Beziehung zu „Sensor“ (in beide Richtungen).
  • Die $dtId von „Building“ lautet „Seattle21“.
SELECT Building, Sensor FROM DIGITALTWINS   
MATCH (Building)-[:contains]-(Sensor)  
WHERE Building.$dtId = 'Seattle21'

Das folgende Beispiel zeigt mehrere mögliche Beziehungsnamen. Diese Abfrage ähnelt der Abfrage oben, aber es gibt mehrere mögliche Beziehungsnamen, die im Ergebnis enthalten sind. Diese Abfrage findet die Zwillinge „Building“ und „Sensor“. Dabei gilt Folgendes:

  • „Building“ verfügt über eine „contains“- oder „isAssociatedWith“-Beziehung zu „Sensor“ (in beide Richtungen).
  • Die $dtId von „Building“ lautet „Seattle21“.
SELECT Building, Sensor FROM DIGITALTWINS   
MATCH (Building)-[:contains|isAssociatedWith]-(Sensor)  
WHERE building.$dtId = 'Seattle21'

Im folgenden Beispiel ist kein Beziehungsname angegeben. Daher werden Beziehungen mit einem beliebigen Namen in das Abfrageergebnis aufgenommen. Diese Abfrage findet die Zwillinge „Building“ und „Sensor“. Dabei gilt Folgendes:

  • „Building“ verfügt über eine Beziehung zu „Sensor“ mit einem beliebigen Namen (in beide Richtungen).
  • Die $dtId von „Building“ lautet „Seattle21“.
SELECT Building, Sensor FROM DIGITALTWINS   
MATCH (Building-[]-(Sensor)  
WHERE Building.$dtId = 'Seattle21'

Angeben der Anzahl von Hops

Optional können Sie die Beziehungsbedingung in der MATCH-Klausel verwenden, um die Anzahl der Hops für die Beziehungen zwischen den Zwillingen anzugeben. Sie können eine genaue Zahl oder einen Bereich angeben. Dieser optionale Wert ist als Teil der Pfeilsyntax zum Angeben der Beziehungsrichtung enthalten.

Wenn Sie keine Anzahl von Hops bereitstellen, verwendet die Abfrage standardmäßig einen Hop.

Wichtig

Wenn Sie eine Anzahl von Hops angeben, die größer als 1 ist, können Sie der Beziehung keine Abfragevariable zuweisen. Innerhalb derselben Abfrage kann nur eine dieser Bedingungen verwendet werden.

Syntax

Hinweis

Die Beispiele in diesem Abschnitt konzentrieren sich auf die Anzahl der Hops. Sie alle zeigen nicht richtungsbezogene Beziehungen ohne Angabe von Namen. Anweisungen zur weiteren Verwendung dieser anderen Bedingungen finden Sie unter Angeben der Beziehungsrichtung und Angeben des Beziehungsnamens. Informationen dazu, wie Sie mehrere dieser Bedingungen in derselben Abfrage verwenden, finden Sie unter Kombinieren von MATCH-Vorgängen.

Geben Sie die Anzahl der Hops in eckigen Klammern ([]) an, die in der MATCH-Klausel durchlaufen werden soll.

Verwenden Sie die folgende Syntax, um eine genaue Anzahl von Hops anzugeben. Die Platzhalterwerte, die durch Ihre Werte ersetzt werden sollen, sind twin_or_twin_collection_1, number_of_hops und twin_or_twin_collection_2.

-- SELECT ... FROM ... 
MATCH (twin_or_twin_collection_1)-[*number_of_hops]-(twin_or_twin_collection_2)
-- WHERE ...

Verwenden Sie die folgende Syntax, um einen Bereich von Hops anzugeben. Die Platzhalterwerte, die durch Ihre Werte ersetzt werden sollen, sind twin_or_twin_collection_1, starting_limit, ending_limit und twin_or_twin_collection_2. Das Startlimit ist nicht im Bereich enthalten, das Endlimit hingegen schon.

-- SELECT ... FROM ...
MATCH (twin_or_twin_collection_1)-[*starting_limit..ending_limit]-(twin_or_twin_collection_2)
-- WHERE ...

Sie können das Startlimit auch auslassen, um „alles bis zum“ (einschließlich) Endlimit anzugeben. Es muss immer ein Endlimit angegeben werden.

-- SELECT ... FROM ...
MATCH (twin_or_twin_collection_1)-[*..ending_limit]-(twin_or_twin_collection_2)
-- WHERE ...

(Standard) Um standardmäßig einen Hop zu verwenden, belassen Sie die Klammern wie hier gezeigt leer (ohne Hopinformationen):

-- SELECT ... FROM ... 
MATCH (twin_or_twin_collection_1)-[]-(twin_or_twin_collection_2)
-- WHERE ...

Beispiele

Im folgenden Beispiel wird eine genaue Anzahl von Hops angegeben. Die Abfrage gibt nur Beziehungen zwischen den Zwillingen „Floor“ und „Room“ zurück, bei denen genau 3 Hops verwendet werden.

SELECT Floor, Room FROM DIGITALTWINS 
MATCH (Floor)-[*3]-(Room)
WHERE Floor.$dtId = 'thermostat-15'

Im folgenden Beispiel wird ein Bereich von Hops angegeben. Die Abfrage gibt Beziehungen zwischen den Zwillingen „Floor“ und „Room“ zurück, die zwischen 1 und 3 Hops liegen (d. h. die Anzahl der Hops ist entweder 2 oder 3).

SELECT Floor, Room FROM DIGITALTWINS 
MATCH (Floor)-[*1..3]-(Room)
WHERE Floor.$dtId = 'thermostat-15'

Sie können auch einen Bereich anzeigen, indem Sie nur eine Grenze bereitstellen. Im folgenden Beispiel gibt die Abfrage Beziehungen zwischen den Zwillingen „Floor“ und „Room“ zurück, die höchstens 2 Hops umfassen (d. h. die Anzahl der Hops ist entweder 1 oder 2).

SELECT Floor, Room FROM DIGITALTWINS 
MATCH (Floor)-[*..2]-(Room)
WHERE Floor.$dtId = 'thermostat-15'

Im folgenden Beispiel wird keine Anzahl von Hops angegeben, sodass standardmäßig ein Hop zwischen den Zwillingen „Floor“ und „Room“ verwendet wird.

SELECT Floor, Room FROM DIGITALTWINS  
MATCH (Floor)-[]-(Room)
WHERE Floor.$dtId = 'thermostat-15'

Zuweisen einer Abfragevariablen zu einer Beziehung (und Angeben von Beziehungseigenschaften)

Optional können Sie der Beziehung, auf die in der MATCH-Klausel verwiesen wird, eine Abfragevariable zuweisen, damit Sie im Abfragetext nach Name darauf verweisen können.

Ein nützliches Ergebnis ist dabei die Möglichkeit, nach Beziehungseigenschaften in Ihrer WHERE-Klausel zu filtern.

Wichtig

Das Zuweisen einer Abfragevariablen zur Beziehung wird nur unterstützt, wenn die Abfrage einen einzelnen Hop angibt. Innerhalb einer Abfrage müssen Sie zwischen dem Angeben einer Beziehungsvariablen und dem Angeben einer größeren Anzahl von Hops wählen.

Syntax

Hinweis

Die Beispiele in diesem Abschnitt konzentrieren sich auf eine Abfragevariable für die Beziehung. Sie alle zeigen nicht richtungsbezogene Beziehungen ohne Angabe von Namen. Anweisungen zur weiteren Verwendung dieser anderen Bedingungen finden Sie unter Angeben der Beziehungsrichtung und Angeben des Beziehungsnamens. Informationen dazu, wie Sie mehrere dieser Bedingungen in derselben Abfrage verwenden, finden Sie unter Kombinieren von MATCH-Vorgängen.

Um der Beziehung eine Abfragevariable zu zuweisen, platzieren Sie den Variablennamen in den eckigen Klammern ([]). Die unten gezeigten Platzhalterwerte, die durch Ihre Werte ersetzt werden sollen, sind twin_or_twin_collection_1, relationship_variable und twin_or_twin_collection_2.

-- SELECT ... FROM ...   
MATCH (twin_or_twin_collection_1)-[relationship_variable]-(twin_or_twin_collection_2>) 
-- WHERE ...

Beispiele

Im folgenden Beispiel wird der Beziehung die Abfragevariable „Rel“ zugewiesen. Später wird die Variable in der WHERE-Klausel verwendet, um anzugeben, dass die Beziehung „Rel“ eine Nameneigenschaft mit dem Wert „child“ aufweisen soll.

SELECT Floor,Cafe, Rel DIGITALTWINS   
MATCH (Floor)-[Rel]-(Cafe)  
WHERE Floor.$dtId = 'thermostat-15' AND Rel.name = 'child'

Kombinieren von MATCH-Vorgängen

Sie können mehrere Beziehungsbedingungen in derselben Abfrage kombinieren. Sie können auch mehrere Beziehungsbedingungen verketten, um bidirektionale Beziehungen oder andere größere Kombinationen auszudrücken.

Syntax

In einer einzelnen Abfrage können Sie die Beziehungsrichtung, den Beziehungsnamen und eine weitere Angabe (Anzahl der Hops oder eine Abfragevariablenzuweisung) kombinieren.

Die folgenden Syntaxbeispiele zeigen, wie diese Attribute kombiniert werden können. Sie können auch beliebige optionale Details auslassen, die in Platzhaltern enthalten sind, um diesen Teil der Bedingung auszulassen.

Verwenden Sie die folgende Syntax innerhalb der Beziehungsbedingung, um die Beziehungsrichtung, den Beziehungsnamen und die Anzahl der Hops innerhalb einer einzelnen Abfrage anzugeben. Die Platzhalterwerte, die durch Ihre Werte ersetzt werden sollen, sind twin_or_twin_collection_1 und twin_or_twin_collection_2, optional_left_angle_bracket und optional_right_angle_bracket sowie relationship_name(s) und number_of_hops.

-- SELECT ... FROM ...
MATCH (twin_or_twin_collection_1)optional_left_angle_bracket-[:relationship_name(s)*number_of_hops]-optional_right_angle_bracket(twin_or_twin_collection_2)
-- WHERE

Verwenden Sie die folgende Syntax innerhalb der Beziehungsbedingung, um die Beziehungsrichtung, den Beziehungsnamen und die Abfragevariable für die Beziehung innerhalb einer einzelnen Abfrage anzugeben. Die Platzhalterwerte, die durch Ihre Werte ersetzt werden sollen, sind twin_or_twin_collection_1 und twin_or_twin_collection_2, optional_left_angle_bracket und optional_right_angle_bracket sowie relationship_variable und relationship_name(s).

-- SELECT ... FROM ...
MATCH (twin_or_twin_collection_1)optional_left_angle_bracket-[relationship_variable:relationship_name(s)]-optional_right_angle_bracket(twin_or_twin_collection_2)
-- WHERE

Hinweis

Gemäß den Optionen zum Angeben der Beziehungsrichtung müssen Sie zwischen einer linken eckigen Klammer für eine Links-nach-Rechts-Beziehung und einer rechten eckigen Klammer für eine Rechts-nach-Links-Beziehung wählen. Sie können nicht beides in denselben Pfeil einbinden. Sie können jedoch bidirektionale Beziehungen durch Verkettung darstellen.

Sie können mehrere Beziehungsbedingungen wie gezeigt verketten. Die Platzhalterwerte, die durch Ihre Werte ersetzt werden sollen, sind twin_or_twin_collection_1, alle Instanzen von relationship_condition und twin_or_twin_collection_2.

--Chained relationship conditions
-- SELECT ... FROM ... 
MATCH (twin_or_twin_collection_1)-[relationship_condition]-(twin_or_twin_collection_2)-[relationship_condition]-(twin_or_twin_collection_3)...
WHERE twin_or_twin_collection.$dtId = 'twin_ID'

Beispiele

Hier ist ein Beispiel, in dem die Beziehungsrichtung, der Beziehungsname und die Anzahl der Hops kombiniert werden. Die folgende Abfrage findet die Zwillinge „Floor“ und „Room“, wobei die Beziehung zwischen Floor und Room die folgenden Bedingungen erfüllt:

  • Die Beziehung ist von links nach rechts. Dabei ist „Floor“ die Quelle und „Room“ das Ziel.
  • Die Beziehung hat entweder den Namen „contains“ oder „isAssociatedWith“.
  • Die Beziehung verwendet entweder 4 oder 5 Hops.

Die Abfrage gibt auch an, dass der Zwilling „Floor“ die $dtId „thermostat-15“ aufweist.

SELECT Floor, Room FROM DIGITALTWINS    
MATCH (Floor)-[:contains|isAssociatedWith*3..5]->(Room) 
WHERE Floor.$dtId = 'thermostat-15'

Nachfolgend finden Sie ein Beispiel, in dem die Beziehungsrichtung, der Beziehungsname und eine benannte Abfragevariable für die Beziehung kombiniert werden. Die folgende Abfrage findet die Zwillinge „Floor“ und „Room“, wobei die Beziehung zwischen „Floor“ und „Room“ einer Abfragevariablen r zugewiesen ist und die folgenden Bedingungen erfüllt:

  • Die Beziehung ist von links nach rechts. Dabei ist „Floor“ die Quelle und „Room“ das Ziel.
  • Die Beziehung hat entweder den Namen „contains“ oder „isAssociatedWith“.
  • Die Beziehung, der eine Abfragevariable r zugewiesen wird, weist eine „length“-Eigenschaft auf, die gleich 10 ist.

Die Abfrage gibt auch an, dass der Zwilling „Floor“ die $dtId „thermostat-15“ aufweist.

SELECT Floor, Room FROM DIGITALTWINS    
MATCH (Floor)-[r:contains|isAssociatedWith]->(Room) 
WHERE Floor.$dtId = 'thermostat-15' AND r.length = 10

Im folgenden Beispiel werden verkettete Beziehungsbedingungen gezeigt. Die Abfrage findet die Zwillinge „Floor“, „Cafe“ und „Room“. Dabei gilt Folgendes:

  • Die Beziehung zwischen „Floor“ und „Room“ erfüllt die folgenden Bedingungen:
    • Die Beziehung ist von links nach rechts. Dabei ist „Floor“ die Quelle und „Cafe“ das Ziel.
    • Die Beziehung hat entweder den Namen „contains“ oder „isAssociatedWith“.
    • Die Beziehung, der die Abfragevariable r zugewiesen wird, weist eine „length“-Eigenschaft auf, die gleich 10 ist.
  • Die Beziehung zwischen „Cafe“ und „Room“ erfüllt die folgenden Bedingungen:
    • Die Beziehung ist von rechts nach links. Dabei ist „Room“ die Quelle und „Cafe“ das Ziel.
    • Die Beziehung hat entweder den Namen „has“ oder „includes“.
    • Die Beziehung verfügt über bis zu 3 Hops (also 1, 2 oder 3 Hops).

Die Abfrage gibt auch an, dass der Zwilling „Floor“ die $dtId „thermostat-15“ und der Zwilling „Cafe“ eine Temperatur von 55 aufweist.

SELECT Floor,Room, Cafe FROM DIGITALTWINS    
MATCH (Floor)-[r:contains|isAssociatedWith]->(Cafe)<-[has|includes*..3]-(Room)  
WHERE Floor.$dtId = 'thermostat-15'  AND r.length = 10 AND Cafe.temperature = 55

Sie können auch verkettete Beziehungsbedingungen verwenden, um bidirektionale Beziehungen auszudrücken. Die folgende Abfrage findet die Zwillinge „Floor“, „Room“ und „Building“. Dabei gilt Folgendes:

  • Die Beziehung zwischen „Building“ und „Floor“ erfüllt die folgenden Bedingungen:
    • Die Beziehung ist von links nach rechts. Dabei ist „Building“ die Quelle und „Floor“ das Ziel.
    • Die Beziehung hat den Namen „isAssociatedWith“.
    • Der Beziehung wird eine Abfragevariable r1 zugewiesen
  • Die Beziehung zwischen „Floor“ und „Room“ erfüllt die folgenden Bedingungen:
    • Die Beziehung ist von rechts nach links. Dabei ist „Room“ die Quelle und „Floor“ das Ziel.
    • Die Beziehung hat den Namen „isAssociatedWith“.
    • Der Beziehung wird eine Abfragevariable r2 zugewiesen

Die Abfrage gibt auch an, dass der Zwilling „Building“ die $dtId „building-3“ und „Room“ eine Temperatur über 50 Grad Fahrenheit aufweist.

SELECT Floor, Room, Building FROM DIGITALTWINS    
MATCH (Building)-[r1:isAssociatedWith]->(Floor)<-[r2:isAssociatedWith]-(Room)
WHERE Building.$dtId = 'building-3'  AND Room.temperature > 50

Begrenzungen

Für Abfragen mit MATCH gelten die folgenden Einschränkungen.

  • Pro Abfrageanweisung wird nur ein MATCH-Ausdruck unterstützt.

  • $dtId ist in der WHERE-Klausel erforderlich.

  • Das Zuweisen einer Abfragevariablen zur Beziehung wird nur unterstützt, wenn die Abfrage einen einzelnen Hop angibt.

  • Die in einer Abfrage maximal unterstützte Anzahl von Hops beträgt 10.

  • MATCH-Abfragen, die $dtId-Filter für einen anderen als den Startzwilling für den MATCH-Durchlauf enthalten, zeigen möglicherweise leere Ergebnisse an. Beispielsweise unterliegt die folgende Abfrage dieser Einschränkung:

    SELECT A, B, C FROM DIGITALTWINS 
    MATCH A-[contains]->B-[is_part_of]->C 
    WHERE B.$dtId = 'Device01'
    

    Wenn Ihr Szenario erfordert, dass Sie $dtId für andere Zwillinge verwenden, sollten Sie stattdessen die JOIN-Klausel verwenden.

  • MATCH-Abfragen, die denselben Zwilling mehrmals durchlaufen, können diesen Zwilling unerwartet aus den Ergebnissen entfernen.