Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
AWS IoT TwinMaker Knowledge Graph (ressources supplémentaires)
Cette section fournit des exemples de base de la syntaxe partiQL utilisée pour écrire des requêtes dans le graphe de connaissances, ainsi que des liens vers la documentation partiQL qui fournit des informations sur le modèle de données du graphe de connaissances.
Cet ensemble d'exemples montre les requêtes de base avec leurs réponses. Utilisez-le comme référence pour rédiger vos propres requêtes.
- Requêtes de base
-
-
Obtenir toutes les entités à l'aide d'un filtre
SELECT entity FROM EntityGraph MATCH (entity) WHERE entity.entityName = 'room_0'Cette requête renvoie toutes les entités d'un espace de travail portant le nom
room_0.FROMclause :EntityGraphest la collection de graphes qui contient toutes les entités et leurs relations dans un espace de travail. Cette collection est automatiquement créée et gérée en AWS IoT TwinMaker fonction des entités de votre espace de travail.MATCHclause : spécifie un modèle qui correspond à une partie du graphique. Dans ce cas, le modèle(entity)correspond à chaque nœud du graphe et est lié à la variable d'entité. LaFROMclause doit être suivie de laMATCHclause.WHEREclause : spécifie un filtre sur leentityNamechamp du nœud, où la valeur doit correspondreroom_0.SELECTclause : spécifie laentityvariable afin que l'ensemble du nœud de l'entité soit renvoyé.Réponse :
{ "columnDescriptions": [ { "name": "entity", "type": "NODE" } ], "rows": [ { "rowData": [ { "arn": "arn:aws:iottwinmaker:us-east-1: 577476956029: workspace / SmartBuilding8292022 / entity / room_18f3ef90 - 7197 - 53 d1 - abab - db9c9ad02781 ", "creationDate": 1661811123914, "entityId": "room_18f3ef90-7197-53d1-abab-db9c9ad02781", "entityName": "room_0", "lastUpdateDate": 1661811125072, "workspaceId": "SmartBuilding8292022", "description": "", "components": [ { "componentName": "RoomComponent", "componentTypeId": "com.example.query.construction.room", "properties": [ { "propertyName": "roomFunction", "propertyValue": "meeting" }, { "propertyName": "roomNumber", "propertyValue": 0 } ] } ] } ] } ] }columnDescriptionsRenvoie les métadonnées relatives à la colonne, telles que le nom et le type. Le type renvoyé estNODE. Cela indique que le nœud entier a été renvoyé. Les autres valeurs du type peuventEDGEindiquer une relation ouVALUEune valeur scalaire telle qu'un entier ou une chaîne.rowsRenvoie une liste de lignes. Comme une seule entité a été mise en correspondance,rowDataune entité contenant tous les champs d'une entité est renvoyée.Note
Contrairement au SQL où vous ne pouvez renvoyer que des valeurs scalaires, vous pouvez renvoyer un objet (au format JSON) en utilisant partiQL.
Chaque nœud contient tous les champs au niveau de l'entité tels que
entityId,arnet les champs au niveau des composants tels quecomponents, etcomponentName, ainsi que les champs au niveau des propriétés tels quecomponentTypeIdetproperties, le tout sous forme de JSONpropertyNamepropertyValueimbriqué. -
Obtenez toutes les relations à l'aide d'un filtre :
SELECT relationship FROM EntityGraph MATCH (e1)-[relationship]->(e2) WHERE relationship.relationshipName = 'isLocationOf'Cette requête renvoie toutes les relations d'un espace de travail avec le nom de la relation
isLocationOf.La
MATCHclause : spécifie un modèle qui correspond à deux nœuds (indiqués par()) connectés par une arête dirigée (indiquée par-[]->) et liés à une variable appeléerelationship.La
WHEREclause : spécifie un filtre sur lerelationshipNamechamp de l'arête, où se trouve la valeurisLocationOf.La
SELECTclause : spécifie la variable de relation afin que l'ensemble du nœud périphérique soit renvoyé.Réponse
{ "columnDescriptions": [{ "name": "relationship", "type": "EDGE" }], "rows": [{ "rowData": [{ "relationshipName": "isLocationOf", "sourceEntityId": "floor_83faea7a-ea3b-56b7-8e22-562f0cf90c5a", "targetEntityId": "building_4ec7f9e9-e67e-543f-9d1b- 235df7e3f6a8", "sourceComponentName": "FloorComponent", "sourceComponentTypeId": "com.example.query.construction.floor" }] }, ... //rest of the rows are omitted ] }Le type de colonne dans
columnDescriptionsest unEDGE.Chacun
rowDatareprésente une arête avec des champs tels querelationshipName. Il s'agit du même nom de propriété de relation défini sur l'entité. LessourceEntityId,sourceComponentNameetsourceComponentTypeIdfournissent des informations sur l'entité et le composant sur lesquels la propriété de relation a été définie.targetEntityIdSpécifie l'entité vers laquelle cette relation pointe. -
Obtenez toutes les entités ayant une relation spécifique avec une entité spécifique
SELECT e2.entityName FROM EntityGraph MATCH (e1)-[r]->(e2) WHERE relationship.relationshipName = 'isLocationOf' AND e1.entityName = 'room_0'Cette requête renvoie tous les noms d'entité de toutes les entités ayant une
isLocationOfrelation avec l'room_0entité.La
MATCHclause : spécifie un modèle qui correspond à deux nœuds (e1,e2) ayant une arête dirigée (r).La
WHEREclause : spécifie un filtre sur le nom de la relation et le nom de l'entité source.La
SELECTclause : renvoie leentityNamechamp dans lee2nœud.Réponse
{ "columnDescriptions": [ { "name": "entityName", "type": "VALUE" } ], "rows": [ { "rowData": [ "floor_0" ] } ] }Dans les ColumnDescriptions, le type de la colonne est
VALUEpuisque c'entityNameest une chaîne.Une entité est renvoyée.
floor_0
-
- MATCH
-
Les modèles suivants sont pris en charge dans une
MATCHclause :-
Faites correspondre le nœud « b » pointant vers le nœud « a » :
FROM EntityGraph MATCH (a)-[rel]-(b) -
Faites correspondre le nœud « a » pointant vers le nœud « b » :
FROM EntityGraph MATCH (a)-[]->(b)Aucune variable n'est liée à une relation en supposant qu'il n'est pas nécessaire de spécifier un filtre sur la relation.
-
Faites correspondre le nœud « a » pointant vers le nœud « b » et le nœud « b » pointant vers le nœud « a » :
FROM EntityGraph MATCH (a)-[rel]-(b)Cela renverra deux correspondances : une de « a » à « b » et une autre de « b » à « a ». Il est donc recommandé d'utiliser des arêtes orientées dans la mesure du possible.
-
Le nom de la relation est également une étiquette du graphe
EntityGraphde propriétés. Vous pouvez donc simplement spécifier le nom de la relation après deux points (:) au lieu de spécifier un filtrerel.relationshipNamedans laWHEREclause.FROM EntityGraph MATCH (a)-[:isLocationOf]-(b) -
Enchaînement : les modèles peuvent être enchaînés pour correspondre à plusieurs relations.
FROM EntityGraph MATCH (a)-[rel1]->(b)-[rel2]-(c) -
Les modèles de sauts variables peuvent également s'étendre sur plusieurs nœuds et arêtes :
FROM EntityGraph MATCH (a)-[]->{1,5}(b)Cette requête correspond à n'importe quel modèle avec des arêtes sortantes du nœud « a » entre 1 et 5 sauts. Les quantificateurs autorisés sont les suivants :
{m,n}- entre m et n répétitions{m,}- 5 répétitions ou plus.
-
- À PARTIR DE :
-
Un nœud d'entité peut contenir des données imbriquées, telles que des composants qui contiennent eux-mêmes d'autres données imbriquées telles que des propriétés. Vous pouvez y accéder en démêlant le résultat du modèle MATCH.
SELECT e FROM EntityGraph MATCH (e), e.components AS c, c.properties AS p WHERE c.componentTypeId = 'com.example.query.construction.room', AND p.propertyName = 'roomFunction' AND p.propertyValue = 'meeting'Accédez aux champs imbriqués en pointant des points
.dans une variable. Une virgule (,) est utilisée pour désimbriquer (ou joindre) des entités contenant les composants, puis les propriétés contenues dans ces composants.ASest utilisé pour lier une variable aux variables non imbriquées afin qu'elles puissent être utilisées dans les clausesWHEREorSELECT. Cette requête renvoie toutes les entités contenant une propriété nomméeroomFunctionavec une valeurmeetingdans un composant avec un identifiant de type de composantcom.example.query.construction.roomPour accéder à plusieurs champs imbriqués d'un champ, tels que plusieurs composants d'une entité, utilisez la notation par virgule pour effectuer une jointure.
SELECT e FROM EntityGraph MATCH (e), e.components AS c1, e.components AS c2 - SÉLECTIONNEZ :
-
-
Renvoie un nœud :
SELECT e FROM EntityGraph MATCH (e) -
Renvoie une arête :
SELECT r FROM EntityGraph MATCH (e1)-[r]->(e2) -
Renvoie une valeur scalaire :
SELECT floor.entityName, room.description, p.propertyValue AS roomfunction FROM EntityGraph MATCH (floor)-[:isLocationOf]-(room), room.components AS c, c.properties AS pFormatez le nom du champ de sortie en lui attribuant un alias à l'aide
ASde. Ici, au lieu d'propertyValueêtre un nom de colonne dans la réponse,roomfunctionil est renvoyé. -
Alias de retour :
SELECT floor.entityName AS floorName, luminaire.entityName as luminaireName FROM EntityGraph MATCH (floor)-[:isLocationOf]-(room)-[:hasPart]- (lightingZone)-[:feed]-(luminaire) WHERE floor.entityName = 'floor_0' AND luminaire.entityName like 'lumin%'Il est fortement recommandé d'utiliser des alias pour être explicite, améliorer la lisibilité et éviter toute ambiguïté dans vos requêtes.
-
- OÙ :
-
Les opérateurs logiques pris en charge sont
ANDNOT, etOR.Les opérateurs de comparaison pris en charge sont
<<=>,=>,=, et!=.Utilisez le
INmot clé si vous souhaitez spécifier plusieursORconditions dans le même champ.-
Filtrez sur un champ d'entité, de composant ou de propriété :
FROM EntityGraph MATCH (e), e.components AS c, c.properties AS p WHERE e.entityName = 'room_0' AND c.componentTypeId = 'com.example.query.construction.room', AND p.propertyName = 'roomFunction' AND NOT p.propertyValue = 'meeting' OR p.propertyValue = 'office' -
Filtrez sur la
configurationpropriété.unitVoici la clé de la carte de configuration etCelsiusla valeur.WHERE p.definition.configuration.unit = 'Celsius' -
Vérifiez si une propriété de carte contient une clé et une valeur données :
WHERE p.propertyValue.length = 20.0 -
Vérifiez si une propriété de carte contient une clé donnée :
WHERE NOT p.propertyValue.length IS MISSING -
Vérifiez si une propriété de liste contient une valeur donnée :
WHERE 10.0 IN p.propertyValue -
Utilisez cette
lower()fonction pour effectuer des comparaisons sans distinction majuscules/majuscules. Par défaut, toutes les comparaisons font la distinction majuscules/minuscules.WHERE lower(p.propertyValue) = 'meeting'
- COMME :
-
Utile si vous ne connaissez pas la valeur exacte d'un champ et que vous pouvez effectuer une recherche en texte intégral sur le champ spécifié.
%représente zéro ou plus.WHERE e.entityName LIKE '%room%'-
Recherche d'infixes :
%room% -
Recherche par préfixe :
room% -
Recherche de suffixes :
%room -
Si vous avez « % » dans vos valeurs, insérez un caractère d'échappement dans
LIKEet spécifiez le caractère d'échappement avecESCAPE.
WHERE e.entityName LIKE 'room\%' ESCAPE '\' -
- DISTINCT :
-
SELECT DISTINCT c.componentTypeId FROM EntityGraph MATCH (e), e.components AS c-
Le
DISTINCTmot clé élimine les doublons du résultat final.DISTINCTn'est pas pris en charge sur les types de données complexes.
-
- COMPTER
-
SELECT COUNT(e), COUNT(c.componentTypeId) FROM EntityGraph MATCH (e), e.components AS cLe
COUNTmot clé calcule le nombre d'éléments dans le résultat d'une requête.COUNTn'est pas pris en charge sur les champs complexes imbriqués et les champs de modèle graphique.COUNTl'agrégation n'est pas prise en charge parDISTINCTles requêtes imbriquées.Par exemple,
COUNT(DISTINCT e.entityId)n’est pas pris en charge.
- CHEMIN
-
Les projections de modèles suivantes sont prises en charge lors des requêtes utilisant la projection de trajectoire :
Requêtes à sauts variables
SELECT p FROM EntityGraph MATCH p = (a)-[]->{1, 3}(b)Cette requête fait correspondre et projette les métadonnées des nœuds de tous les modèles présentant des bords sortants depuis le nœud a en 1 à 3 sauts.
Requêtes à saut fixe
SELECT p FROM EntityGraph MATCH p = (a)-[]->(b)<-[]-(c)Cette requête fait correspondre et projette les métadonnées des entités et des arêtes entrantes vers b.
Requêtes non dirigées
SELECT p FROM EntityGraph MATCH p = (a)-[]-(b)-[]-(c)Cette requête correspond et projette les métadonnées des nœuds dans des modèles à 1 saut reliant a et c via b.
{ "columnDescriptions": [ { "name": "path", "type": "PATH" } ], "rows": [ { "rowData": [ { "path": [ { "entityId": "a", "entityName": "a" }, { "relationshipName": "a-to-b-relation", "sourceEntityId": "a", "targetEntityId": "b" }, { "entityId": "b", "entityName": "b" } ] } ] }, { "rowData": [ { "path": [ { "entityId": "b", "entityName": "b" }, { "relationshipName": "b-to-c-relation", "sourceEntityId": "b", "targetEntityId": "c" }, { "entityId": "c", "entityName": "c" } ] } ] } ] }Cette réponse à la
PATHrequête comprend uniquement des métadonnées qui identifient tous les nœuds et les arêtes de chacun path/pattern entre a et c via b.
- LIMITE et DÉCALAGE :
-
SELECT e.entityName FROM EntityGraph MATCH (e) WHERE e.entityName LIKE 'room_%' LIMIT 10 OFFSET 5LIMITindique le nombre de résultats à renvoyer dans la requête, ainsiOFFSETque le nombre de résultats à ignorer. - LIMIT et MaxResults :
-
L'exemple suivant montre une requête qui renvoie 500 résultats au total, mais qui n'en affiche que 50 à la fois par appel d'API. Ce modèle peut être utilisé lorsque vous devez limiter le nombre de résultats affichés, par exemple si vous ne pouvez afficher que 50 résultats dans une interface utilisateur.
aws iottwinmaker execute-query \ --workspace-id exampleWorkspace \ --query-statement "SELECT e FROM EntityGraph MATCH (e) LIMIT 500"\ --max-results 50-
Le
LIMITmot clé affecte la requête et limite les lignes qui en résultent. Si vous devez contrôler le nombre de résultats renvoyés par appel d'API sans limiter le nombre total de résultats renvoyés, utilisezLIMIT. -
max-resultsest un paramètre facultatif pour l'action d'ExecuteQuery API.max-resultss'applique uniquement à l'API et à la façon dont les résultats sont lus dans les limites de la requête ci-dessus.L'utilisation
max-resultsdans une requête vous permet de réduire le nombre de résultats affichés sans limiter le nombre réel de résultats renvoyés.
La requête ci-dessous passe par la page de résultats suivante. Cette requête utilise l'appel d'
ExecuteQueryAPI pour renvoyer les lignes 51 à 100, où la page de résultats suivante est spécifiée par lenext-token— dans ce cas, le jeton est :."H7kyGmvK376L"aws iottwinmaker execute-query \ --workspace-id exampleWorkspace \ --query-statement "SELECT e FROM EntityGraph MATCH (e) LIMIT 500"\ --max-results 50 --next-token "H7kyGmvK376L"-
La
next-tokenchaîne indique la page de résultats suivante. Pour plus d'informations, consultez l'action de ExecuteQueryl'API.
-
AWS IoT TwinMaker Les limites d'une requête Knowledge Graph sont les suivantes :
| Nom de la limite | Quota | Ajustable |
|---|---|---|
|
Délai d'exécution de la requête |
10 secondes | Non |
|
Nombre maximum de sauts |
10 | Oui |
|
Nombre maximum de |
20 | Oui |
|
Nombre maximum de champs projetés |
20 | Oui |
|
Nombre maximum d'expressions conditionnelles ( |
10 | Oui |
|
Longueur maximale d'un modèle d' |
20 | Oui |
Nombre maximum d'éléments pouvant être spécifiés dans une IN clause |
10 | Oui |
Valeur maximale pour OFFSET |
3000 | Oui |
|
Valeur maximale pour |
3000 | Oui |
|
Valeur maximale pour les traversées ( |
3000 | Oui |