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

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

使用 SPARQL UPDATE LOAD 將資料匯入至 Neptune

SPARQL UPDATE LOAD 命令的語法是在 SPARQL 1.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 – (必要) 指定一個遠端資料檔案,其中包含要載入至圖形的資料。

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

    • NTriples 為 .nt

    • NQuads 為 .nq

    • Trig 為 .trig

    • RDF/XML 為 .rdf

    • Turtle 為 .ttl

    • N3 為 .n3

    • JSON-LD 為 .jsonld

  • INTO GRAPH(要載入資料的具名圖形) – (選用) 指定應載入資料的圖形。

    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 LOAD URI 都必須以 https:// 開頭。這包括 Amazon S3 URL。

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

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

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

若要為 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 儲存貯體,如下所示:

搭配 SPARQL UPDATE LOAD 使用 Web 伺服器將檔案載入至 Neptune
  1. 在 VPC 內執行的電腦上安裝 Web 伺服器,此為要載入檔案的 VPC,且是 Neptune 託管所在。例如,使用 Amazon Linux,您可能會以下列方式安裝 Apache:

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

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

    • NTriples 為 .nt

    • NQuads 為 .nq

    • Trig 為 .trig

    • RDF/XML 為 .rdf

    • Turtle 為 .ttl

    • N3 為 .n3

    • JSON-LD 為 .jsonld

    如果您使用 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. 您現在可以使用 SPARQL UPDATE 命令載入資料:

    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 伺服器上的逾時時間設定。您也可以透過在伺服器上啟用偵錯日誌並尋找逾時時間來診斷問題。