SPARQL 查詢引擎在 Neptune 的運作方式 - Amazon Neptune

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

SPARQL 查詢引擎在 Neptune 的運作方式

若要使用 SPARQL explain 功能提供的資訊,您需要了解一些 Amazon Neptune SPARQL 查詢引擎運作方式的詳細資訊。

此引擎會將每個 SPARQL 查詢轉換為運算子管道。從第一個運算子開始,名為繫結清單的中繼解決方案將套用至此運算子管道。您可以將繫結清單視為資料表,其中資料表標頭是查詢中所用的部分變數。因此,資料表中的每一列代表評估時間點之前的結果。

假設系統已為我們的資料定義兩個命名空間前綴:

@prefix ex: <http://example.com> . @prefix foaf: <http://xmlns.com/foaf/0.1/> .

以下是此內容中簡單繫結清單的範例:

?person | ?firstName ------------------------------------------------------ ex:JaneDoe | "Jane" ex:JohnDoe | "John" ex:RichardRoe | "Richard"

對於三個人中的每一個人,清單會將 ?person 變數繫結至該人員的識別符,且將 ?firstName 變數繫結至該人員的名字。

一般情況下,變數可以維持在未繫結的狀態,例如,對於資料中不存在值的查詢中變數的 OPTIONAL 選項。

PipelineJoin 運算子是 explain 輸出中存在 Neptune 查詢引擎運算子的範例。它會將輸入做為上個運算子的傳入繫結集,並針對三重模式來進行聯結,也就是 (?person, foaf:lastName, ?lastName)。這個運算子會在此輸入串流使用 ?person 變數的繫結,將這些繫結取代為三重模式,並從資料庫中查詢三元素。

當從上個資料表中在傳入繫結內容中執行時,PipelineJoin 會評估三個查詢,也就是下列項目:

(ex:JaneDoe, foaf:lastName, ?lastName) (ex:JohnDoe, foaf:lastName, ?lastName) (ex:RichardRoe, foaf:lastName, ?lastName)

這種方法稱為 as-bound 評估。系統會根據傳入解決方案重新聯結這個評估程序的解決方案,並在傳入解決方案中填補偵測到的 ?lastName。假設您找到所有三個人員的姓氏,運算子會產生一個傳出繫結清單,這會像下面這樣:

?person | ?firstName | ?lastName --------------------------------------- ex:JaneDoe | "Jane" | "Doe" ex:JohnDoe | "John" | "Doe" ex:RichardRoe | "Richard" | "Roe"

這個傳出繫結清單則做為輸入,供管道中下一個運算子使用。最後,管道中最後一個運算子的輸出會定義查詢結果。

運算子管道通常是線性的,這是因為每個運算子會為單一連線的運算子發出解決方案。不過,在某些情況下,他們可以擁有更為複雜的結構。例如,SPARQL 查詢中的 UNION 運算子會映射到 Copy 操作。這個操作會複製繫結並將副本轉送到兩個子計劃,一個用於 UNION 的左側而另一個用於右側。

如需運算子的詳細資訊,請參閱 Neptune SPARQL explain 運算子