

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 grafico della conoscenza
<a name="tm-knowledge-graph"></a>

Il AWS IoT TwinMaker knowledge graph organizza tutte le informazioni contenute nei tuoi AWS IoT TwinMaker spazi di lavoro e le presenta in un formato grafico visivo. È possibile eseguire interrogazioni sulle entità, sui componenti e sui tipi di componenti per generare grafici visivi che mostrano le relazioni tra le risorse. AWS IoT TwinMaker 

I seguenti argomenti mostrano come utilizzare e integrare il Knowledge Graph.

**Topics**
+ [AWS IoT TwinMaker concetti fondamentali del Knowledge Graph](#tm-knowledge-graph-concepts)
+ [Come eseguire le interrogazioni del AWS IoT TwinMaker Knowledge Graph](tm-knowledge-graph-use.md)
+ [Integrazione con le scene del Knowledge](tm-knowledge-graph-scene.md)
+ [Come usare AWS IoT TwinMaker Knowledge Graph con Grafana](tm-knowledge-Grafana-panel.md)
+ [AWS IoT TwinMaker knowledge graph: risorse aggiuntive](tm-knowledge-graph-resources.md)

## AWS IoT TwinMaker concetti fondamentali del Knowledge Graph
<a name="tm-knowledge-graph-concepts"></a>

Questo argomento tratta i concetti chiave e il vocabolario della funzionalità Knowledge Graph.

**Come funziona il Knowledge** Graph:  
Il Knowledge Graph crea relazioni tra le entità e i loro componenti con l'[CreateEntity](https://docs.aws.amazon.com//iot-twinmaker/latest/apireference/API_CreateEntity.html)o esistente [ UpdateEntity](https://docs.aws.amazon.com//iot-twinmaker/latest/apireference/API_UpdateEntity.html) APIs. Una relazione è solo una proprietà di un tipo di dati speciale [RELATIONSHIP](https://docs.aws.amazon.com//iot-twinmaker/latest/apireference/API_DataType.html#:~:text=Valid%20Values%3A-,RELATIONSHIP,-%7C%20STRING%20%7C%20LONG%20%7C%20BOOLEAN) definito su un componente di un'entità. AWS IoT TwinMaker knowledge graph chiama l'[ExecuteQuery](https://docs.aws.amazon.com/iot-twinmaker/latest/apireference/API_ExecuteQuery.html)API per effettuare una query basata su qualsiasi dato nelle entità o sulle relazioni tra di esse. Knowledge Graph utilizza il linguaggio di query PartiQL flessibile (utilizzato da molti AWS servizi) che ha appena aggiunto il supporto per la sintassi Graph Match per aiutarti a scrivere le tue query. Dopo aver effettuato le chiamate, è possibile visualizzare i risultati sotto forma di tabella o visualizzarli come un grafico dei nodi e degli spigoli connessi.

**Termini chiave del Knowledge Graph**:  
+ **Grafo delle entità**: una raccolta di nodi e bordi all'interno di uno spazio di lavoro.
+ **Nodo**: ogni entità nell'area di lavoro diventa un nodo nel grafico delle entità.
+ **Edge**: ogni proprietà di relazione definita su un componente di un'entità diventa un bordo nel grafico dell'entità. Inoltre, una relazione gerarchica padre-figlio definita utilizzando il parentEntityId campo di un'entità diventa anche un bordo nel grafico dell'entità con un nome di relazione "»isChildOf. Tutti gli spigoli sono bordi direzionali.
+ **Relazione**: una AWS IoT TwinMaker relazione è un tipo speciale di proprietà del componente di un'entità. È possibile utilizzare l'[UpdateEntity](https://docs.aws.amazon.com//iot-twinmaker/latest/apireference/API_UpdateEntity.html)API AWS IoT TwinMaker [ CreateEntity](https://docs.aws.amazon.com//iot-twinmaker/latest/apireference/API_CreateEntity.html)or per definire e modificare una relazione. Nel AWS IoT TwinMaker, una relazione deve essere definita in un componente di un'entità. Una relazione non può essere definita come una risorsa isolata. Una relazione deve essere direzionale da un'entità all'altra.

# Come eseguire le interrogazioni del AWS IoT TwinMaker Knowledge Graph
<a name="tm-knowledge-graph-use"></a>

Prima di utilizzare il AWS IoT TwinMaker knowledge graph, assicurati di aver completato i seguenti prerequisiti:
+ Crea uno spazio di AWS IoT TwinMaker lavoro. [È possibile creare un'area di lavoro nella AWS IoT TwinMaker console.](https://console.aws.amazon.com/iottwinmaker/)
+ Acquisisci familiarità con AWS IoT TwinMaker il sistema entità-componente e con come creare entità. Per ulteriori informazioni, consulta [Crea la tua prima entità](twinmaker-gs-entity.md).
+ Acquisisci familiarità con i AWS IoT TwinMaker connettori dati. Per ulteriori informazioni, consulta [AWS IoT TwinMaker connettori dati](data-connector-interface.md).

**Nota**  
Per utilizzare il AWS IoT TwinMaker Knowledge Graph, è necessario utilizzare la modalità di prezzo in **bundle **standard** o a più livelli**. Per ulteriori informazioni, consulta [Cambia modalità di AWS IoT TwinMaker prezzo](tm-pricing-mode.md).

Le procedure seguenti mostrano come scrivere, eseguire, salvare e modificare le interrogazioni.

 **Aprire l'editor delle interrogazioni**   

**Per accedere all'editor di query del Knowledge Graph**

1. Apri la [AWS IoT TwinMaker console](https://console.aws.amazon.com/iottwinmaker/).

1. Apri l'area di lavoro in cui desideri utilizzare Knowledge Graph.

1. Nel menu di navigazione a sinistra, scegli **Query editor**.

1. Si apre l'editor di interrogazioni. Ora sei pronto per eseguire interrogazioni sulle risorse del tuo spazio di lavoro.

 **Esegui una query**   

**Per eseguire un'interrogazione e generare un grafico**

1. Nell'editor di query, scegliete la scheda **Editor** per aprire l'editor di sintassi.

1. Nello spazio dell'editor, scrivi la query che desideri eseguire sulle risorse del tuo spazio di lavoro.  
![\[Lo spazio dell'editor in cui è stata inserita una query.\]](http://docs.aws.amazon.com/it_it/iot-twinmaker/latest/guide/images/kg-query-updated.png)

   Nell'esempio mostrato, la richiesta cerca le entità che contengono `vav_%` nel loro nome, quindi le organizza in base alla `feed` relazione tra loro, utilizzando il codice seguente.

   ```
   SELECT ahu, vav, r FROM EntityGraph
   MATCH (vav)<-[r:feed]-(ahu)
   WHERE vav.entityName LIKE 'vav_%'
   ```
**Nota**  
La sintassi del knowledge graph utilizza [PartiQL](https://partiql.org/). Per informazioni su questa sintassi, vedere. [AWS IoT TwinMaker knowledge graph: risorse aggiuntive](tm-knowledge-graph-resources.md)

1. Scegli **Esegui query** per eseguire la richiesta che hai creato.

   Viene generato un grafico in base alla richiesta.  
![\[Un grafico che mostra i risultati dell'interrogazione dettagliata nei passaggi precedenti.\]](http://docs.aws.amazon.com/it_it/iot-twinmaker/latest/guide/images/tm-kg-graph-output.png)

   Il grafico di esempio mostrato sopra si basa sull'esempio di interrogazione riportato nel passaggio 2.

1. I risultati dell'interrogazione sono inoltre presentati in un elenco. Scegliete **i risultati** per visualizzare i risultati dell'interrogazione in un elenco.

1. Facoltativamente, scegli **Esporta come** per esportare i risultati della query in formato JSON o CSV.

Questo riguarda l'uso di base del knowledge graph nella console. Per ulteriori informazioni ed esempi che dimostrano la sintassi del knowledge graph, vedere. [AWS IoT TwinMaker knowledge graph: risorse aggiuntive](tm-knowledge-graph-resources.md)

# Integrazione con le scene del Knowledge
<a name="tm-knowledge-graph-scene"></a>

Puoi utilizzare i componenti AWS IoT dell'app kit per creare un'applicazione web che integri Knowledge Graph nelle tue AWS IoT TwinMaker scene. Ciò consente di generare grafici basati sui nodi 3D (i modelli 3D che rappresentano le apparecchiature o i sistemi) presenti all'interno della scena. Per creare un'applicazione che rappresenti graficamente i nodi 3D della scena, associate innanzitutto i nodi 3D alle entità presenti nell'area di lavoro. Con questa mappatura, rappresenta AWS IoT TwinMaker graficamente le relazioni tra i modelli 3D presenti nella scena e le entità nell'area di lavoro. Quindi puoi creare un'applicazione web, selezionare modelli 3D con la tua scena ed esplorare le loro relazioni con altre entità in un formato grafico.

![\[Una TwinMaker scena con un Knowledge Graph che mostra le relazioni tra i modelli 3D.\]](http://docs.aws.amazon.com/it_it/iot-twinmaker/latest/guide/images/intro_kg_scene.png)


Per un esempio di applicazione web funzionante che utilizza i componenti dell' AWS IoT app kit per generare grafici in una AWS IoT TwinMaker scena, guarda l'[app React di AWS IoT TwinMaker esempio](https://github.com/awslabs/iot-app-kit/blob/3DKG_Demo/examples/react-app/src/components/index.tsx) su github.

## AWS IoT TwinMaker prerequisiti del grafico della scena
<a name="tm-knowledge-graph-prereqs"></a>

Prima di creare un'app Web che utilizzi AWS IoT TwinMaker Knowledge Graph nelle tue scene, completa i seguenti prerequisiti:
+ Crea uno spazio di AWS IoT TwinMaker lavoro. [È possibile creare un'area di lavoro nella AWS IoT TwinMaker console.](https://console.aws.amazon.com/iottwinmaker/)
+ Acquisisci familiarità con AWS IoT TwinMaker il sistema entità-componente e con come creare entità. Per ulteriori informazioni, consulta [Crea la tua prima entità](twinmaker-gs-entity.md).
+ Crea una AWS IoT TwinMaker scena popolata con modelli 3D.
+ Acquisisci familiarità con AWS IoT TwinMaker i componenti dell' AWS IoT app kit. Per ulteriori informazioni sui AWS IoT TwinMaker componenti, consulta[Crea un'applicazione web personalizzata utilizzando AWS IoT TwinMaker i componenti dell'interfaccia utente](tm-app-kit.md).
+ Acquisisci dimestichezza con i concetti e la terminologia chiave del Knowledge Graph. Per informazioni, consulta [AWS IoT TwinMaker concetti fondamentali del Knowledge Graph](tm-knowledge-graph.md#tm-knowledge-graph-concepts).

**Nota**  
Per utilizzare il AWS IoT TwinMaker Knowledge Graph e tutte le funzionalità correlate, è necessario utilizzare la modalità di prezzo dei pacchetti **standard** o a **più livelli**. Per ulteriori informazioni sui AWS IoT TwinMaker prezzi, consulta. [Cambia modalità di AWS IoT TwinMaker prezzo](tm-pricing-mode.md)

## Associa i nodi 3D alla tua scena
<a name="tm-knowledge-graph-scene-data-binidng"></a>

Prima di creare un'app Web che integri Knowledge Graph con la scena, associa i modelli 3D, denominati nodi 3D, presenti nella scena all'entità dell'area di lavoro associata. Ad esempio, se avete un modello di attrezzatura mixer in una scena e un'entità corrispondente chiamata`mixer_0`, create un'**associazione dati** tra il modello del mixer e l'entità che rappresenta il mixer, in modo che il modello e l'entità possano essere rappresentati graficamente.

**Per eseguire un'azione di associazione dei dati**

1. Accedi alla console di [AWS IoT TwinMaker](https://console.aws.amazon.com/iottwinmaker/).

1. Apri il tuo spazio di lavoro e seleziona una scena con i nodi 3D che desideri associare.

1. Seleziona un nodo (modello 3D) nel compositore di scene. Quando selezionate un nodo, si aprirà un pannello di ispezione sul lato destro dello schermo.

1. Nel pannello di ispezione, accedi alla parte superiore del pannello e seleziona il pulsante **\$1**. Quindi scegli l'opzione **Aggiungi associazione di entità**. Si aprirà un menu a discesa in cui puoi selezionare un'entità da associare al nodo attualmente selezionato.  
![\[Una scena con il segno più selezionato nel pannello Inspector e l'associazione Aggiungi entità evidenziata.\]](http://docs.aws.amazon.com/it_it/iot-twinmaker/latest/guide/images/binding-step-4.png)

1. Dal menu a discesa dell'associazione dati, selezionate l'ID dell'entità che desiderate mappare al modello 3D. Per i campi **Nome componente** e **Nome proprietà**, seleziona i componenti e le proprietà che desideri associare.  
![\[Una scena con i nomi dei componenti e delle proprietà selezionati nel pannello Inspector.\]](http://docs.aws.amazon.com/it_it/iot-twinmaker/latest/guide/images/binding-step-6.png)

   Dopo aver effettuato le selezioni per i campi **Entity Id**, **Component Name** e **Property Name**, l'associazione è completa.

1. Ripetete questo processo per tutti i modelli e le entità che desiderate rappresentare graficamente.
**Nota**  
La stessa operazione di associazione dati può essere eseguita sui tag della scena, è sufficiente selezionare un tag anziché un'entità e seguire la stessa procedura per associare il tag a un nodo.

## Crea un'applicazione web
<a name="tm-knowledge-graph-scene-application"></a>

Dopo aver associato le entità, utilizza la libreria dell' AWS IoT app kit per creare un'app Web con un widget Knowledge Graph che ti consenta di visualizzare la scena ed esplorare le relazioni tra i nodi e le entità della scena.

Utilizza le seguenti risorse per creare la tua app:
+ La documentazione Readme di AWS IoT TwinMaker esempio su github dell'app [React](https://github.com/awslabs/iot-app-kit/blob/3DKG_Demo/examples/react-app/README.md).
+ Il [sorgente](https://github.com/awslabs/iot-app-kit/blob/3DKG_Demo/examples/react-app/src/components/index.tsx) dell'app React AWS IoT TwinMaker di esempio su github.
+ Documentazione [introduttiva del kit di AWS IoT](https://awslabs.github.io/iot-app-kit/?path=/docs/overview-getting-started--docs) app.
+ La documentazione del [componente Video Player](https://awslabs.github.io/iot-app-kit/?path=/docs/components-videoplayer--docs) dell' AWS IoT app kit.
+ La documentazione del [componente Scene Viewer dell' AWS IoT](https://awslabs.github.io/iot-app-kit/?path=/docs/components-sceneviewer--docs)app kit.

La procedura seguente dimostra la funzionalità del componente Scene Viewer in un'app Web.

**Nota**  
Questa procedura si basa sull'implementazione del componente AWS IoT app kit scene viewer nell'app React AWS IoT TwinMaker di esempio.

1. Apri il componente scene viewer dell'app AWS IoT TwinMaker Sample React. Nel campo di ricerca digita un nome di entità o un nome di entità parziale (ricerca con distinzione tra maiuscole e minuscole), quindi seleziona il pulsante **Cerca**. Se un modello è associato all'ID dell'entità, il modello nella scena verrà evidenziato e un nodo dell'entità verrà mostrato nel pannello di visualizzazione della scena.  
![\[Viene visualizzata una scena con il pannello di visualizzazione delle scene Knowledge Graph.\]](http://docs.aws.amazon.com/it_it/iot-twinmaker/latest/guide/images/search_select_kg_event.png)

1. Per generare un grafico di tutte le relazioni, selezionate un nodo nel widget Scene Viewer e selezionate il pulsante **Esplora**.  
![\[Una scena con il pannello di visualizzazione delle scene di Knowledge Graph che mostra un grafico delle relazioni.\]](http://docs.aws.amazon.com/it_it/iot-twinmaker/latest/guide/images/explore_select_kg.png)

1. Premi il pulsante **Cancella** per cancellare la selezione attuale del grafico e ricominciare da capo.

# Come usare AWS IoT TwinMaker Knowledge Graph con Grafana
<a name="tm-knowledge-Grafana-panel"></a>

Questa sezione mostra come aggiungere un pannello di editor di query alla dashboard di AWS IoT TwinMaker Grafana per eseguire e visualizzare le query.

## AWS IoT TwinMaker prerequisiti dell'editor di query
<a name="tm-knowledge-graph-Grafana-prereqs"></a>

Prima di utilizzare il AWS IoT TwinMaker knowledge graph in Grafana, completa i seguenti prerequisiti:
+ Crea uno spazio di lavoro AWS IoT TwinMaker . [È possibile creare un'area di lavoro nella AWS IoT TwinMaker console.](https://console.aws.amazon.com/iottwinmaker/)
+ Configura AWS IoT TwinMaker per l'uso con Grafana. Per istruzioni, consulta [AWS IoT TwinMaker Integrazione della dashboard Grafana](grafana-integration.md).

**Nota**  
Per utilizzare il AWS IoT TwinMaker Knowledge Graph, è necessario utilizzare la modalità di prezzo in **bundle **standard** o a più livelli**. Per ulteriori informazioni, consulta [Cambia modalità di AWS IoT TwinMaker prezzo](tm-pricing-mode.md).

## AWS IoT TwinMaker autorizzazioni dell'editor di query
<a name="tm-knowledge-graph-Grafana-config"></a>

Per utilizzare l'editor di AWS IoT TwinMaker query in Grafana, devi disporre di un ruolo IAM con autorizzazione per l'azione. `iottwinmaker:ExecuteQuery` Aggiungi tale autorizzazione al ruolo del pannello di controllo del tuo spazio di lavoro, come mostrato in questo esempio:

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket",
                "arn:aws:s3:::amzn-s3-demo-bucket/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iottwinmaker:GetEntity",
                "iottwinmaker:ListEntities",
                "iottwinmaker:ExecuteQuery"
            ],
            "Resource": [
                "arn:aws:iottwinmaker:us-east-2:111122223333:workspace/workspaceId",
                "arn:aws:iottwinmaker:us-east-2:111122223333:workspace/workspaceId/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": "iottwinmaker:ListWorkspaces",
            "Resource": "*"
        }
    ]
}
```

------

**Nota**  
Quando configuri la tua origine dati AWS IoT TwinMaker Grafana, assicurati di utilizzare il ruolo con questa autorizzazione per il campo **ARN Assumi** ruolo. **Dopo averlo aggiunto, puoi selezionare il tuo spazio di lavoro dal menu a discesa accanto a Workspace.**

Per ulteriori informazioni, consulta [Creazione di un ruolo IAM nella dashboard](dashboard-IAM-role.md#dashboard-IAM-role.title).

### Configura il pannello dell'editor delle AWS IoT TwinMaker interrogazioni
<a name="tm-knowledge-graph-Grafana-panel"></a>

**Per configurare un nuovo pannello dashboard Grafana per Knowledge Graph**

1. Apri la dashboard AWS IoT TwinMaker Grafana.

1. Crea un nuovo **pannello** di controllo. Per i passaggi dettagliati su come creare un pannello, consulta [Creare un pannello di controllo](https://grafana.com/docs/grafana/latest/dashboards/build-dashboards/create-dashboard/) nella documentazione di Grafana.

1. **Dall'elenco delle visualizzazioni, seleziona AWS IoT TwinMaker Query Editor.**  
![\[L'elenco a discesa nella AWS IoT TwinMaker dashboard contiene l'opzione per il Query Editor. AWS IoT TwinMaker\]](http://docs.aws.amazon.com/it_it/iot-twinmaker/latest/guide/images/tw-query-editor-dropdown.png)

1. Seleziona la fonte di dati su cui eseguire le query.

1. **(Facoltativo)** Aggiungi un nome per il nuovo pannello nel campo fornito.

1. Seleziona **Applica** per salvare e confermare il nuovo pannello.

Il pannello Knowledge Graph funziona in modo simile all'editor di query fornito nella AWS IoT TwinMaker console. Puoi eseguire, scrivere e cancellare le interrogazioni che fai nel pannello. Per ulteriori informazioni su come scrivere interrogazioni, consulta. [AWS IoT TwinMaker knowledge graph: risorse aggiuntive](tm-knowledge-graph-resources.md)

#### Come usare l'editor di AWS IoT TwinMaker query
<a name="tm-knowledge-graph-Grafana-use"></a>

I risultati delle interrogazioni vengono visualizzati in tre modi, come illustrato nelle immagini seguenti: visualizzati in un grafico, elencati in una tabella o presentati come riepilogo dell'esecuzione.
+ **Visualizzazione del grafico:**  
![\[AWS IoT TwinMaker i risultati dell'editor di query vengono visualizzati come grafico visivo.\]](http://docs.aws.amazon.com/it_it/iot-twinmaker/latest/guide/images/kg-vis-graph.png)

  Il grafico visivo mostra solo i dati per le interrogazioni che hanno almeno una relazione nel risultato. Il grafico mostra le entità come nodi e le relazioni come bordi diretti nel grafico.
+ **Dati tabulari:**  
![\[AWS IoT TwinMaker i risultati dell'editor di query vengono visualizzati come dati tabulari.\]](http://docs.aws.amazon.com/it_it/iot-twinmaker/latest/guide/images/kg-table-data.png)

  Il formato di dati tabulari visualizza i dati per tutte le interrogazioni. È possibile cercare nella tabella risultati specifici o sottoinsiemi di risultati. I dati possono essere esportati in formato JSON o CSV.
+ **Riepilogo dell'esecuzione**  
![\[AWS IoT TwinMaker i risultati dell'editor di query vengono visualizzati come riepilogo dell'esecuzione.\]](http://docs.aws.amazon.com/it_it/iot-twinmaker/latest/guide/images/kg-run-sum.png)

  Il riepilogo dell'esecuzione visualizza l'interrogazione e i metadati relativi allo stato dell'interrogazione.

# AWS IoT TwinMaker knowledge graph: risorse aggiuntive
<a name="tm-knowledge-graph-resources"></a>

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.
+ [ Documentazione del modello di dati Graph PartiQL](https://partiql.org/gpml/graph_model.html)
+ [ Documentazione relativa alle query Graph PartiQL](https://partiql.org/gpml/graph_query.html)

Questo set 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à. La `FROM` clausola deve essere seguita dalla `MATCH` clausola.

  `WHERE`clausola: specifica un filtro sul `entityName` campo del nodo, dove il valore deve corrispondere. `room_0`

  `SELECT`clausola: specifica la `entity` 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 quelli `EDGE` che indicherebbero una relazione o `VALUE` che indicherebbero un valore scalare come un numero intero o una stringa.

  `rows`Restituisce un elenco di righe. Poiché è stata trovata una sola entità, ne `rowData` 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 componente`components`, nonché i campi a livello di proprietà `properties` come `componentTypeId` e`componentName`, 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`()`) collegati da uno spigolo diretto (indicato da`-[]->`) e legati a una variabile chiamata. `relationship`

  La `WHERE` clausola: specifica un filtro sul `relationshipName` 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 a`relationshipName`. È lo stesso nome della proprietà di relazione definita nell'entità. `sourceComponentName`e `sourceComponentTypeId` 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 il `entityName` campo nel nodo. `e2`

  **Risposta**

  ```
  {
    "columnDescriptions": [
      {
         "name": "entityName",
         "type": "VALUE"
      }
    ],
     "rows": [
      {
         "rowData": [
           "floor_0"
        ]
      }
    ]
  }
  ```

  In ColumnDescriptions, il tipo di colonna è `VALUE` since `entityName` è 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 filtro `rel.relationshipName` nella `WHERE` 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à denominata `roomFunction` con valore `meeting` in un componente con tipo di componente id `com.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 che `propertyValue` 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`, e`OR`.
+ 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 ed `Celsius` è 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'
  ```

**COME:**  
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 con`ESCAPE`.

```
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 query `DISTINCT` 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 ciascuno path/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 e `OFFSET` 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, utilizza`LIMIT`.
+ `max-results`è un parametro opzionale per l'[azione dell'ExecuteQuery API](https://docs.aws.amazon.com//iot-twinmaker/latest/apireference/API_ExecuteQuery.html). `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 da `next-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 [ ExecuteQuery](https://docs.aws.amazon.com//iot-twinmaker/latest/apireference/API_ExecuteQuery.html#API_ExecuteQuery_RequestSyntax)API.

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 salti  | 10 | Sì | 
|  Numero massimo di self s `JOIN`  | 20 | Sì | 
|  Numero massimo di campi proiettati  | 20 | Sì | 
|  Numero massimo di espressioni condizionali (`AND`,,`OR`) `NOT`  | 10 | Sì | 
|  Lunghezza massima di un modello di `LIKE` espressione (inclusi jolly e escape)  | 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 `LIMIT`  | 3000 | Sì | 
|  Valore massimo per le traverse (\$1) `OFFSET` `LIMIT`  | 3000 | Sì | 