במאמר הזה מוסבר איך לנהל נתונים בתרשים על ידי הוספה, עדכון ומחיקה של צמתים וקשתות. 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 (צומת מקור חסר מפר את הקשר INTERLEAVE IN) וMissing destination node violates foreign key constraint (צומת יעד חסר מפר את אילוץ המפתח הזר).
בדוגמאות הבאות מוסיפים צמתי Account וקשתות Transfer למסד הנתונים שיצרתם במאמר הגדרת Spanner Graph.
המסוף
מריצים את פקודת ה-DML הבאה במסוף Google Cloud . מידע נוסף מופיע במאמר הרצת הצהרות במסוף 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
המשך
C++
עדכון צמתים או קשתות
כדי לעדכן צמתים או קשתות קיימים, משתמשים במסוףGoogle Cloud , ב-ה-CLI של gcloud או בספריות הלקוח של Spanner.
אפשר לעדכן צמתים או קשתות קיימים באמצעות פקודת Data Manipulation Language (DML) ב-GoogleSQL או באמצעות שאילתות Spanner Graph עם פקודת DML. אם אתם משתמשים בספריית לקוח של Spanner, אתם יכולים להשתמש גם ב-Mutation APIs.
עדכון צמתים או קשתות באמצעות DML
בדוגמאות הבאות נעשה שימוש ב-DML כדי לעדכן את הצומת Account ואת הקצה Transfer שהוספתם בקטע הוספת צמתים או קצוות.
המסוף
מריצים את פקודת ה-DML הבאה במסוף Google Cloud . מידע נוסף מופיע במאמר הרצת הצהרות במסוף 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
המשך
C++
עדכון צמתים או קשתות באמצעות שאילתות גרף ו-DML
בדוגמאות הבאות נעשה שימוש בשאילתות Spanner Graph עם DML כדי לעדכן את הצומת Account ואת הקצה Transfer שהוספתם בהוספת צמתים או קצוות.
המסוף
מריצים את פקודת ה-DML הבאה במסוף Google Cloud . מידע נוסף מופיע במאמר הרצת הצהרות במסוף 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
המשך
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 מהגרף.
המסוף
מריצים את פקודת ה-DML הבאה במסוף Google Cloud . מידע נוסף מופיע במאמר הרצת הצהרות במסוף 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
המשך
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.
אפשר לעדכן מספר פריטים בו-זמנית ולמחוק ביעילות צמתים וקשתות בגרף באמצעות חלוקה למחיצות של DML.