

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

# Neptune SPARQL `explain` 演算子
<a name="sparql-explain-operators"></a>

以下のセクションでは、Amazon Neptune で現在使用できる SPARQL `explain` 機能の演算子とパラメータについて説明しています。

**重要**  
SPARQL `explain` 機能は今後も改良されます。ここに記載されている演算子とパラメータは、今後のバージョンで変更される可能性があります。

**Topics**
+ [`Aggregation`operator](#sparql-explain-operator-aggregation)
+ [`ConditionalRouting`operator](#sparql-explain-operator-conditional-routing)
+ [`Copy`operator](#sparql-explain-operator-copy)
+ [`DFENode`operator](#sparql-explain-operator-dfenode)
+ [`Distinct`operator](#sparql-explain-operator-distinct)
+ [`Federation`operator](#sparql-explain-operator-federation)
+ [`Filter`operator](#sparql-explain-operator-filter)
+ [`HashIndexBuild`operator](#sparql-explain-operator-hash-index-build)
+ [`HashIndexJoin`operator](#sparql-explain-operator-hash-index-join)
+ [`MergeJoin`operator](#sparql-explain-operator-merge-join)
+ [`NamedSubquery`operator](#sparql-explain-operator-named-subquery)
+ [`PipelineJoin`operator](#sparql-explain-operator-pipeline-join)
+ [`PipelineCountJoin`operator](#sparql-explain-operator-pipeline-count-join)
+ [`PipelinedHashIndexJoin`operator](#sparql-explain-operator-pipeline-hash-index-join)
+ [`Projection`operator](#sparql-explain-operator-projection)
+ [`PropertyPath`operator](#sparql-explain-operator-property-path)
+ [`TermResolution`operator](#sparql-explain-operator-term-resolution)
+ [`Slice`operator](#sparql-explain-operator-slice)
+ [`SolutionInjection`operator](#sparql-explain-operator-solution-injection)
+ [`Sort`operator](#sparql-explain-operator-sort)
+ [`VariableAlignment`operator](#sparql-explain-operator-variable-alignment)

## `Aggregation`operator
<a name="sparql-explain-operator-aggregation"></a>

SPARQL 集約演算のセマンティクス (`count`、`max`、`min`、`sum` など) を実装した 1 つ以上の集計を実行します。

`Aggregation` には、オプションとして `groupBy` を使用したグループ化、およびオプションとして `having` 制約が用意されています。

**引数**
+ `groupBy` – (*オプション*) 着信ソリューションのグループ化の基盤となる連続式を指定する `groupBy` 句を提供します。
+ `aggregates` –  (*必須*) 集約式の順序リストを指定します。
+ `having` – (*オプション*) SPARQL クエリ内の `having` 句に指定されるように、グループに制約フィルターを追加します。

## `ConditionalRouting`operator
<a name="sparql-explain-operator-conditional-routing"></a>

指定された条件に基づいて、受信ソリューションをルーティングします。条件を満たすソリューションは、`Out #1` に参照されるオペレーター ID にルーティングされます。条件を満たさないソリューションは、`Out #2` に参照されるオペレーターにルーティングされません。

**引数**
+ `condition` – (*必須*) ルーティング条件。

## `Copy`operator
<a name="sparql-explain-operator-copy"></a>

指定されたモードに示されるように、ソリューションストームを委任します。

**モード**
+ `forward` – ソリューションを `Out #1` によって識別されるダウンストリーム演算子に転送します。
+ `duplicate` – ソリューションを複製し、それぞれを `Out #1` および `Out #2` によって識別される 2 つの演算子に転送します。

`Copy` には引数がありません。

## `DFENode`operator
<a name="sparql-explain-operator-dfenode"></a>

この演算子は、DFE 代替クエリエンジンによって実行されるプランの抽象化です。詳細な DFE 計画は、この演算子の引数に概説されています。引数は現在、DFE プランの詳細なランタイム統計を含むようにオーバーロードされています。これには、DFE によるクエリ実行のさまざまなステップに費やされた時間が含まれます。

DFE クエリプランの論理最適化抽象構文ツリー (AST) には、計画中に考慮された演算子タイプに関する情報と、演算子の実行に関連する最良および最悪の場合のコストが出力されます。AST は、現時点で次のタイプのノードで構成されています。
+ `DFEJoinGroupNode`   –   1 つ以上の `DFEPatternNodes` の結合を表します。
+ `DFEPatternNode` - 基礎となるデータベースから一致するタプルが投影される基になるパターンを括弧で囲みます。

サブセクション、`Statistics & Operator histogram` には、各オペレータが使用するCPU時間の `DataflowOp` 計画と内訳の実行時間に関する詳細が含まれています。この下に、DFE によって実行されるプランの詳細なランタイム統計を出力する表があります。

**注記**  
SPARQL の DFE サポートは実験的な機能であるため、`explain`出力の正確な形式が変わる可能性があります。

## `Distinct`operator
<a name="sparql-explain-operator-distinct"></a>

変数のサブセットにおける個別の射影を計算し、重複を排除します。その結果、流入するソリューションの数は流出するソリューションの数より大きいかあるいは等しくなります。

**引数**
+ `vars` – (*必須*) `Distinct` 射影を適用する変数。

## `Federation`operator
<a name="sparql-explain-operator-federation"></a>

指定されたクエリを指定されたリモート SPARQL エンドポイントに渡します。

**引数**
+ `endpoint` – (*必須*) SPARQL `SERVICE` ステートメントのエンドポイント URL。これは定数文字列にすることができます。または、クエリエンドポイントが同じクエリ内の変数に基づいて決定される場合は、変数名にすることができます。
+ `query` – (*必須*) リモートエンドポイントに送信される、再構築されたクエリ文字列。エンジンは、クライアントが指定されていない場合でも、このクエリにデフォルトのプレフィックスを追加します。
+ `silent` – (*必須*) `SILENT` キーワードがキーワードの後に表示されるかどうかを示すブール値。`SILENT` は、リモート `SERVICE` 部分が失敗してもクエリ全体が失敗しないようにエンジンに指示します。

## `Filter`operator
<a name="sparql-explain-operator-filter"></a>

着信ソリューションをフィルタリングします。フィルタリング条件を満たすソリューションのみがアップストリームに転送され、その他すべては削除されます。

**引数**
+ `condition` – (*必須*) フィルタリング条件。

## `HashIndexBuild`operator
<a name="sparql-explain-operator-hash-index-build"></a>

バインドのリストを取得し、`solutionSet` 引数で定義される名前を持つハッシュインデックスにこのリストをスプールします。通常は、以降の演算子の実行は、名前を参照して、この一連のソリューションに対して結合します。

**引数**
+ `solutionSet` – (*必須*) 一連のハッシュインデックスソリューションの名前。
+ `sourceType` – (*必須*) ハッシュインデックスに保存されるバインドが取得される元のソースのタイプ。
  + `pipeline` – 演算子パイプラインのダウンストリーム演算子から着信するソリューションをハッシュインデックスにスプールします。
  + `binding set` – `sourceBindingSet` 引数によって指定される一連の固定バインドをハッシュインデックスにスプールします。
+ `sourceBindingSet` – (*オプション*) `sourceType` 引数の値が `binding set` の場合、この引数はハッシュインデックスにスプールされる一連の静的バインドを指定します。

## `HashIndexJoin`operator
<a name="sparql-explain-operator-hash-index-join"></a>

`solutionSet` 引数によって識別されるハッシュインデックスに対する着信ソリューションを結合します。

**引数**
+ `solutionSet` – (*必須*) 結合するソリューションの名前。これは、`HashIndexBuild` 演算子を使用して前のステップで作成したハッシュインデックスである必要があります。
+ `joinType` – (*必須*) 実行する結合のタイプ。
  + `join` – 共有するすべての変数間における完全な一致を必要とする、通常結合です。
  + `optional` – SPARQL `OPTIONAL` 演算子セマンティクスを使用する `optional` 結合。
  + `minus` – SPARQL `MINUS` 演算子セマンティクスを使用した、結合パートナーが存在しないマッピングがある `minus` 演算。
  + `existence check` – 結合パートナーがあるかどうかを確認し、この確認の結果に `existenceCheckResultVar` 変数をバインドします。
+ `constraints` – (*オプション*) 結合中に考慮される追加の結合制約。これらの制約を満たさない結合は、除外されます。
+ `existenceCheckResultVar` – (*オプション*) `joinType` が `existence check` と等しくなる結合のみに使用されます (前の `joinType` 引数を参照)。

## `MergeJoin`operator
<a name="sparql-explain-operator-merge-join"></a>

`solutionSets` 引数によって識別される、一連の複数のソリューション間のマージ結合。

**引数**
+ `solutionSets` –  (*必須*) 一緒に結合する一連のソリューション。

## `NamedSubquery`operator
<a name="sparql-explain-operator-named-subquery"></a>

`subQuery` 引数によって識別されるサブクエリの評価をトリガーし、その結果を `solutionSet` 引数によって指定される一連のソリューション内にスプールします。演算子の着信ソリューションはサブクエリに転送され、その後次の演算子に転送されます。

**引数**
+ `subQuery` –  (*必須*) 評価するサブクエリの名前。サブクエリは出力で明示的にレンダリングされます。
+ `solutionSet` –  (*必須*) サブクエリの結果を保存する一連のソリューションの名前。

## `PipelineJoin`operator
<a name="sparql-explain-operator-pipeline-join"></a>

前の演算子の出力を入力として受け取り、これを `pattern` 引数によって定義されるタプルパターンに結合します。

**引数**
+ `pattern` –  (*必須*) subject-predicate-object の形式となるパターン。オプションで -graph tuple が結合の基礎となります。パターンに `distinct` が指定されている場合、この結合は、すべての一致するソリューションではなく、`projectionVars` 引数によって指定される射影変数からの重複排除ソリューションのみを抽出します。
+ `inlineFilters` – (*オプション*) パターンで変数に適用される一連のフィルター。パターンはこれらのフィルターと組み合わせて評価されます。
+ `joinType` – (*必須*) 実行する結合のタイプ。
  + `join` – 共有するすべての変数間における完全な一致を必要とする、通常結合です。
  + `optional` – SPARQL `OPTIONAL` 演算子セマンティクスを使用する `optional` 結合。
  + `minus` – SPARQL `MINUS` 演算子セマンティクスを使用した、結合パートナーが存在しないマッピングがある `minus` 演算。
  + `existence check` – 結合パートナーがあるかどうかを確認し、この確認の結果に `existenceCheckResultVar` 変数をバインドします。
+ `constraints` – (*オプション*) 結合中に考慮される追加の結合制約。これらの制約を満たさない結合は、除外されます。
+ `projectionVars` – (*オプション*) 射影変数。`distinct := true` と組み合わせて使用され、指定した一連の変数から重複を排除した射影の抽出を強制します。
+ `cutoffLimit` – (*オプション*) 抽出された結合パートナーの数のカットオフ制限。デフォルトによる制限はありませんが、結合パートナーがあることを証明あるいは否定するために十分な場合に、`FILTER (NOT) EXISTS` 句を実装する結合を実行するときにこれを 1 に設定できます。

## `PipelineCountJoin`operator
<a name="sparql-explain-operator-pipeline-count-join"></a>

`PipelineJoin` の変形。結合の代わりに、一致する結合パートナーを単にカウントし、`countVar` 引数によって指定される変数にこのカウントをバインドします。

**引数**
+ `countVar` –  (*必須*) カウントの結果の変数、つまり結合パートナーの数がバインドされる必要があります。
+ `pattern` –  (*必須*) subject-predicate-object の形式となるパターン。オプションで -graph tuple が結合の基礎となります。パターンに `distinct` が指定されている場合、この結合は、すべての一致するソリューションではなく、`projectionVars` 引数によって指定される射影変数からの重複排除ソリューションのみを抽出します。
+ `inlineFilters` – (*オプション*) パターンで変数に適用される一連のフィルター。パターンはこれらのフィルターと組み合わせて評価されます。
+ `joinType` – (*必須*) 実行する結合のタイプ。
  + `join` – 共有するすべての変数間における完全な一致を必要とする、通常結合です。
  + `optional` – SPARQL `OPTIONAL` 演算子セマンティクスを使用する `optional` 結合。
  + `minus` – SPARQL `MINUS` 演算子セマンティクスを使用した、結合パートナーが存在しないマッピングがある `minus` 演算。
  + `existence check` – 結合パートナーがあるかどうかを確認し、この確認の結果に `existenceCheckResultVar` 変数をバインドします。
+ `constraints` – (*オプション*) 結合中に考慮される追加の結合制約。これらの制約を満たさない結合は、除外されます。
+ `projectionVars` – (*オプション*) 射影変数。`distinct := true` と組み合わせて使用され、指定した一連の変数から重複を排除した射影の抽出を強制します。
+ `cutoffLimit` – (*オプション*) 抽出された結合パートナーの数のカットオフ制限。デフォルトによる制限はありませんが、結合パートナーがあることを証明あるいは否定するために十分な場合に、`FILTER (NOT) EXISTS` 句を実装する結合を実行するときにこれを 1 に設定できます。

## `PipelinedHashIndexJoin`operator
<a name="sparql-explain-operator-pipeline-hash-index-join"></a>

これはオールインワンのビルドハッシュインデックスおよび結合演算子です。バインディングのリストを取得してハッシュインデックスにスプールし、そのハッシュインデックスに対して受信ソリューションを結合します。

**引数**
+ `sourceType` – (*必須*) ハッシュインデックスに保存されるバインドが取得される元のソースのタイプ。
  + `pipeline` – `PipelinedHashIndexJoin` は、演算子パイプラインのダウンストリームの演算子から着信するソリューションをハッシュインデックスにスプールします。
  + `binding set` – `PipelinedHashIndexJoin` は、`sourceBindingSet` 引数によって指定された固定バインドセットをハッシュインデックスにスプールします。
+ `sourceSubQuery ` — (*オプション*) `sourceType` 引数の値が `pipeline` の場合、この引数は、評価されてハッシュインデックスにスプールされるサブクエリを指定します。
+ `sourceBindingSet ` – (*オプション*) `sourceType` 引数の値が `binding set` の場合、この引数はハッシュインデックスにスプールされる静的バインドセットを指定します。
+ `joinType` – (*必須*) 実行される結合のタイプ。
  + `join` – 共有するすべての変数間における完全な一致を必要とする、通常結合です。
  + `optional` – SPARQL `OPTIONAL` 演算子セマンティクスを使用する `optional` 結合。
  + `minus` – SPARQL `MINUS` 演算子セマンティクスを使用した、結合パートナーが存在しないマッピングがある `minus` 演算。
  + `existence check` – 結合パートナーがあるかどうかを確認し、この確認の結果に `existenceCheckResultVar` 変数をバインドします。
+ `existenceCheckResultVar` – (*オプション*) `joinType` が `existence check` に等しい場合にのみ、結合に使用されます (前の joinType 引数を参照)。

## `Projection`operator
<a name="sparql-explain-operator-projection"></a>

変数のサブセット間で射影を行います。流入するソリューションの数は流出するソリューションの数と同じですが、ソリューションの形はモードの設定に応じて異なります。

**モード**
+ `retain` – `vars` 引数によって指定される変数のみをソリューションに保持します。
+ `drop` – `vars` 引数によって指定されるすべての変数を除外します。

**引数**
+ `vars` –  (*必須*) モード設定に応じて、変数を保持あるいは除外します。

## `PropertyPath`operator
<a name="sparql-explain-operator-property-path"></a>

次のような再帰的なプロパティパスを有効にします。`+` または`*`。Neptune は、`iterationTemplate` 引数によって指定されるテンプレートに基づく固定小数点反復アプローチを実装します。既知の左側または右側の変数は、新しいソリューションが見つからなくなるまで、すべての固定小数点反復のテンプレートにバインドされます。

**引数**
+ `iterationTemplate` –  (*必須*) 固定小数点反復を実装するために使用されるサブクエリテンプレートの名前です。
+ `leftTerm` –  (*必須*) プロパティパスの左側の項目 (変数あるいは定数) です。
+ `rightTerm` –  (*必須*) プロパティパスの右側の項目 (変数あるいは定数) です。
+ `lowerBound` –  (*必須*) 固定小数点反復の下限 (`*` クエリでは `0`、または `+` クエリでは `1`)。

## `TermResolution`operator
<a name="sparql-explain-operator-term-resolution"></a>

モードに応じて、内部文字列識別子の値を対応する外部の文字列に変換するか、または外部文字列を内部文字列識別子の値に変換します。

**モード**
+ `value2id` – 内部 ID の値に対応するリテラルや URI などのマップ項目 (内部値にエンコード)。
+ `id2value` – 内部 ID をリテラルや URI など対応する項目にマッピングします (内部値にデコード)。

**引数**
+ `vars` –  (*必須*) マップする必要がある文字列あるいは内部文字列 ID の変数を指定します。

## `Slice`operator
<a name="sparql-explain-operator-slice"></a>

SPARQL の `LIMIT` および `OFFSET` 句のセマンティクスを使用して、着信ソリューションストリームにスライスを実装します。

**引数**
+ `limit` – (*オプション*) 転送されるソリューションの制限。
+ `offset` – (*オプション*) ソリューションが転送のために評価されるオフセット。

## `SolutionInjection`operator
<a name="sparql-explain-operator-solution-injection"></a>

入力を受け取りません。クエリプランにソリューションを静的に挿入し、これを `solutions` 引数に記録します。

クエリプランは常にこの静的挿入で始まります。静的バインドの複数のソースを組み合わせることで (`VALUES` や `BIND` 句からなど)、挿入する静的ソリューションがクエリ自身から配信されることができる場合、`SolutionInjection` 演算子は配信されたこれらの静的ソリューションを挿入します。シンプルなケースでは、これらは外部の `VALUES` 句によって示されるバインドを反映します。

クエリから配信される静的ソリューションがない場合、`SolutionInjection` はユニバーサルソリューションと呼ばれる空を挿入します。これは、クエリ評価プロセスを通して展開し、乗算されます。

**引数**
+ `solutions` –  (*必須*) 演算子によって挿入されるソリューションのシーケンス。

## `Sort`operator
<a name="sparql-explain-operator-sort"></a>

指定されたソート条件を使用して、一連のソリューションをソートします。

**引数**
+ `sortOrder` –  (*必須*) 変数の注文リスト。各変数には `ASC` (昇順) または `DESC` (降順) 識別子が含まれ、一連のソリューションをソートするために順次使用されます。

## `VariableAlignment`operator
<a name="sparql-explain-operator-variable-alignment"></a>

ソリューションを 1 つ 1 つ検査し、2 つの変数 (指定された `sourceVar` および 指定された `targetVar`) でそれぞれに配列を実行します。

ソリューションの `sourceVar` および `targetVar` に同じ値がある場合、この変数は同調している考慮され、このソリューションは転送されます。重複した `sourceVar` は排除されます。

変数が異なる値にバインドされる場合、このソリューションは全体的に除外されます。

**引数**
+ `sourceVar` –  (*必須*) ターゲット変数と比較されるソース変数。ソリューションで同調に成功した場合、これは、2 つの変数に同じ値があり、ソース変数が排除されることになります。
+ `targetVar` –  (*必須*) ソース変数が比較されるターゲット変数。同調に成功した場合でも保持されます。