使用 SPARQL UPDATE LOAD 將資料匯入 Neptune - Amazon Neptune

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 SPARQL UPDATE LOAD 將資料匯入 Neptune

SPARQL UPDATE LOAD 命令的語法在 SPARQL1.1 更新建議 中指定:

LOAD SILENT (URL of data to be loaded) INTO GRAPH (named graph into which to load the data)
  • SILENT – (選用) 即使在處理期間發生錯誤,也會導致操作傳回成功。

    這在單一交易包含多個陳述式 (例如,"LOAD ...; LOAD ...; UNLOAD ...; LOAD ...;") 時很有用,而且即使某些遠端資料無法處理,您也想要交易完成。

  • URL of data to be loaded   – (必要 ) 指定遠端資料檔案,其中包含要載入圖形的資料。

    遠端檔案必須具有下列其中一個副檔名:

    • .nt 適用於 NTriples。

    • .nq 適用於 NQuads。

    • Trig 為 .trig

    • .rdf 適用於 RDF/XML。

    • Turtle 為 .ttl

    • N3 為 .n3

    • .jsonld 適用於 JSON-LD。

  • INTO GRAPH(named graph into which to load the data)   – (選用 ) 指定要載入資料的圖形。

    Neptune 會將每個三元組與一個具名圖形建立關聯。您可以使用名為圖形 URI、 的後援來指定預設的命名圖形http://aws.amazon.com/neptune/vocab/v01/DefaultNamedGraph,如下所示:

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

當您需要載入大量資料時,建議您使用 Neptune 大量載入器,而不是 UPDATE LOAD。如需有關大量載入器的詳細資訊,請參閱 使用 Amazon Neptune 大量載入器擷取資料

您可以使用 SPARQL UPDATE LOAD 直接從 Amazon S3 載入資料,或從取自於自我託管 Web 伺服器的檔案載入資料。要載入的資源必須位於與 Neptune 伺服器相同的區域,且必須在 中允許資源的端點VPC。如需建立 Amazon S3 端點的相關資訊,請參閱 建立 Amazon S3 VPC端點

所有 SPARQL UPDATE LOADURIs都必須以 開頭https://。這包括 Amazon S3 URLs。

與 Neptune 大量載入器相反,呼叫 SPARQL UPDATE LOAD 是可完全交易的。

使用 將檔案直接從 Amazon S3 載入 Neptune SPARQL UPDATE LOAD

由於 Neptune 不允許您在使用 時將IAM角色傳遞給 SPARQL UPDATE Amazon S3LOAD,因此相關 Amazon S3 儲存貯體必須是公有的,或者您必須在LOAD查詢中使用預先簽署的 Amazon S3URL

若要產生 Amazon S3 檔案URL的預先簽署,您可以使用下列 AWS CLI 命令:

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

然後,您可以在LOAD命令URL中使用產生的預先簽署:

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)'

如需詳細資訊,請參閱對請求進行身分驗證:使用查詢參數Boto3 文件顯示如何使用 Python 指令碼來產生預先簽章的 URL。

此外,必須正確設定要載入的檔案內容類型。

  1. 當您使用 -metadata 參數將檔案上傳至 Amazon S3 時,請設定檔案的內容類型,如下所示:

    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. 確認媒體類型資訊真實存在。執行:

    curl -v bucket-name/folder-name

    此命令的輸出應該顯示您在上傳檔案時所設定的媒體類型資訊。

  3. 然後,您可以使用 SPARQL UPDATE LOAD 命令將這些檔案匯入至 Neptune:

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

上述步驟僅適用於公有 Amazon S3 儲存貯體,或您透過LOAD查詢中預先簽署的 Amazon S3 URL存取的儲存貯體。

您還可以設定一個 Web 代理服務器從私有 Amazon S3 儲存貯體,如下所示:

使用 Web 伺服器將檔案載入 Neptune SPARQL UPDATE LOAD
  1. 在正在託管 Neptune 和要載入的檔案內執行VPC的機器上安裝 Web 伺服器。例如,使用 Amazon Linux,您可能會以下列方式安裝 Apache:

    sudo yum install httpd mod_ssl sudo /usr/sbin/apachectl start
  2. 定義您要載入之RDF檔案內容的MIME類型 (s)。SPARQL 使用 Web 伺服器傳送的Content-type標頭來判斷內容的輸入格式,因此您必須定義 Web 伺服器的相關MIME類型。

    例如,假設您使用以下副檔名來識別檔案格式:

    • .nt 適用於 NTriples。

    • .nq 適用於 NQuads。

    • Trig 為 .trig

    • .rdf 適用於 RDF/XML。

    • Turtle 為 .ttl

    • N3 為 .n3

    • .jsonld 適用於 JSON-LD。

    如果您使用 Apache 2 做為 Web 伺服器,您要編輯檔案 /etc/mime.types 並新增以下類型:

    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. 確認 MIME類型映射是否有效。當您讓 Web 伺服器以您選擇的格式啟動、執行和託管RDF檔案時,您可以從本機主機傳送請求至 Web 伺服器,以測試組態。

    例如,您可能會傳送類似以下的請求:

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

    然後,在 curl 的詳細輸出中,您應該會看到如下一行:

    Content-Type: application/rdf+xml

    這會顯示已成功定義的內容類型映射。

  4. 您現在可以使用 SPARQLUPDATE命令載入資料:

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

使用 SPARQL UPDATE LOAD 可以在載入大型來源檔案時於 Web 伺服器上觸發逾時。Neptune 會在檔案資料串流輸入的同時進行處理,對大型檔案而言,所需時間可能會比伺服器上設定的逾時時間長。這反過來可能會導致伺服器關閉連線,當 Neptune 在串流EOF中遇到非預期時,可能會導致下列錯誤訊息:

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

如果您收到此訊息,但不認為來源檔案包含無效的語法,請嘗試增加 Web 伺服器上的逾時時間設定。您也可以透過在伺服器上啟用偵錯日誌並尋找逾時時間來診斷問題。