במאמר הזה מוסבר איך לנהל נתונים בתרשים באמצעות הוספה, עדכון ומחיקה של צמתים וקשתות. Spanner Graph ממפה נתונים מטבלאות לצמתים ולקשתות של גרף. כדי לשנות נתונים בתרשים, צריך לשנות נתונים בטבלאות הקלט המתאימות. אפשר להשתמש במסוף Google Cloud , ב-Google Cloud CLI או בספריות הלקוח של Spanner כדי לנהל נתונים של גרפים.
הגדרת Spanner Graph
כדי לנהל נתונים ב-Spanner Graph, צריך להגדיר גרף. לשם כך, צריך לבצע את הפעולות הבאות:
יוצרים מסד נתונים במופע Spanner.
מכניסים את נתוני התרשים למסד הנתונים.
בדוגמאות שבקטעים האלה נעשה שימוש במופע ובמסד הנתונים שיצרתם כשמגדירים את Spanner Graph באמצעות השלבים הקודמים.
הוספת צמתים או קשתות
כדי להוסיף צמתים או קשתות לטבלאות של צמתים או קשתות, משתמשים במסוף Google Cloud , ב-CLI של gcloud או בספריות הלקוח של Spanner.
במסוף Google Cloud וב-CLI של gcloud, אפשר להשתמש בשפת טיפול בנתונים (DML) של GoogleSQL. בספריית הלקוח של Spanner, אפשר להשתמש ב-DML או ב-Mutation APIs.
לפני שמוסיפים קשת, צריך לוודא שצומתי המקור והיעד שמחוברים באמצעות הקשת קיימים. אם מוסיפים קצה כשצומת המקור או היעד שמחובר לקצה לא קיים, יכול להיות שיופיעו שגיאות של הפרת שלמות רפרנציאלית. מידע נוסף זמין במאמרים בנושא Missing source node violates INTERLEAVE IN relationship ו-Missing destination node violates foreign key constraint.
בדוגמאות הבאות מוסיפים צמתי Account וקשתות Transfer למסד הנתונים שיצרתם במאמר הגדרת Spanner Graph.
המסוף
במסוף Google Cloud , מריצים את פקודת ה-DML הבאה. מידע נוסף מופיע במאמר הרצת הצהרות במסוף Google Cloud .
-- Insert 2 Account nodes.
INSERT INTO Account (id, create_time, is_blocked)
VALUES (1, CAST('2000-08-10 08:18:48.463959-07:52' AS TIMESTAMP), false);
INSERT INTO Account (id, create_time, is_blocked)
VALUES (2, CAST('2000-08-12 07:13:16.463959-03:41' AS TIMESTAMP), true);
-- Insert 2 Transfer edges.
INSERT INTO AccountTransferAccount (id, to_id, create_time, amount)
VALUES (1, 2, CAST('2000-09-11 03:11:18.463959-06:36' AS TIMESTAMP), 100);
INSERT INTO AccountTransferAccount (id, to_id, create_time, amount)
VALUES (1, 1, CAST('2000-09-12 04:09:34.463959-05:12' AS TIMESTAMP), 200);
gcloud
מריצים את הפקודות הבאות ב-CLI של gcloud. למידע נוסף, אפשר לעיין במאמר הרצת הצהרות באמצעות ה-CLI של gcloud.
gcloud spanner databases execute-sql DATABASE-NAME --instance=INSTANCE-NAME \ --sql="INSERT INTO Account (id, create_time, is_blocked) VALUES (1, CAST('2000-08-10 08:18:48.463959-07:52' AS TIMESTAMP), false)"gcloud spanner databases execute-sql DATABASE-NAME --instance=INSTANCE-NAME \ --sql="INSERT INTO Account (id, create_time, is_blocked) VALUES (2, CAST('2000-08-12 07:13:16.463959-03:41' AS TIMESTAMP), true)"gcloud spanner databases execute-sql DATABASE-NAME --instance=INSTANCE-NAME \ --sql="INSERT INTO AccountTransferAccount (id, to_id, create_time, amount) VALUES (1, 2, CAST('2000-09-11 03:11:18.463959-06:36' AS TIMESTAMP), 100)"gcloud spanner databases execute-sql DATABASE-NAME --instance=INSTANCE-NAME \ --sql="INSERT INTO AccountTransferAccount (id, to_id, create_time, amount) VALUES (1, 1, CAST('2000-09-12 04:09:34.463959-05:12' AS TIMESTAMP), 200)"
מחליפים את מה שכתוב בשדות הבאים:
- DATABASE_NAME: השם של מסד הנתונים.
- INSTANCE_NAME: השם של המכונה.
ספריות לקוח
Python
Java
Go
C++
עדכון צמתים או קשתות
כדי לעדכן צמתים או קשתות קיימים, משתמשים במסוףGoogle Cloud , ב-ה-CLI של gcloud או בספריות הלקוח של Spanner.
אפשר לעדכן צמתים או קשתות קיימים באמצעות שפת טיפול בנתונים (DML) ב-GoogleSQL או באמצעות שאילתות של Spanner Graph עם פקודת DML. אם משתמשים בספריית לקוח של Spanner, אפשר להשתמש גם ב-Mutation APIs.
עדכון צמתים או קשתות באמצעות DML
בדוגמאות הבאות נעשה שימוש ב-DML כדי לעדכן את הצומת Account ואת הקצה Transfer שהוספתם בהוספת צמתים או קצוות.
המסוף
במסוף Google Cloud , מריצים את פקודת ה-DML הבאה. מידע נוסף מופיע במאמר הרצת הצהרות במסוף Google Cloud .
-- Update Account node
UPDATE Account SET is_blocked = false WHERE id = 2;
-- Update Transfer edge
UPDATE AccountTransferAccount
SET amount = 300
WHERE id = 1 AND to_id = 2;
gcloud
- הרצת הצהרות באמצעות ה-CLI של gcloud.
- ב-CLI של gcloud, מריצים את הפקודות הבאות:
gcloud spanner databases execute-sql DATABASE-NAME --instance=INSTANCE-NAME \ --sql="UPDATE Account SET is_blocked = false WHERE id = 2"gcloud spanner databases execute-sql DATABASE-NAME --instance=INSTANCE-NAME \ --sql="UPDATE AccountTransferAccount SET amount = 300 WHERE id = 1 AND to_id = 2"
מחליפים את מה שכתוב בשדות הבאים:
- DATABASE_NAME: השם של מסד הנתונים.
- INSTANCE_NAME: השם של המכונה.
ספריות לקוח
Python
Java
Go
C++
עדכון צמתים או קשתות באמצעות שאילתות גרף ו-DML
בדוגמאות הבאות נעשה שימוש בשאילתות של Spanner Graph עם DML כדי לעדכן את הצומת Account ואת הקצה Transfer שהוספתם בקטע הוספת צמתים או קצוות.
המסוף
במסוף Google Cloud , מריצים את פקודת ה-DML הבאה. מידע נוסף מופיע במאמר הרצת הצהרות במסוף Google Cloud .
-- Use Graph pattern matching to identify Account nodes to update:
UPDATE Account SET is_blocked = false
WHERE id IN {
GRAPH FinGraph
MATCH (a:Account WHERE a.id = 1)-[:Transfers]->{1,2}(b:Account)
RETURN b.id
}
gcloud
מריצים את הפקודות הבאות ב-CLI של gcloud. למידע נוסף, אפשר לעיין במאמר הרצת הצהרות באמצעות ה-CLI של gcloud.
gcloud spanner databases execute-sql DATABASE-NAME --instance=INSTANCE_NAME \ --sql="UPDATE Account SET is_blocked = false"gcloud spanner databases execute-sql DATABASE-NAME --instance=INSTANCE-NAME \ --sql="UPDATE AccountTransferAccount SET amount = 300 WHERE id = 1 AND to_id = 2" --sql=" WHERE id IN { GRAPH FinGraph MATCH (a:Account WHERE a.id = 1)-[:Transfers]->{1,2}(b:Account) RETURN b.id }"
מחליפים את מה שכתוב בשדות הבאים:
- DATABASE_NAME: השם של מסד הנתונים.
- INSTANCE_NAME: השם של המכונה.
ספריות לקוח
Python
Java
Go
C++
מחיקת צמתים או קשתות
כדי למחוק צמתים או קשתות קיימים, משתמשים במסוף Google Cloud , ב-ה-CLI של gcloud או בספריות הלקוח של Spanner.
כדי למחוק נתונים במסוף Google Cloud וב-CLI של gcloud, משתמשים בשפת טיפול בנתונים (DML) של GoogleSQL. בספריית הלקוח של Spanner, אפשר להשתמש ב-DML או ב-Mutation APIs כדי למחוק צמתים או קשתות.
כדי למנוע שגיאות שקשורות להפרת שלמות ההפניות, חשוב לוודא שאף קצה לא מפנה לצומת כשמוחקים את הצומת. מידע נוסף זמין במאמרים Orphaned outgoing edge violates parent-child relationship ו-Orphaned incoming edge violates parent-child relationship.
בדוגמאות הבאות מוסרים קשת Transfer וצומת Account מהגרף.
המסוף
במסוף Google Cloud , מריצים את פקודת ה-DML הבאה. מידע נוסף מופיע במאמר הרצת הצהרות במסוף Google Cloud .
-- Delete Transfer edge
DELETE FROM AccountTransferAccount
WHERE id = 1 AND to_id = 2;
-- Delete Account node
DELETE FROM Account WHERE id = 2;
gcloud
מריצים את הפקודות הבאות ב-CLI של gcloud. למידע נוסף, אפשר לעיין במאמר הרצת הצהרות באמצעות ה-CLI של gcloud.
gcloud spanner databases execute-sql DATABASE-NAME --instance=INSTANCE-NAME \ --sql="DELETE FROM AccountTransferAccount WHERE id = 1 AND to_id = 2"gcloud spanner databases execute-sql DATABASE-NAME --instance=INSTANCE-NAME \ --sql="DELETE FROM Account WHERE id = 2"
מחליפים את מה שכתוב בשדות הבאים:
- DATABASE_NAME: השם של מסד הנתונים.
- INSTANCE_NAME: השם של המכונה.
ספריות לקוח
Python
Java
Go
C++
אפשר לשלב שאילתות של Spanner Graph עם פקודת DML, כמו בדוגמה הבאה:
-- Use Graph pattern matching to identify Account nodes to delete:
DELETE FROM AccountTransferAccount
WHERE id IN {
GRAPH FinGraph
MATCH (a:Account WHERE a.id = 1)-[:Transfers]->(b:Account)
RETURN b.id
}
פעולות אוטומטיות ופעולות על נתונים בכמות גדולה
בנוסף לשימוש ב-DML כדי להוסיף, לעדכן ולמחוק צמתים וקשתות בודדים, אפשר גם להשתמש בשיטות הבאות כדי לנהל את נתוני Spanner Graph:
אפשר להשתמש בפעולה ON DELETE CASCADE כדי להגדיר מחיקה אוטומטית של קצוות בגרף.
אפשר להפוך את המחיקה של צמתים וקשתות בתרשים לאוטומטית באמצעות מדיניות TTL. מידע נוסף זמין במאמר בנושא TTL on nodes and edges.
עדכון מספר פריטים בו-זמנית ומחיקה יעילים של צמתים וקשתות בגרף באמצעות partitioned DML.