スキーマの要件
Spanner Graph アルゴリズムは、次の要件を満たすスキーマを持つグラフで実行できます。
- エッジ入力テーブルは、ソースノード入力テーブルにインターリーブされ、 外部 キー または情報用の外部 キー が宛先ノード入力テーブルに必要です。Spanner Graph スキーマを設計するための ベスト プラクティスをご覧ください。
- グラフ アルゴリズムへの各入力テーブルには、一意の識別 ラベルが必要です。
サポートされていないスキーマの例を次に示します。
-- Unsupported: Both `Person` and `Account` can only be referred to via label `Entity`.
CREATE PROPERTY GRAPH FinGraph
NODE TABLES (
Person KEY (id)
LABEL Entity PROPERTIES (...),
Account KEY (id)
LABEL Entity PROPERTIES (...)
);
サポートされているスキーマの例を次に示します。
-- Supported: Even though label `Entity` refers to both `Person` and `Account`,
-- label `Customer` uniquely identifies `Person`, label `Account` uniquely identifies `Account`.
CREATE PROPERTY GRAPH FinGraph
NODE TABLES (
Person KEY (id)
LABEL Customer PROPERTIES (...)
LABEL Entity PROPERTIES (...),
Account KEY (id)
LABEL Account PROPERTIES (...)
LABEL Entity PROPERTIES (...)
);
機能の互換性
このセクションでは、一般的なグラフ機能とのアルゴリズム クエリの互換性について説明します。
サポートされている MATCH 句
アルゴリズム クエリ構造で MATCH 句を使用してアルゴリズムの入力グラフを定義する場合は、次の点を考慮する必要があります。
- 各
MATCHには、名前付き変数が 1 つの要素パターン(ノードまたはエッジ)が 1 つだけ含まれている必要があります。 - エッジパターンに終了ノードの明示的なパターンが含まれている場合は、ノードパターンでノードラベルまたは変数を使用しないでください。
- 要素パターン内で
WHERE句を使用できます。ただし、他の場所で定義された変数を参照しない場合に限ります。 MATCH句のラベル式は、1 つの要素テーブルを一意に識別する必要があります。
サポートされている MATCH 句の例を次に示します。
-- Supported: Assuming only 1 element table has `Account` label:
MATCH (a:Account)
MATCH (a:Account WHERE a.id > 400)
MATCH (a:Account WHERE a.id IN [101, 102, 105])
MATCH -[e:Transfers WHERE e.amount < 500]->
サポートされていない MATCH 句の例を次に示します。
-- Unsupported: End nodes for edge patterns cannot have labels or named variables.
MATCH (a:Account)-[]->
-- Unsupported: Each MATCH can only name one variable.
MATCH (a:Account)-[e:Transfers]->
-- Unsupported: If there are multiple node element tables in the graph, each MATCH
-- must uniquely identify one element table.
MATCH (a)
-- Unsupported: The `Entity` label maps to both `Account` and `Person` node element tables.
MATCH (a:Account | Entity)
RETURN 句を使用する
アルゴリズム クエリ構造の RETURN 句は、アルゴリズム クエリによって返されるデータを定義します。RETURN 句では、アルゴリズムの出力シグネチャの列を参照できますが、いくつかの制約があります。
- アルゴリズムが ノードを出力する場合は、 ノードの任意のプロパティを返すことができます。ノードの ELEMENT_DEFINITION_NAME を返すこともできます。
- アルゴリズムが
パスを出力する場合は、
PATH_LENGTH(path).を返すことができます。 - アルゴリズムからスカラー出力を返すことができます。
- リテラル定数を返すことができます。
サポートされている RETURN 句の例を次に示します。
-- Supported.
CALL PageRank(...) YIELD node, score
RETURN ELEMENT_DEFINITION_NAME(node) AS node_type, node.id, score
-- Supported: You can return constants.
CALL PageRank(...) YIELD node, score
RETURN node.id, score, "pagerank-run1" AS algo_run_id
-- Supported.
CALL ShortestPath(...) YIELD source_node, target_node, path, cost
RETURN source_node.id AS source_id, target_node.id AS target_id,
PATH_LENGTH(path) AS length, cost
サポートされていない RETURN 句の例を次に示します。
-- Unsupported: You cannot return the graph element `node` directly.
RETURN node, score
-- Unsupported: You can only return properties of `node`. Applying a function to a node property
-- is not supported.
RETURN node.id + 1, score
-- Unsupported: You can only return the scalar `score` directly from the algorithm output. Applying
-- a function to scalar output is not supported.
RETURN node.id, score + 1
-- Unsupported: General function calls are not allowed.
RETURN JSON_OBJECT(node.id, score) as json_obj
パラメータは対象外です
アルゴリズム クエリはクエリ パラメータをサポートしていません。
ビューから作成されたグラフのサポート
ビューでグラフを作成する場合、アルゴリズム クエリは、アルゴリズム入力の定義に使用されるノードとエッジ(エッジの終了ノードを含む)がビューに基づいていない場合にのみサポートされます。