Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
AWS IoT TwinMaker knowledge graph: risorse aggiuntive
Questa sezione fornisce esempi di base della sintassi PartiQL utilizzata per scrivere query nel knowledge graph, nonché collegamenti alla documentazione PartiQL che fornisce informazioni sul modello di dati del knowledge graph.
Questa serie di esempi mostra le domande di base con le relative risposte. Utilizzatelo come riferimento per scrivere le vostre domande.
- Interrogazioni di base
-
-
Ottieni tutte le entità con un filtro
SELECT entity FROM EntityGraph MATCH (entity) WHERE entity.entityName = 'room_0'
Questa query restituisce tutte le entità in uno spazio di lavoro con il nome
room_0
.FROM
clausola:EntityGraph
è la raccolta di grafici che contiene tutte le entità e le loro relazioni in uno spazio di lavoro. Questa raccolta viene creata e gestita automaticamente in AWS IoT TwinMaker base alle entità presenti nell'area di lavoro.MATCH
clausola: specifica un modello che corrisponde a una parte del grafico. In questo caso, il pattern(entity)
corrisponde a ogni nodo del grafico ed è associato alla variabile di entità. LaFROM
clausola deve essere seguita dallaMATCH
clausola.WHERE
clausola: specifica un filtro sulentityName
campo del nodo, dove il valore deve corrispondere.room_0
SELECT
clausola: specifica laentity
variabile in modo che venga restituito l'intero nodo dell'entità.Risposta:
{ "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 } ] } ] } ] } ] }
columnDescriptions
Restituisce i metadati relativi alla colonna, come il nome e il tipo. Il tipo restituito èNODE
. Ciò indica che l'intero nodo è stato restituito. Altri valori per il tipo possono essere quelliEDGE
che indicherebbero una relazione oVALUE
che indicherebbero un valore scalare come un numero intero o una stringa.rows
Restituisce un elenco di righe. Poiché è stata trovata una sola entità, nerowData
viene restituita una che contiene tutti i campi di un'entità.Nota
A differenza di SQL in cui è possibile restituire solo valori scalari, è possibile restituire un oggetto (come JSON) utilizzando PartiQL.
Ogni nodo contiene tutti i campi a livello di entità
entityId
,arn
ad esempio i campi a livello di componentecomponents
, nonché i campi a livello di proprietàproperties
comecomponentTypeId
ecomponentName
, il tutto come JSON annidato.propertyName
propertyValue
-
Ottieni tutte le relazioni con un filtro:
SELECT relationship FROM EntityGraph MATCH (e1)-[relationship]->(e2) WHERE relationship.relationshipName = 'isLocationOf'
Questa query restituisce tutte le relazioni in un'area di lavoro con il nome
isLocationOf
della relazione.La
MATCH
clausola: specifica un modello che corrisponde a due nodi (indicati da()
) che sono collegati da uno spigolo diretto (indicato da-[]->
) e legati a una variabile chiamata.relationship
La
WHERE
clausola: specifica un filtro sulrelationshipName
campo dello spigolo, dove si trova il valore.isLocationOf
La
SELECT
clausola: specifica la variabile di relazione in modo che venga restituito l'intero nodo perimetrale.Risposta
{ "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 ] }
Il tipo di colonna in
columnDescriptions
è un.EDGE
Ciascuno
rowData
rappresenta un bordo con campi simili arelationshipName
. È lo stesso nome della proprietà di relazione definita nell'entità.sourceComponentName
esourceComponentTypeId
forniscono informazioni sull'entità e sul componente su cui è stata definita la proprietà della relazione.sourceEntityId
targetEntityId
Specificano a quale entità è rivolta questa relazione. -
Ottieni tutte le entità con una relazione specifica con un'entità specifica
SELECT e2.entityName FROM EntityGraph MATCH (e1)-[r]->(e2) WHERE relationship.relationshipName = 'isLocationOf' AND e1.entityName = 'room_0'
Questa query restituisce tutti i nomi di entità di tutte le entità che hanno una
isLocationOf
relazione con l'room_0
entità.La
MATCH
clausola: specifica un modello che corrisponde a due nodi qualsiasi (e1
,e2
) con un bordo diretto (r
).La
WHERE
clausola: specifica un filtro sul nome della relazione e sul nome dell'entità di origine.La
SELECT
clausola: restituisce ilentityName
campo nel nodo.e2
Risposta
{ "columnDescriptions": [ { "name": "entityName", "type": "VALUE" } ], "rows": [ { "rowData": [ "floor_0" ] } ] }
In ColumnDescriptions, il tipo di colonna è
VALUE
sinceentityName
è una stringa.Viene restituita un'entità
floor_0
,.
-
- CORRISPONDENZA
-
I seguenti modelli sono supportati in una
MATCH
clausola:-
Abbina il nodo 'b' che punta al nodo 'a':
FROM EntityGraph MATCH (a)-[rel]-(b)
-
Abbina il nodo 'a' che punta al nodo 'b':
FROM EntityGraph MATCH (a)-[]->(b)
Non esiste alcuna variabile associata a una relazione, presupponendo che non sia necessario specificare un filtro sulla relazione.
-
Abbina il nodo 'a' che punta al nodo 'b' e il nodo 'b' che punta al nodo 'a':
FROM EntityGraph MATCH (a)-[rel]-(b)
Ciò restituirà due corrispondenze: una da «a» a «b» e l'altra da «b» a «a», quindi la raccomandazione è di utilizzare bordi diretti ove possibile.
-
Il nome della relazione è anche un'etichetta del grafico delle proprietà
EntityGraph
, quindi puoi semplicemente specificare il nome della relazione dopo i due punti (:) invece di specificare un filtrorel.relationshipName
nellaWHERE
clausola.FROM EntityGraph MATCH (a)-[:isLocationOf]-(b)
-
Concatenamento: i modelli possono essere concatenati in modo da corrispondere su più relazioni.
FROM EntityGraph MATCH (a)-[rel1]->(b)-[rel2]-(c)
-
I pattern di hop variabili possono estendersi anche su più nodi e spigoli:
FROM EntityGraph MATCH (a)-[]->{1,5}(b)
Questa query corrisponde a qualsiasi modello con bordi in uscita dal nodo 'a' entro 1-5 passaggi. I quantificatori consentiti sono:
{m,n}
- tra m e n ripetizioni{m,}
- m o più ripetizioni.
-
- DA:
-
Un nodo di entità può contenere dati nidificati, ad esempio componenti che a loro volta contengono ulteriori dati nidificati come le proprietà. È possibile accedervi annullando il risultato del pattern 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'
Accedi ai campi annidati inserendo un puntino in una variabile
.
. Una virgola (,) viene utilizzata per separare (o unire) le entità con i componenti interni e quindi le proprietà all'interno di tali componenti.AS
viene utilizzato per associare una variabile alle variabili non annidate in modo che possano essere utilizzate nelle clausole or.WHERE
SELECT
Questa query restituisce tutte le entità che contengono una proprietà denominataroomFunction
con valoremeeting
in un componente con tipo di componente idcom.example.query.construction.room
Per accedere a più campi annidati di un campo, ad esempio a più componenti di un'entità, usa la notazione virgola per eseguire un'unione.
SELECT e FROM EntityGraph MATCH (e), e.components AS c1, e.components AS c2
- SELEZIONA:
-
-
Restituisce un nodo:
SELECT e FROM EntityGraph MATCH (e)
-
Restituisci un bordo:
SELECT r FROM EntityGraph MATCH (e1)-[r]->(e2)
-
Restituisce un valore scalare:
SELECT floor.entityName, room.description, p.propertyValue AS roomfunction FROM EntityGraph MATCH (floor)-[:isLocationOf]-(room), room.components AS c, c.properties AS p
Formatta il nome del campo di output assegnandogli un alias utilizzando.
AS
Qui, invece chepropertyValue
come nome di colonna nella risposta,roomfunction
viene restituito. -
Alias di ritorno:
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%'
Si consiglia vivamente di utilizzare gli alias per essere espliciti, aumentare la leggibilità ed evitare ambiguità nelle query.
-
- DOVE:
-
Gli operatori logici supportati sono
AND
NOT
, eOR
.Gli operatori di confronto supportati sono
<
<=
,>
,=>
,=
, e!=
.Utilizzate la
IN
parola chiave se desiderate specificare piùOR
condizioni sullo stesso campo.-
Filtra in base a un'entità, un componente o un campo di proprietà:
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'
-
Filtro sulla
configuration
proprietà.unit
Ecco la chiave nella mappa di configurazione edCelsius
è il valore.WHERE p.definition.configuration.unit = 'Celsius'
-
Controlla se una proprietà della mappa contiene una determinata chiave e un valore:
WHERE p.propertyValue.length = 20.0
-
Controlla se una proprietà della mappa contiene una determinata chiave:
WHERE NOT p.propertyValue.length IS MISSING
-
Controlla se una proprietà dell'elenco contiene un determinato valore:
WHERE 10.0 IN p.propertyValue
-
Usa la
lower()
funzione per i confronti senza distinzione tra maiuscole e minuscole. Per impostazione predefinita, tutti i confronti fanno distinzione tra maiuscole e minuscole.WHERE lower(p.propertyValue) = 'meeting'
- AD ESEMPIO:
-
Utile se non si conosce il valore esatto di un campo e si può eseguire una ricerca a tutto testo nel campo specificato.
%
rappresenta zero o più.WHERE e.entityName LIKE '%room%'
-
Ricerca Infix:
%room%
-
Ricerca con prefisso:
room%
-
Ricerca con suffissi:
%room
-
Se hai '%' nei tuoi valori, inserisci un carattere di escape in
LIKE
e specifica il carattere di escape conESCAPE
.
WHERE e.entityName LIKE 'room\%' ESCAPE '\'
-
- DISTINTO:
-
SELECT DISTINCT c.componentTypeId FROM EntityGraph MATCH (e), e.components AS c
-
La
DISTINCT
parola chiave elimina i duplicati dal risultato finale.DISTINCT
non è supportato su tipi di dati complessi.
-
- CONTARE
-
SELECT COUNT(e), COUNT(c.componentTypeId) FROM EntityGraph MATCH (e), e.components AS c
La
COUNT
parola chiave calcola il numero di elementi nel risultato di una query.COUNT
non è supportato nei campi complessi annidati e nei campi con pattern grafici.COUNT
l'aggregazione non è supportata con le queryDISTINCT
annidate.Ad esempio,
COUNT(DISTINCT e.entityId)
non è supportato.
- PERCORSO
-
Le seguenti proiezioni di pattern sono supportate nelle interrogazioni utilizzando la proiezione del percorso:
Interrogazioni a hop variabile
SELECT p FROM EntityGraph MATCH p = (a)-[]->{1, 3}(b)
Questa query abbina e proietta i metadati dei nodi di qualsiasi modello con bordi in uscita dal nodo a entro 1-3 passaggi.
Interrogazioni a hop fisso
SELECT p FROM EntityGraph MATCH p = (a)-[]->(b)<-[]-(c)
Questa query abbina e proietta i metadati delle entità e dei bordi in entrata su b.
Interrogazioni non indirizzate
SELECT p FROM EntityGraph MATCH p = (a)-[]-(b)-[]-(c)
Questa query abbina e proietta i metadati dei nodi in modelli a 1 hop che collegano a e c tramite 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" } ] } ] } ] }
Questa risposta alla
PATH
query comprende solo metadati che identificano tutti i nodi e i bordi di ogni percorso/pattern tra a e c tramite b.
- LIMIT e OFFSET:
-
SELECT e.entityName FROM EntityGraph MATCH (e) WHERE e.entityName LIKE 'room_%' LIMIT 10 OFFSET 5
LIMIT
specifica il numero di risultati da restituire nella query eOFFSET
specifica il numero di risultati da ignorare. - LIMIT e MaxResults:
-
L'esempio seguente mostra una query che restituisce 500 risultati in totale, ma ne visualizza solo 50 alla volta per chiamata API. Questo modello può essere utilizzato quando è necessario limitare la quantità di risultati visualizzati, ad esempio se è possibile visualizzare solo 50 risultati in un'interfaccia utente.
aws iottwinmaker execute-query \ --workspace-id exampleWorkspace \ --query-statement "SELECT e FROM EntityGraph MATCH (e) LIMIT 500"\ --max-results 50
-
La
LIMIT
parola chiave influisce sulla query e limita le righe risultanti. Se è necessario controllare il numero di risultati restituiti per chiamata API senza limitare il numero totale di risultati restituiti, utilizzaLIMIT
. -
max-results
è un parametro opzionale per l'azione dell'ExecuteQuery API.max-results
si applica solo all'API e al modo in cui i risultati vengono letti entro i limiti della query precedente.L'utilizzo
max-results
in una query consente di ridurre il numero di risultati visualizzati senza limitare il numero effettivo di risultati restituiti.
La query riportata di seguito scorre nella pagina successiva dei risultati. Questa query utilizza la chiamata
ExecuteQuery
API per restituire le righe 51-100, dove la pagina successiva dei risultati è specificata danext-token
— in questo caso il token è:."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-token
stringa specifica la pagina successiva dei risultati. Per ulteriori informazioni, consulta l'azione ExecuteQueryAPI.
-
AWS IoT TwinMaker Knowledge Graph Query presenta i seguenti limiti:
Nome del limite | Quota | Regolabile |
---|---|---|
Timeout di esecuzione della query |
10 secondi | No |
Numero massimo di luppoli |
10 | Sì |
Numero massimo di self s |
20 | Sì |
Numero massimo di campi proiettati |
20 | Sì |
Numero massimo di espressioni condizionali ( |
10 | Sì |
Lunghezza massima di un modello di |
20 | Sì |
Numero massimo di elementi che possono essere specificati in una clausola IN |
10 | Sì |
Valore massimo per OFFSET |
3000 | Sì |
Valore massimo per |
3000 | Sì |
Valore massimo per le traverse (+) |
3000 | Sì |