

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à.

# Utilizzo di Gremlin per accedere ai dati dei grafici in Amazon Neptune
<a name="get-started-graph-gremlin"></a>

È possibile utilizzare la Gremlin Console per sperimentare grafici e interrogazioni in un ambiente REPL (loop). TinkerPop read-eval-print 

I seguenti tutorial descrivono come utilizzare la console di Gremlin per aggiungere vertici, edge, proprietà e altro a un grafo Neptune, oltre a evidenziare alcune differenze nell'implementazione di Gremlin specifica per Neptune.

**Nota**  
Questo esempio presuppone che siano state completate le seguenti operazioni:  
Sei connesso a un'istanza Amazon EC2 tramite SSH.
Hai creato un cluster Neptune come descritto in [Crea un cluster Neptune](get-started-create-cluster.md).
Hai installato la console di Gremlin come descritto in [Installazione della console Gremlin](access-graph-gremlin-console.md).

**Utilizzi la console di Gremlin**

1. Cambia directory nelle cartelle in cui vengono decompressi i file della console di Gremlin.

   ```
   cd apache-tinkerpop-gremlin-console-3.7.2
   ```

1. Digita il comando seguente per eseguire la console di Gremlin.

   ```
   bin/gremlin.sh
   ```

   Verrà visualizzato l’output seguente:

   ```
            \,,,/
            (o o)
   -----oOOo-(3)-oOOo-----
   plugin activated: tinkerpop.server
   plugin activated: tinkerpop.utilities
   plugin activated: tinkerpop.tinkergraph
   gremlin>
   ```

   Ora ti trovi al prompt `gremlin>`. Immetti i restanti passaggi in questo prompt.

1. Al prompt `gremlin>`, immetti quanto segue per connetterti all'istanza database Neptune.

   ```
   :remote connect tinkerpop.server conf/neptune-remote.yaml
   ```

1. Al prompt `gremlin>`, immetti quanto segue per passare alla modalità remota. In questo modo tutte le query Gremlin vengono inviate alla connessione remota.

   ```
   :remote console
   ```

1. **Aggiungi un vertice con etichetta e proprietà.**

   ```
   g.addV('person').property('name', 'justin')
   ```

   Al vertice viene assegnato un ID `string` contenente un GUID. Tutti i vertici IDs sono stringhe in Neptune.

1. **Aggiungi un vertice con ID personalizzato.**

   ```
   g.addV('person').property(id, '1').property('name', 'martin')
   ```

   La proprietà `id` non è indicata. Si tratta di una parola chiave per l'ID del vertice. L'ID del vertice qui indicato è una stringa contenente il numero `1`.

   I nomi di proprietà standard devono essere racchiusi tra virgolette.

1. **Cambia la proprietà o aggiungila se non è già stata creata.**

   ```
   g.V('1').property(single, 'name', 'marko')
   ```

   Qui è possibile modificare la proprietà `name` per il vertice della fase precedente. Questo consente di rimuovere tutti i valori esistenti della proprietà `name`.

   Se non hai specificato `single`, il valore viene aggiunto alla proprietà `name` (se ancora non è stato fatto). 

1. **Aggiungi la proprietà, ma aggiungila in coda se dispone già di un valore. **

   ```
   g.V('1').property('age', 29)
   ```

   Neptune impiega la cardinalità di un insieme come azione predefinita.

   Questo comando aggiunge la proprietà `age` con il valore `29`, ma non sostituisce i valori esistenti. 

   Se la proprietà `age` disponeva già di un valore, questo comando aggiunge `29` in coda alla proprietà. Ad esempio, se la proprietà `age` era `27`, il nuovo valore è `[ 27, 29 ]`.

1. **Aggiungi più vertici.**

   ```
   g.addV('person').property(id, '2').property('name', 'vadas').property('age', 27).iterate()
   g.addV('software').property(id, '3').property('name', 'lop').property('lang', 'java').iterate()
   g.addV('person').property(id, '4').property('name', 'josh').property('age', 32).iterate()
   g.addV('software').property(id, '5').property('name', 'ripple').property('lang', 'java').iterate()
   g.addV('person').property(id, '6').property('name', 'peter').property('age', 35)
   ```

   È possibile inviare più istruzioni contemporaneamente a Neptune.

   Le istruzioni possono essere separate da nuove righe (`'\n'`), spazi (`' '`), punto e virgola (`'; '`) o non essere separate da alcun carattere (ad esempio, l'istruzione `g.addV(‘person’).iterate()g.V()` è valida). 
**Nota**  
La console di Gremlin invia un comando separato a ogni nuova riga (`'\n'`), di modo che risulteranno essere transazioni distinte. Questo esempio mostra tutti i comandi su righe separate per motivi di leggibilità. Rimuovi i caratteri della nuova riga (`'\n'`) per inviarli in un unico comando tramite la console Gremlin.

   Tutte le istruzioni diverse dall'ultima devono avere una fase di chiusura, ad esempio `.next()` o `.iterate()`; in caso contrario non saranno eseguite. La console di Gremlin non richiede queste fasi finali. Usa `.iterate` quando non è necessario che i risultati vengano serializzati.

   Tutte le istruzioni che vengono inviate insieme sono incluse in una singola transazione e insieme hanno esito positivo o negativo.

1. **Aggiungi edge.**

   ```
   g.V('1').addE('knows').to(__.V('2')).property('weight', 0.5).iterate()
   g.addE('knows').from(__.V('1')).to(__.V('4')).property('weight', 1.0)
   ```

   Di seguito sono indicati due diversi modi per aggiungere un edge.

1. **Aggiungi il resto del grafo moderno.**

   ```
   g.V('1').addE('created').to(__.V('3')).property('weight', 0.4).iterate()
   g.V('4').addE('created').to(__.V('5')).property('weight', 1.0).iterate()
   g.V('4').addE('knows').to(__.V('3')).property('weight', 0.4).iterate()
   g.V('6').addE('created').to(__.V('3')).property('weight', 0.2)
   ```

1. **Elimina un vertice.**

   ```
   g.V().has('name', 'justin').drop()
   ```

   Rimuove il vertice con la proprietà `name` uguale a `justin`.
**Importante**  
*Fermatevi qui e avrete il grafico completo di Apache Modern. TinkerPop Gli esempi nella [sezione Traversal](https://tinkerpop.apache.org/docs/current/reference/#graph-traversal-steps) della TinkerPop documentazione utilizzano il grafico Modern.*

1. **Esegui un attraversamento.**

   ```
   g.V().hasLabel('person')
   ```

   Restituisce tutti i vertici `person`.

1. **Esegui un attraversamento con valori (valueMap ()).**

   ```
   g.V().has('name', 'marko').out('knows').valueMap()
   ```

   Restituisce coppie di chiavi e di valori per tutti i vertici riconosciuti da `marko`.

1. **Specifica più etichette.**

   ```
   g.addV("Label1::Label2::Label3") 
   ```

   Neptune supporta più etichette per un vertice. Quando crei un'etichetta, puoi specificare più etichette separandole con `::`.

   In questo esempio viene aggiunto un vertice con tre etichette diverse. 

   La fase `hasLabel` corrisponde a questo vertice con una qualsiasi delle tre etichette: `hasLabel("Label1")` , `hasLabel("Label2")` e `hasLabel("Label3")`. 

   Il delimitatore `::` è riservato solo a quest'uso. 

   Non è possibile specificare più etichette nella fase `hasLabel`. Ad esempio, `hasLabel("Label1::Label2")` non corrisponde a nulla. 

1. **Specifica Ora/data**.

   ```
   g.V().property(single, 'lastUpdate', datetime('2018-01-01T00:00:00'))
   ```

   Neptune non supporta la data Java. Utilizzate invece la `datetime()` funzione. `datetime()`accetta una stringa ISO8061 conforme `datetime` a.

   Supporta i seguenti formati: `YYYY-MM-DD, YYYY-MM-DDTHH:mm`, `YYYY-MM-DDTHH:mm:SS` e `YYYY-MM-DDTHH:mm:SSZ`.

1. **Elimina vertici, proprietà o edge.**

   ```
   g.V().hasLabel('person').properties('age').drop().iterate()
   g.V('1').drop().iterate()
   g.V().outE().hasLabel('created').drop()
   ```

   Di seguito sono riportati vari esempi.
**Nota**  
 La fase `.next()` non funziona con `.drop()`. Usare invece `.iterate()`.

1. Al termine, immetti quanto segue per uscire dalla console di Gremlin.

   ```
   :exit
   ```

**Nota**  
Utilizzare un punto e virgola (`;`) o un carattere nuova riga (`\n`) per separare ogni istruzione.   
Ogni attraversamento che precede l'attraversamento finale deve terminare in `iterate()` per essere eseguito. Vengono restituiti solo i dati dell'ultimo attraversamento.