Neptune SPARQLexplainでの呼び出しの例 - Amazon Neptune

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Neptune SPARQLexplainでの呼び出しの例

このセクションの例は、Amazon Neptune でクエリ実行を分析するSPARQLexplain機能を呼び出すことで生成できるさまざまな種類の出力を示しています。

Explain 出力を理解する

この例では、Jane Doe は 2 人の人 (John Doe と Richard Roe) を知っています。

@prefix ex: <http://example.com> . @prefix foaf: <http://xmlns.com/foaf/0.1/> . ex:JaneDoe foaf:knows ex:JohnDoe . ex:JohnDoe foaf:firstName "John" . ex:JohnDoe foaf:lastName "Doe" . ex:JaneDoe foaf:knows ex:RichardRoe . ex:RichardRoe foaf:firstName "Richard" . ex:RichardRoe foaf:lastName "Roe" . .

Jane Doe が知っているすべての人々の名前を確認するには、次のクエリを記述できます。

curl http(s)://your_server:your_port/sparql \ -d "query=PREFIX foaf: <https://xmlns.com/foaf/0.1/> PREFIX ex: <https://www.example.com/> \ SELECT ?firstName WHERE { ex:JaneDoe foaf:knows ?person . ?person foaf:firstName ?firstName }" \ -H "Accept: text/csv"

このシンプルなクエリは次を返します。

firstName John Richard

次に、-d "explain=dynamic" を追加し、text/csv の代わりにデフォルトの出力タイプを使用して curl コマンドを変更し、explain を呼び出します。

curl http(s)://your_server:your_port/sparql \ -d "query=PREFIX foaf: <https://xmlns.com/foaf/0.1/> PREFIX ex: <https://www.example.com/> \ SELECT ?firstName WHERE { ex:JaneDoe foaf:knows ?person . ?person foaf:firstName ?firstName }" \ -d "explain=dynamic"

クエリは、デフォルトの出力タイプであるプリティープリントASCII形式 (HTTPコンテンツタイプ text/plain) で出力を返すようになりました。

╔════╤════════╤════════╤═══════════════════╤═══════════════════════════════════════════════════════╤══════════╤══════════╤═══════════╤═══════╤═══════════╗ ║ ID │ Out #1 │ Out #2 │ Name │ Arguments │ Mode │ Units In │ Units Out │ Ratio │ Time (ms) ║ ╠════╪════════╪════════╪═══════════════════╪═══════════════════════════════════════════════════════╪══════════╪══════════╪═══════════╪═══════╪═══════════╣ ║ 0 │ 1 │ - │ SolutionInjection │ solutions=[{}] │ - │ 0 │ 1 │ 0.00 │ 0 ║ ╟────┼────────┼────────┼───────────────────┼───────────────────────────────────────────────────────┼──────────┼──────────┼───────────┼───────┼───────────╢ ║ 1 │ 2 │ - │ PipelineJoin │ pattern=distinct(ex:JaneDoe, foaf:knows, ?person) │ - │ 1 │ 2 │ 2.00 │ 1 ║ ║ │ │ │ │ joinType=join │ │ │ │ │ ║ ║ │ │ │ │ joinProjectionVars=[?person] │ │ │ │ │ ║ ╟────┼────────┼────────┼───────────────────┼───────────────────────────────────────────────────────┼──────────┼──────────┼───────────┼───────┼───────────╢ ║ 2 │ 3 │ - │ PipelineJoin │ pattern=distinct(?person, foaf:firstName, ?firstName) │ - │ 2 │ 2 │ 1.00 │ 1 ║ ║ │ │ │ │ joinType=join │ │ │ │ │ ║ ║ │ │ │ │ joinProjectionVars=[?person, ?firstName] │ │ │ │ │ ║ ╟────┼────────┼────────┼───────────────────┼───────────────────────────────────────────────────────┼──────────┼──────────┼───────────┼───────┼───────────╢ ║ 3 │ 4 │ - │ Projection │ vars=[?firstName] │ retain │ 2 │ 2 │ 1.00 │ 0 ║ ╟────┼────────┼────────┼───────────────────┼───────────────────────────────────────────────────────┼──────────┼──────────┼───────────┼───────┼───────────╢ ║ 4 │ - │ - │ TermResolution │ vars=[?firstName] │ id2value │ 2 │ 2 │ 1.00 │ 1 ║ ╚════╧════════╧════════╧═══════════════════╧═══════════════════════════════════════════════════════╧══════════╧══════════╧═══════════╧═══════╧═══════════╝

Name 列およびその引数における演算についての詳細は、「EXPLAIN 演算子」を参照してください。

以下に行ごとの出力行を説明します。

  1. 主要なクエリの最初のステップでは常に、SolutionInjection 演算子を使用してソリューションを挿入します。次に、このソリューションは評価プロセスを介して最終結果へと拡大します。

    この場合、ユニバーサルソリューションと呼ばれる { } を挿入します。VALUES 句 あるいは BIND がある場合、このステップではより複雑な変数バインドを挿入して始めることもできます。

    Units Out 列は、この単一のソリューションが演算子から流出したことを示しています。Out #1 列は、この演算子が結果を出す先の演算子を指定します。この例では、すべての演算子はテーブル内に続く演算子に接続しています。

  2. 2 番目のステップは PipelineJoin です。これは、前の演算子 (Units In := 1) によって生成された単一のユニバーサル (完全に制約がない) ソリューションを入力として受け取ります。これは、pattern 引数によって定義されるタプルパターンに結合します。これは、パターンのシンプルな探索に対応します。この場合、3 つのパターンは以下のように定義されます。

    distinct( ex:JaneDoe, foaf:knows, ?person )

    joinType := join 引数は、これが通常の結合であることを示します (他のタイプには optional 結合、existence check 結合などが含まれます)。

    distinct := true 引数は、データベースから重複を排除した一致のみ (重複なし) を抽出し、重複を除外した一致を 変数 joinProjectionVars := ?person に重複してバインドすることを示します。

    Units Out 列の値が 2 であることは、2 つのソリューションが流出していることを示しています。具体的には、これらは ?person 変数のバインドであり、Jane Doe が知っているとデータが示す 2 人を反映します。

    ?person ------------- ex:JohnDoe ex:RichardRoe
  3. ステージ 2 の 2 つのソリューションは、入力 (Units In := 2) として 2 番目の PipelineJoin になります。この演算子は、次の 3 つのパターンに前の 2 つのソリューションを結合します。

    distinct(?person, foaf:firstName, ?firstName)

    ?person 変数は、演算子の着信ソリューションによって ex:JohnDoe あるいは ex:RichardRoe のいずれかにバインドされることになります。この結果、PipelineJoin は名前である John と Richard を抽出します。2 つの発信ソリューション (Units Out:=2) は、次のようになります。

    ?person | ?firstName --------------------------- ex:JohnDoe | John ex:RichardRoe | Richard
  4. 次の射影演算子は入力としてステージ 3 の 2 つのソリューションを用い (Units In := 2) を用いて、?firstName 変数に射影します。これによって、マッピング内の他のすべての変数バインドが排除され、2 つのバインドに渡されます (Units Out := 2)。

    ?firstName ---------- John Richard
  5. パフォーマンスを向上させるために、Neptune は、文字列自体ではなく、文字列リテラルURIsや などの用語に割り当てる内部識別子で可能な限り動作します。最後の演算子 TermResolution は、これらの内部の識別子から対応する項目の文字列に戻ってマッピングを実行します。

    通常の (explain ではない) クエリ評価では、最後の演算子によって計算された結果はリクエストされたシリアル化形式にシリアル化され、クライアントにストリームされます。

詳細モード出力の例

注記

SPARQL explain details モードは、Neptune エンジンリリース 1.0.2.1 以降で使用できます。

動的モードではなく詳細モードの前と同じクエリを実行するとします。

curl http(s)://your_server:your_port/sparql \ -d "query=PREFIX foaf: <https://xmlns.com/foaf/0.1/> PREFIX ex: <https://www.example.com/> \ SELECT ?firstName WHERE { ex:JaneDoe foaf:knows ?person . ?person foaf:firstName ?firstName }" \ -d "explain=details"

この例に示すように、出力は同じですが、出力の上部にあるクエリ文字列や PipelineJoin 演算子の patternEstimate カウントなど、いくつかの詳細が追加されています。

Query: PREFIX foaf: <https://xmlns.com/foaf/0.1/> PREFIX ex: <https://www.example.com/> SELECT ?firstName WHERE { ex:JaneDoe foaf:knows ?person . ?person foaf:firstName ?firstName } ╔════╤════════╤════════╤═══════════════════╤═══════════════════════════════════════════════════════╤══════════╤══════════╤═══════════╤═══════╤═══════════╗ ║ ID │ Out #1 │ Out #2 │ Name │ Arguments │ Mode │ Units In │ Units Out │ Ratio │ Time (ms) ║ ╠════╪════════╪════════╪═══════════════════╪═══════════════════════════════════════════════════════╪══════════╪══════════╪═══════════╪═══════╪═══════════╣ ║ 0 │ 1 │ - │ SolutionInjection │ solutions=[{}] │ - │ 0 │ 1 │ 0.00 │ 0 ║ ╟────┼────────┼────────┼───────────────────┼───────────────────────────────────────────────────────┼──────────┼──────────┼───────────┼───────┼───────────╢ ║ 1 │ 2 │ - │ PipelineJoin │ pattern=distinct(ex:JaneDoe, foaf:knows, ?person) │ - │ 1 │ 2 │ 2.00 │ 13 ║ ║ │ │ │ │ joinType=join │ │ │ │ │ ║ ║ │ │ │ │ joinProjectionVars=[?person] │ │ │ │ │ ║ ║ │ │ │ │ patternEstimate=2 │ │ │ │ │ ║ ╟────┼────────┼────────┼───────────────────┼───────────────────────────────────────────────────────┼──────────┼──────────┼───────────┼───────┼───────────╢ ║ 2 │ 3 │ - │ PipelineJoin │ pattern=distinct(?person, foaf:firstName, ?firstName) │ - │ 2 │ 2 │ 1.00 │ 3 ║ ║ │ │ │ │ joinType=join │ │ │ │ │ ║ ║ │ │ │ │ joinProjectionVars=[?person, ?firstName] │ │ │ │ │ ║ ║ │ │ │ │ patternEstimate=2 │ │ │ │ │ ║ ╟────┼────────┼────────┼───────────────────┼───────────────────────────────────────────────────────┼──────────┼──────────┼───────────┼───────┼───────────╢ ║ 3 │ 4 │ - │ Projection │ vars=[?firstName] │ retain │ 2 │ 2 │ 1.00 │ 1 ║ ╟────┼────────┼────────┼───────────────────┼───────────────────────────────────────────────────────┼──────────┼──────────┼───────────┼───────┼───────────╢ ║ 4 │ - │ - │ TermResolution │ vars=[?firstName] │ id2value │ 2 │ 2 │ 1.00 │ 7 ║ ╚════╧════════╧════════╧═══════════════════╧═══════════════════════════════════════════════════════╧══════════╧══════════╧═══════════╧═══════╧═══════════╝

静的モード出力の例

静的モード (デフォルト) ではなく詳細モードの前と同じクエリを実行するとします。

curl http(s)://your_server:your_port/sparql \ -d "query=PREFIX foaf: <https://xmlns.com/foaf/0.1/> PREFIX ex: <https://www.example.com/> \ SELECT ?firstName WHERE { ex:JaneDoe foaf:knows ?person . ?person foaf:firstName ?firstName }" \ -d "explain=static"

この例に示すように、出力は、最後の 3 つの列が除外されていることを除いて、同じになります。

╔════╤════════╤════════╤═══════════════════╤═══════════════════════════════════════════════════════╤══════════╗ ║ ID │ Out #1 │ Out #2 │ Name │ Arguments │ Mode ║ ╠════╪════════╪════════╪═══════════════════╪═══════════════════════════════════════════════════════╪══════════╣ ║ 0 │ 1 │ - │ SolutionInjection │ solutions=[{}] │ - ║ ╟────┼────────┼────────┼───────────────────┼───────────────────────────────────────────────────────┼──────────╢ ║ 1 │ 2 │ - │ PipelineJoin │ pattern=distinct(ex:JaneDoe, foaf:knows, ?person) │ - ║ ║ │ │ │ │ joinType=join │ ║ ║ │ │ │ │ joinProjectionVars=[?person] │ ║ ╟────┼────────┼────────┼───────────────────┼───────────────────────────────────────────────────────┼──────────╢ ║ 2 │ 3 │ - │ PipelineJoin │ pattern=distinct(?person, foaf:firstName, ?firstName) │ - ║ ║ │ │ │ │ joinType=join │ ║ ║ │ │ │ │ joinProjectionVars=[?person, ?firstName] │ ║ ╟────┼────────┼────────┼───────────────────┼───────────────────────────────────────────────────────┼──────────╢ ║ 3 │ 4 │ - │ Projection │ vars=[?firstName] │ retain ║ ╟────┼────────┼────────┼───────────────────┼───────────────────────────────────────────────────────┼──────────╢ ║ 4 │ - │ - │ TermResolution │ vars=[?firstName] │ id2value ║ ╚════╧════════╧════════╧═══════════════════╧═══════════════════════════════════════════════════════╧══════════╝

パラメータをエンコードするさまざま方法

次のクエリ例は、 SPARQL を呼び出すときにパラメータをエンコードする 2 つの異なる方法を示していますexplain

URL エンコードの使用 – この例では、パラメータのURLエンコードを使用し、動的出力を指定します。

curl -XGET "http(s)://your_server:your_port/sparql?query=SELECT%20*%20WHERE%20%7B%20%3Fs%20%3Fp%20%3Fo%20%7D%20LIMIT%20%31&explain=dynamic"

パラメータを直接指定する – これは、パラメータPOSTを直接渡すことを除いて、前のクエリと同じです。

curl http(s)://your_server:your_port/sparql \ -d "query=SELECT * WHERE { ?s ?p ?o } LIMIT 1" \ -d "explain=dynamic"

テクスト/プレーンの他の出力タイプ

上記の例では、デフォルト text/plain 出力タイプを使用しています。Neptune は、SPARQLexplain出力を text/csvと の 2 つの他の MIMEタイプの形式でフォーマットすることもできますtext/html。HTTP Accept ヘッダーを設定して呼び出すと、curl次のように の -H フラグを使用して実行できます。

-H "Accept: output type"

次に例を示します。

text/csv 出力

このクエリではCSV、 を指定して MIMEタイプの出力を呼び出します-H "Accept: text/csv"

curl http(s)://your_server:your_port/sparql \ -d "query=SELECT * WHERE { ?s ?p ?o } LIMIT 1" \ -d "explain=dynamic" \ -H "Accept: text/csv"

スプレッドシートまたはデータベースへのインポートに便利なCSV形式は、次のように各explain行のフィールドをセミコロン ( ) ; で区切ります。

ID;Out #1;Out #2;Name;Arguments;Mode;Units In;Units Out;Ratio;Time (ms) 0;1;-;SolutionInjection;solutions=[{}];-;0;1;0.00;0 1;2;-;PipelineJoin;pattern=distinct(?s, ?p, ?o),joinType=join,joinProjectionVars=[?s, ?p, ?o];-;1;6;6.00;1 2;3;-;Projection;vars=[?s, ?p, ?o];retain;6;6;1.00;2 3;-;-;Slice;limit=1;-;1;1;1.00;1

 

text/html 出力

を指定すると-H "Accept: text/html"、 はHTMLテーブルexplainを生成します。

<!DOCTYPE html> <html> <body> <table border="1px"> <thead> <tr> <th>ID</th> <th>Out #1</th> <th>Out #2</th> <th>Name</th> <th>Arguments</th> <th>Mode</th> <th>Units In</th> <th>Units Out</th> <th>Ratio</th> <th>Time (ms)</th> </tr> </thead> <tbody> <tr> <td>0</td> <td>1</td> <td>-</td> <td>SolutionInjection</td> <td>solutions=[{}]</td> <td>-</td> <td>0</td> <td>1</td> <td>0.00</td> <td>0</td> </tr> <tr> <td>1</td> <td>2</td> <td>-</td> <td>PipelineJoin</td> <td>pattern=distinct(?s, ?p, ?o)<br> joinType=join<br> joinProjectionVars=[?s, ?p, ?o]</td> <td>-</td> <td>1</td> <td>6</td> <td>6.00</td> <td>1</td> </tr> <tr> <td>2</td> <td>3</td> <td>-</td> <td>Projection</td> <td>vars=[?s, ?p, ?o]</td> <td>retain</td> <td>6</td> <td>6</td> <td>1.00</td> <td>2</td> </tr> <tr> <td>3</td> <td>-</td> <td>-</td> <td>Slice</td> <td>limit=1</td> <td>-</td> <td>1</td> <td>1</td> <td>1.00</td> <td>1</td> </tr> </tbody> </table> </body> </html>

ブラウザのHTMLレンダリングは、次のようなものです。

SPARQL Explain HTML出力のサンプル。

DFE が有効な場合のSPARQLexplain出力の例

Neptune DFE代替クエリエンジンが有効になっている場合のSPARQLexplain出力の例を次に示します。

╔════╤════════╤════════╤═══════════════════╤═════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╤══════════╤══════════╤═══════════╤═══════╤═══════════╗ ║ ID │ Out #1 │ Out #2 │ Name │ Arguments │ Mode │ Units In │ Units Out │ Ratio │ Time (ms) ║ ╠════╪════════╪════════╪═══════════════════╪═════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╪══════════╪══════════╪═══════════╪═══════╪═══════════╣ ║ 0 │ 1 │ - │ SolutionInjection │ solutions=[{}] │ - │ 0 │ 1 │ 0.00 │ 0 ║ ╟────┼────────┼────────┼───────────────────┼─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┼──────────┼──────────┼───────────┼───────┼───────────╢ ║ 1 │ 2 │ - │ HashIndexBuild │ solutionSet=solutionSet1 │ - │ 1 │ 1 │ 1.00 │ 22 ║ ║ │ │ │ │ joinVars=[] │ │ │ │ │ ║ ║ │ │ │ │ sourceType=pipeline │ │ │ │ │ ║ ╟────┼────────┼────────┼───────────────────┼─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┼──────────┼──────────┼───────────┼───────┼───────────╢ ║ 2 │ 3 │ - │ DFENode │ DFE Stats= │ - │ 101 │ 100 │ 0.99 │ 32 ║ ║ │ │ │ │ ====> DFE execution time (measured by DFEQueryEngine) │ │ │ │ │ ║ ║ │ │ │ │ accepted [micros]=127 │ │ │ │ │ ║ ║ │ │ │ │ ready [micros]=2 │ │ │ │ │ ║ ║ │ │ │ │ running [micros]=5627 │ │ │ │ │ ║ ║ │ │ │ │ finished [micros]=0 │ │ │ │ │ ║ ║ │ │ │ │ │ │ │ │ │ ║ ║ │ │ │ │ │ │ │ │ │ ║ ║ │ │ │ │ ===> DFE execution time (measured in DFENode) │ │ │ │ │ ║ ║ │ │ │ │ -> setupTime [ms]=1 │ │ │ │ │ ║ ║ │ │ │ │ -> executionTime [ms]=14 │ │ │ │ │ ║ ║ │ │ │ │ -> resultReadTime [ms]=0 │ │ │ │ │ ║ ║ │ │ │ │ │ │ │ │ │ ║ ║ │ │ │ │ │ │ │ │ │ ║ ║ │ │ │ │ ===> Static analysis statistics │ │ │ │ │ ║ ║ │ │ │ │ --> 35907 micros spent in parser. │ │ │ │ │ ║ ║ │ │ │ │ --> 7643 micros spent in range count estimation │ │ │ │ │ ║ ║ │ │ │ │ --> 2895 micros spent in value resolution │ │ │ │ │ ║ ║ │ │ │ │ │ │ │ │ │ ║ ║ │ │ │ │ --> 39974925 micros spent in optimizer loop │ │ │ │ │ ║ ║ │ │ │ │ │ │ │ │ │ ║ ║ │ │ │ │ │ │ │ │ │ ║ ║ │ │ │ │ DFEJoinGroupNode[ children={ │ │ │ │ │ ║ ║ │ │ │ │ DFEPatternNode[(?1, TERM[117442062], ?2, ?3) . project DISTINCT[?1, ?2] {rangeCountEstimate=100}, │ │ │ │ │ ║ ║ │ │ │ │ OperatorInfoWithAlternative[ │ │ │ │ │ ║ ║ │ │ │ │ rec=OperatorInfo[ │ │ │ │ │ ║ ║ │ │ │ │ type=INCREMENTAL_PIPELINE_JOIN, │ │ │ │ │ ║ ║ │ │ │ │ costEstimates=OperatorCostEstimates[ │ │ │ │ │ ║ ║ │ │ │ │ costEstimate=OperatorCostEstimate[in=1.0000,out=100.0000,io=0.0002,comp=0.0000,mem=0], │ │ │ │ │ ║ ║ │ │ │ │ worstCaseCostEstimate=OperatorCostEstimate[in=1.0000,out=100.0000,io=0.0002,comp=0.0000,mem=0]]], │ │ │ │ │ ║ ║ │ │ │ │ alt=OperatorInfo[ │ │ │ │ │ ║ ║ │ │ │ │ type=INCREMENTAL_HASH_JOIN, │ │ │ │ │ ║ ║ │ │ │ │ costEstimates=OperatorCostEstimates[ │ │ │ │ │ ║ ║ │ │ │ │ costEstimate=OperatorCostEstimate[in=1.0000,out=100.0000,io=0.0003,comp=0.0000,mem=3212], │ │ │ │ │ ║ ║ │ │ │ │ worstCaseCostEstimate=OperatorCostEstimate[in=1.0000,out=100.0000,io=0.0003,comp=0.0000,mem=3212]]]]], │ │ │ │ │ ║ ║ │ │ │ │ DFEPatternNode[(?1, TERM[150997262], ?4, ?5) . project DISTINCT[?1, ?4] {rangeCountEstimate=100}, │ │ │ │ │ ║ ║ │ │ │ │ OperatorInfoWithAlternative[ │ │ │ │ │ ║ ║ │ │ │ │ rec=OperatorInfo[ │ │ │ │ │ ║ ║ │ │ │ │ type=INCREMENTAL_HASH_JOIN, │ │ │ │ │ ║ ║ │ │ │ │ costEstimates=OperatorCostEstimates[ │ │ │ │ │ ║ ║ │ │ │ │ costEstimate=OperatorCostEstimate[in=100.0000,out=100.0000,io=0.0003,comp=0.0000,mem=6400], │ │ │ │ │ ║ ║ │ │ │ │ worstCaseCostEstimate=OperatorCostEstimate[in=100.0000,out=100.0000,io=0.0003,comp=0.0000,mem=6400]]], │ │ │ │ │ ║ ║ │ │ │ │ alt=OperatorInfo[ │ │ │ │ │ ║ ║ │ │ │ │ type=INCREMENTAL_PIPELINE_JOIN, │ │ │ │ │ ║ ║ │ │ │ │ costEstimates=OperatorCostEstimates[ │ │ │ │ │ ║ ║ │ │ │ │ costEstimate=OperatorCostEstimate[in=100.0000,out=100.0000,io=0.0010,comp=0.0000,mem=0], │ │ │ │ │ ║ ║ │ │ │ │ worstCaseCostEstimate=OperatorCostEstimate[in=100.0000,out=100.0000,io=0.0010,comp=0.0000,mem=0]]]]] │ │ │ │ │ ║ ║ │ │ │ │ }, │ │ │ │ │ ║ ║ │ │ │ │ ] │ │ │ │ │ ║ ║ │ │ │ │ │ │ │ │ │ ║ ║ │ │ │ │ ===> DFE configuration: │ │ │ │ │ ║ ║ │ │ │ │ solutionChunkSize=5000 │ │ │ │ │ ║ ║ │ │ │ │ ouputQueueSize=20 │ │ │ │ │ ║ ║ │ │ │ │ numComputeCores=3 │ │ │ │ │ ║ ║ │ │ │ │ maxParallelIO=10 │ │ │ │ │ ║ ║ │ │ │ │ numInitialPermits=12 │ │ │ │ │ ║ ║ │ │ │ │ │ │ │ │ │ ║ ║ │ │ │ │ │ │ │ │ │ ║ ║ │ │ │ │ ====> DFE configuration (reported back) │ │ │ │ │ ║ ║ │ │ │ │ numComputeCores=3 │ │ │ │ │ ║ ║ │ │ │ │ maxParallelIO=2 │ │ │ │ │ ║ ║ │ │ │ │ numInitialPermits=12 │ │ │ │ │ ║ ║ │ │ │ │ │ │ │ │ │ ║ ║ │ │ │ │ ===> Statistics & operator histogram │ │ │ │ │ ║ ║ │ │ │ │ ==> Statistics │ │ │ │ │ ║ ║ │ │ │ │ -> 3741 / 3668 micros total elapsed (incl. wait / excl. wait) │ │ │ │ │ ║ ║ │ │ │ │ -> 3741 / 3 millis total elapse (incl. wait / excl. wait) │ │ │ │ │ ║ ║ │ │ │ │ -> 3741 / 0 secs total elapsed (incl. wait / excl. wait) │ │ │ │ │ ║ ║ │ │ │ │ ==> Operator histogram │ │ │ │ │ ║ ║ │ │ │ │ -> 47.66% of total time (excl. wait): pipelineScan (2 instances) │ │ │ │ │ ║ ║ │ │ │ │ -> 10.99% of total time (excl. wait): merge (1 instances) │ │ │ │ │ ║ ║ │ │ │ │ -> 41.17% of total time (excl. wait): symmetricHashJoin (1 instances) │ │ │ │ │ ║ ║ │ │ │ │ -> 0.19% of total time (excl. wait): drain (1 instances) │ │ │ │ │ ║ ║ │ │ │ │ │ │ │ │ │ ║ ║ │ │ │ │ nodeId | out0 | out1 | opName | args | rowsIn | rowsOut | chunksIn | chunksOut | elapsed* | outWait | outBlocked | ratio | rate* [M/s] | rate [M/s] | % │ │ │ │ │ ║ ║ │ │ │ │ ------ | ------ | ---- | ----------------- | ------------------------------------------------ | ------ | ------- | -------- | --------- | -------- | ------- | ---------- | -------- | ----------- | ---------- | ----- │ │ │ │ │ ║ ║ │ │ │ │ node_0 | node_2 | - | pipelineScan | (?1, TERM[117442062], ?2, ?3) DISTINCT [?1, ?2] | 0 | 100 | 0 | 1 | 874 | 0 | 0 | Infinity | 0.1144 | 0.1144 | 23.83 │ │ │ │ │ ║ ║ │ │ │ │ node_1 | node_2 | - | pipelineScan | (?1, TERM[150997262], ?4, ?5) DISTINCT [?1, ?4] | 0 | 100 | 0 | 1 | 874 | 0 | 0 | Infinity | 0.1144 | 0.1144 | 23.83 │ │ │ │ │ ║ ║ │ │ │ │ node_2 | node_4 | - | symmetricHashJoin | | 200 | 100 | 2 | 2 | 1510 | 73 | 0 | 0.50 | 0.0662 | 0.0632 | 41.17 │ │ │ │ │ ║ ║ │ │ │ │ node_3 | - | - | drain | | 100 | 0 | 1 | 0 | 7 | 0 | 0 | 0.00 | 0.0000 | 0.0000 | 0.19 │ │ │ │ │ ║ ║ │ │ │ │ node_4 | node_3 | - | merge | | 100 | 100 | 2 | 1 | 403 | 0 | 0 | 1.00 | 0.2481 | 0.2481 | 10.99 │ │ │ │ │ ║ ╟────┼────────┼────────┼───────────────────┼─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┼──────────┼──────────┼───────────┼───────┼───────────╢ ║ 3 │ 4 │ - │ HashIndexJoin │ solutionSet=solutionSet1 │ - │ 100 │ 100 │ 1.00 │ 4 ║ ║ │ │ │ │ joinType=join │ │ │ │ │ ║ ╟────┼────────┼────────┼───────────────────┼─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┼──────────┼──────────┼───────────┼───────┼───────────╢ ║ 4 │ 5 │ - │ Distinct │ vars=[?s, ?o, ?o1] │ - │ 100 │ 100 │ 1.00 │ 9 ║ ╟────┼────────┼────────┼───────────────────┼─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┼──────────┼──────────┼───────────┼───────┼───────────╢ ║ 5 │ 6 │ - │ Projection │ vars=[?s, ?o, ?o1] │ retain │ 100 │ 100 │ 1.00 │ 2 ║ ╟────┼────────┼────────┼───────────────────┼─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┼──────────┼──────────┼───────────┼───────┼───────────╢ ║ 6 │ - │ - │ TermResolution │ vars=[?s, ?o, ?o1] │ id2value │ 100 │ 100 │ 1.00 │ 11 ║ ╚════╧════════╧════════╧═══════════════════╧═════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╧══════════╧══════════╧═══════════╧═══════╧═══════════╝