דרישות לגבי סכימה
אפשר להריץ אלגוריתמים של 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חייב להכיל רק תבנית אלמנט אחת (צומת או קצה) עם משתנה אחד בעל שם. - כשדפוס קצה כולל דפוסים מפורשים לצמתי קצה, אל תשתמשו בתווית צומת או במשתנה בדפוסי הצמתים.
- אפשר להשתמש בסעיף
WHEREבתבנית הרכיב אם הוא לא מתייחס למשתנים שהוגדרו במקום אחר. - ביטוי התווית בסעיף
MATCHצריך לזהות באופן ייחודי טבלת רכיבים אחת.
בדוגמאות הבאות אפשר לראות סעיפים נתמכים של 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, עם כמה מגבלות:
- אם אלגוריתם מחזיר Node, אפשר להחזיר כל מאפיין של הצומת. אפשר גם להחזיר את ELEMENT_DEFINITION_NAME של הצומת.
- אם אלגוריתם מחזיר Path, אפשר להחזיר
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
אין תמיכה בפרמטרים
שאילתות אלגוריתם לא תומכות בפרמטרים של שאילתה.
תמיכה בגרפים שנוצרו מתצוגה
כשיוצרים את הגרף בתצוגה מפורטת, אפשר להשתמש בשאילתות אלגוריתם רק אם הצמתים והקשתות (כולל צמתי הקצה של הקשת) שמשמשים להגדרת קלט האלגוריתם לא מבוססים על תצוגה מפורטת.
המאמרים הבאים
- אלגוריתמים של Spanner Graph.
- קטלוג האלגוריתמים של Spanner Graph.
- שיטות מומלצות לאלגוריתם של Spanner Graph.