本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
SPARQL 查詢引擎如何在 Neptune 中運作
若要使用 SPARQLexplain
功能提供的資訊,您需要了解 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 SPARQLexplain運算子。