Utilizzo di SPARQL UPDATE LOAD per l'importazione di dati in Neptune - Amazon Neptune

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 SPARQL UPDATE LOAD per l'importazione di dati in Neptune

La sintassi del comando SPARQL UPDATE LOAD è specificata nella raccomandazione SPARQL 1.1 Update:

LOAD SILENT (URL of data to be loaded) INTO GRAPH (named graph into which to load the data)
  • SILENT: (facoltativo) fa sì che l'operazione restituisca un esito positivo anche se si è verificato un errore durante l'elaborazione.

    Ciò può essere utile quando una singola transazione contiene più istruzioni come "LOAD ...; LOAD ...; UNLOAD ...; LOAD ...;" e si desidera che la transazione venga completata anche se non è stato possibile elaborare alcuni dati remoti.

  • URL of data to be loaded: (obbligatorio) specifica un file di dati remoti contenente i dati da caricare in un grafo.

    Il file remoto deve avere una delle seguenti estensioni:

    • .nt per NTriples.

    • .nq per NQuads.

    • .trig per Trig.

    • .rdf per RDF/XML.

    • .ttl per Turtle.

    • .n3 per N3.

    • .jsonld per JSON-LD.

  • INTO GRAPH(named graph into which to load the data): (facoltativo) specifica il grafo in cui devono essere caricati i dati.

    Neptune associa ogni tripla a un grafo nominato. È possibile specificare il grafo nominato predefinito utilizzando l'URI di fallback del grafo nominato, http://aws.amazon.com/neptune/vocab/v01/DefaultNamedGraph, in questo modo:

    INTO GRAPH <http://aws.amazon.com/neptune/vocab/v01/DefaultNamedGraph>
Nota

Quando devi caricare molti dati, è consigliabile utilizzare lo strumento di caricamento in blocco Neptune anziché UPDATE LOAD. Per ulteriori informazioni sullo strumento di caricamento in blocco, consulta Uso dello strumento di caricamento in blocco Amazon Neptune per importare i dati.

Puoi utilizzare SPARQL UPDATE LOAD per caricare dati direttamente da Amazon S3 o da file ottenuti da un server Web in self-hosting. Le risorse da caricare devono trovarsi nella stessa regione del server Neptune e l'endpoint per le risorse deve essere consentito nel VCP. Per informazioni su come creare un endpoint Amazon S3, vedi Creazione di un endpoint VPC Amazon S3.

Tutti gli URI SPARQL UPDATE LOAD devono iniziare con https://. Sono inclusi gli URL Amazon S3.

Diversamente dallo strumento di caricamento in blocco Neptune, una chiamata a SPARQL UPDATE LOAD è completamente transazionale.

Caricare file da Amazon S3 direttamente in Neptune tramite SPARQL UPDATE LOAD

Poiché Neptune non consente di passare un ruolo IAM ad Amazon S3 quando si utilizza SPARQL UPDATE LOAD, il bucket Amazon S3 in questione deve essere pubblico oppure è necessario utilizzare un URL Amazon S3 prefirmato nella query LOAD.

Per generare un URL prefirmato per un file Amazon S3, puoi usare AWS CLI un comando come questo:

aws s3 presign --expires-in (number of seconds) s3://(bucket name)/(path to file of data to load)

Quindi puoi utilizzare l'URL prefirmato risultante nel comando LOAD:

curl https://(a Neptune endpoint URL):8182/sparql \ --data-urlencode 'update=load (pre-signed URL of the remote Amazon S3 file of data to be loaded) \ into graph (named graph)'

Per ulteriori informazioni, consulta Autenticazione delle richieste: utilizzo dei parametri di query. La documentazione di Boto3 mostra come usare uno script Python per generare un URL prefirmato.

Inoltre, il tipo di contenuto dei file da caricare deve essere impostato correttamente.

  1. Imposta il tipo di contenuto dei file quando li carichi in Amazon S3 usando il parametro -metadata, ad esempio:

    aws s3 cp test.nt s3://bucket-name/my-plain-text-input/test.nt --metadata Content-Type=text/plain aws s3 cp test.rdf s3://bucket-name/my-rdf-input/test.rdf --metadata Content-Type=application/rdf+xml
  2. Conferma che sia presente l'informazione sul tipo di supporto. Esegui:

    curl -v bucket-name/folder-name

    L'output di questo comando mostra le informazioni sul tipo di supporto impostate durante il caricamento dei file.

  3. Quindi, puoi utilizzare il comando SPARQL UPDATE LOAD per importare questi file in Neptune:

    curl https://your-neptune-endpoint:port/sparql \ -d "update=LOAD <https://s3.amazonaws.com/bucket-name/my-rdf-input/test.rdf>"

I passaggi precedenti funzionano solo per un bucket Amazon S3 pubblico o per un bucket a cui si accede utilizzando un URL Amazon S3 prefirmato nella query LOAD.

È inoltre possibile impostare un server proxy Web per il caricamento da un bucket Amazon S3 privato, come illustrato di seguito:

Utilizzare un server Web per caricare file in Neptune con SPARQL UPDATE LOAD
  1. Installa un server Web su una macchina in esecuzione nel VPC che ospita Neptune e i file da caricare. Ad esempio, usando Amazon Linux, puoi installare Apache come segue:

    sudo yum install httpd mod_ssl sudo /usr/sbin/apachectl start
  2. Definisci il tipo/i MIME dei contenuti dei file RDF che andrai a caricare. SPARQL utilizza l'intestazione Content-type inviata dal server Web per determinare il formato di input dei contenuti, pertanto è necessario definire i tipi MIME per il server Web.

    Ad esempio, supponiamo che desideri utilizzare le seguenti estensioni di file per identificare i formati di file:

    • .nt per NTriples.

    • .nq per NQuads.

    • .trig per Trig.

    • .rdf per RDF/XML.

    • .ttl per Turtle.

    • .n3 per N3.

    • .jsonld per JSON-LD.

    Se stai usando Apache 2 come server Web, dovrai modificare il file /etc/mime.types e aggiungere i seguenti tipi:

    text/plain nt application/n-quads nq application/trig trig application/rdf+xml rdf application/x-turtle ttl text/rdf+n3 n3 application/ld+json jsonld
  3. Conferma che la mappatura del tipo MIME funziona. Una volta che il server Web è in esecuzione e ospita i file RDF nel formato di tua scelta, puoi testare la configurazione inviando una richiesta al server Web dal tuo host locale.

    Ad esempio, potresti inviare una richiesta di questo tipo:

    curl -v http://localhost:80/test.rdf

    Quindi, nell'output dettagliato di curl, dovresti visualizzare una riga come questa:

    Content-Type: application/rdf+xml

    Questo dimostra che la mappatura del tipo di contenuto è stata definita correttamente.

  4. Ora puoi caricare i dati usando il comando SPARQL UPDATE:

    curl https://your-neptune-endpoint:port/sparql \ -d "update=LOAD <http://web_server_private_ip:80/test.rdf>"
Nota

Utilizzando SPARQL UPDATE LOAD può attivare un timeout sul server Web quando il file di origine che viene caricato è grande. Neptune elabora i dati del file mentre vengono trasmessi in streaming e per un file di grandi dimensioni che può richiedere più tempo del timeout configurato sul server. Questo a sua volta potrebbe causare la chiusura della connessione del server, che può causare il seguente messaggio di errore quando Neptune incontra un EOF imprevisto nel flusso:

{ "detailedMessage":"Invalid syntax in the specified file", "code":"InvalidParameterException" }

Se si riceve questo messaggio e non si ritiene che il file di origine contenga una sintassi non valida, provare ad aumentare le impostazioni di timeout sul server Web. È inoltre possibile diagnosticare il problema abilitando i registri di debug sul server e cercando i timeout.