בדף הזה מוסבר איך לייבא מסדי נתונים של Spanner אל Spanner באמצעות מסוף Google Cloud . כדי לייבא קובצי Avro ממקור אחר, אפשר לעיין במאמר בנושא ייבוא נתונים ממסדי נתונים שאינם Spanner.
התהליך מתבצע באמצעות Dataflow. הוא מייבא נתונים מתיקייה של קטגוריה ב-Cloud Storage שמכילה קבוצה של קובצי Avro וקובצי מניפסט של JSON. תהליך הייבוא תומך רק בקובצי Avro שיוצאו מ-Spanner.
כדי לייבא מסד נתונים של Spanner באמצעות API בארכיטקטורת REST או gcloud CLI, צריך לבצע את השלבים שבקטע לפני שמתחילים בדף הזה, ואז לעיין בהוראות המפורטות במאמר ייבוא מ-Cloud Storage Avro ל-Spanner.
לפני שמתחילים
כדי לייבא מסד נתונים של Spanner, צריך קודם להפעיל את ממשקי ה-API של Spanner, Cloud Storage, Compute Engine ו-Dataflow:
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM
role (roles/serviceusage.serviceUsageAdmin), which
contains the serviceusage.services.enable permission. Learn how to grant
roles.
צריך גם מכסה מספקת והרשאות IAM נדרשות.
דרישות מכסה
דרישות המכסה לגבי עבודות ייבוא:
- Spanner: צריכה להיות לכם מספיק קיבולת מחשוב כדי לתמוך בכמות הנתונים שאתם מייבאים. לא נדרשת קיבולת חישוב נוספת כדי לייבא מסד נתונים, אבל יכול להיות שתצטרכו להוסיף קיבולת חישוב כדי שהעבודה תסתיים תוך זמן סביר. פרטים נוספים מופיעים במאמר בנושא אופטימיזציה של משימות.
- Cloud Storage: כדי לייבא, צריך קטגוריה שמכילה את הקבצים שיוצאו קודם. אין צורך להגדיר גודל לקטגוריה.
- Dataflow: מכסות Compute Engine של כתובות IP, שימוש בדיסק ומעבד (CPU) חלות על משימות ייבוא בדיוק כמו על משימות אחרות ב-Dataflow.
Compute Engine: לפני שמריצים את עבודת הייבוא, צריך להגדיר מכסות ראשוניות ל-Compute Engine, שמשמש את Dataflow. המכסות האלה מייצגות את המספר המקסימלי של משאבים שאתם מאפשרים ל-Dataflow להשתמש בהם עבור העבודה שלכם. ערכי התחלה מומלצים:
- CPUs: 200
- כתובות IP בשימוש: 200
- Standard persistent disk: 50 TB
בדרך כלל, לא צריך לבצע התאמות נוספות. Dataflow מספקת קנה מידה אוטומטי, כך שמשלמים רק על המשאבים בפועל שנעשה בהם שימוש במהלך הייבוא. אם העבודה יכולה להשתמש ביותר משאבים, בממשק המשתמש של Dataflow מוצג סמל אזהרה. העבודה אמורה להסתיים גם אם מופיע סמל אזהרה.
התפקידים הנדרשים
כדי לקבל את ההרשאות שדרושות לייצוא מסד נתונים, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים בחשבון השירות של העובד ב-Dataflow:
-
Cloud Spanner Viewer (
roles/spanner.viewer) -
Dataflow Worker (
roles/dataflow.worker) -
אדמין באחסון (
roles/storage.admin) -
Spanner Database Reader (
roles/spanner.databaseReader) -
אדמין מסד נתונים (
roles/spanner.databaseAdmin)
אופציונלי: חיפוש תיקיית מסד הנתונים ב-Cloud Storage
כדי למצוא את התיקייה שמכילה את מסד הנתונים המיוצא בGoogle Cloud מסוף, עוברים לדפדפן Cloud Storage ולוחצים על הקטגוריה שמכילה את התיקייה המיוצאת.
כניסה לדף Cloud Storage browser
שם התיקייה שמכילה את הנתונים המיוצאים מתחיל במזהה המופע, בשם מסד הנתונים ובחותמת הזמן של עבודת הייצוא. התיקייה מכילה:
- קובץ
spanner-export.json. - קובץ
TableName-manifest.jsonלכל טבלה במסד הנתונים שייצאתם. קובץ אחד או יותר
TableName.avro-#####-of-#####המספר הראשון בתוסף.avro-#####-of-#####מייצג את האינדקס של קובץ ה-Avro, החל מאפס, והמספר השני מייצג את מספר קובצי ה-Avro שנוצרו לכל טבלה.לדוגמה,
Songs.avro-00001-of-00002הוא השני מבין שני קבצים שמכילים את הנתונים של הטבלהSongs.קובץ
ChangeStreamName-manifest.jsonלכל מקור נתונים לשינויים במסד הנתונים שייצאתם.קובץ אחד לכל מקור נתונים של שינויים.
ChangeStreamName.avro-00000-of-00001הקובץ הזה מכיל נתונים ריקים עם סכמת Avro בלבד של זרם השינויים.
ייבוא מסד נתונים
כדי לייבא את מסד הנתונים של Spanner מ-Cloud Storage למופע שלכם, פועלים לפי השלבים הבאים.
עוברים לדף Instances (מופעים) ב-Spanner.
לוחצים על השם של המכונה שתכיל את מסד הנתונים המיובא.
לוחצים על ייבוא/ייצוא בחלונית הימנית ואז על לחצן ייבוא.
בקטע בחירת תיקיית מקור, לוחצים על עיון.
ברשימה הראשונית, מוצאים את הקטגוריה שמכילה את הייצוא או לוחצים על חיפוש
כדי לסנן את הרשימה ולמצוא את הקטגוריה. לוחצים לחיצה כפולה על הדלי כדי לראות את התיקיות שהוא מכיל.מאתרים את התיקייה עם הקבצים המיוצאים ולוחצים עליה כדי לבחור אותה.
לוחצים על בחירה.
מזינים שם למסד הנתונים החדש ש-Spanner יוצר במהלך תהליך הייבוא. השם של מסד הנתונים לא יכול להיות שם שכבר קיים במופע.
בוחרים את הניב של מסד הנתונים החדש (GoogleSQL או PostgreSQL).
(אופציונלי) כדי להגן על מסד הנתונים החדש באמצעות מפתח הצפנה בניהול הלקוח, לוחצים על Show encryption options (הצגת אפשרויות ההצפנה) ובוחרים באפשרות Use a customer-managed encryption key (CMEK) (שימוש במפתח הצפנה בניהול הלקוח). אחר כך בוחרים מפתח מהרשימה הנפתחת.
בוחרים אזור מהתפריט הנפתח בחירת אזור לעבודת הייבוא.
(אופציונלי) כדי להצפין את מצב צינור הנתונים של Dataflow באמצעות מפתח הצפנה בניהול הלקוח, לוחצים על הצגת אפשרויות ההצפנה ובוחרים באפשרות שימוש במפתח הצפנה בניהול הלקוח (CMEK). אחר כך בוחרים מקש מהרשימה הנפתחת.
מסמנים את התיבה בקטע אישור חיובים כדי לאשר שיש חיובים בנוסף לאלה שנובעים ממופע Spanner הקיים.
לוחצים על Import.
במסוף Google Cloud מוצג הדף פרטי מסד הנתונים, שבו מופיעה עכשיו תיבה עם תיאור של משימת הייבוא, כולל הזמן שחלף מאז תחילת המשימה:

כשהפעולה מסתיימת או מופסקת, במסוף Google Cloud מוצגת הודעה בדף פרטי מסד הנתונים. אם העבודה מסתיימת בהצלחה, מוצגת הודעה על כך:

אם העבודה לא תצליח, תוצג הודעת שגיאה:

אם העבודה נכשלת, כדאי לבדוק את היומנים של Dataflow כדי לראות פרטים על השגיאה, ולעיין במאמר פתרון בעיות שקשורות לעבודות ייבוא שנכשלו.
הערה לגבי ייבוא של עמודות שנוצרו ושל סנכרון שינויים בזרמי נתונים
מערכת Spanner משתמשת בהגדרה של כל עמודה שנוצרה בסכימת Avro כדי ליצור מחדש את העמודה הזו. Spanner מחשב את הערכים של העמודות שנוצרו באופן אוטומטי במהלך הייבוא.
באופן דומה, מערכת Spanner משתמשת בהגדרה של כל change stream בסכימת Avro כדי ליצור אותה מחדש במהלך הייבוא. נתוני שינוי לא מיוצאים ולא מיובאים דרך Avro, ולכן לכל סנכרון שינויים בזרמי נתונים שמשויכים למסד נתונים שזה עתה יובא לא יהיו רשומות של נתוני שינוי.
הערה לגבי ייבוא רצפים
כל רצף (GoogleSQL, PostgreSQL) שמערכת Spanner מייצאת משתמש בפונקציה GET_INTERNAL_SEQUENCE_STATE() (GoogleSQL, PostgreSQL) כדי לתעד את המצב הנוכחי שלו.
מערכת Spanner מוסיפה 1, 000 למונה וכותבת את הערך החדש של המונה למאפיינים של שדה הרשומה. חשוב לשים לב שזו רק דרך מומלצת למנוע שגיאות של ערכים כפולים שעשויות לקרות אחרי הייבוא.
אם מתבצעים עוד כתיבות למסד הנתונים של המקור במהלך ייצוא הנתונים, צריך לשנות את מונה הרצף בפועל.
בייבוא, הרצף מתחיל מהמונה החדש הזה במקום מהמונה שנמצא בסכימה. במקרה הצורך, אפשר להשתמש בהצהרת ALTER SEQUENCE (GoogleSQL, PostgreSQL) כדי לעדכן למונה חדש.
הערה לגבי ייבוא של טבלאות משולבות ומפתחות זרים
העבודה ב-Dataflow יכולה לייבא טבלאות משולבות, וכך לשמור על קשרי הורה-צאצא מקובץ המקור. עם זאת, אילוצי מפתח זר לא נאכפים במהלך טעינת הנתונים. העבודה של Dataflow יוצרת את כל המפתחות החיצוניים הדרושים אחרי שהעלאת הנתונים מסתיימת.
אם יש אילוצי מפתח זר במסד הנתונים של Spanner לפני שהייבוא מתחיל, יכול להיות שתיתקלו בשגיאות כתיבה בגלל הפרות של שלמות רפרנציאלית. כדי להימנע משגיאות כתיבה, מומלץ להסיר את כל המפתחות החיצוניים הקיימים לפני שמתחילים את תהליך הייבוא.
בחירת אזור למשימת הייבוא
יכול להיות שתרצו לבחור אזור אחר בהתאם למיקום של קטגוריית Cloud Storage. כדי להימנע מחיובים על העברת נתונים יוצאים, בוחרים אזור שמתאים למיקום של קטגוריית Cloud Storage.
אם המיקום של קטגוריה של Cloud Storage הוא אזור, תוכלו ליהנות משימוש חינמי ברשת אם תבחרו את אותו אזור למשימת הייבוא, בהנחה שהאזור הזה זמין.
אם המיקום של הקטגוריה של Cloud Storage הוא בשני אזורים, אתם יכולים ליהנות משימוש חינמי ברשת על ידי בחירת אחד משני האזורים שמרכיבים את שני האזורים עבור עבודת הייבוא, בהנחה שאחד מהאזורים זמין.
- אם אזור שממוקם באותו מקום לא זמין לעבודת הייבוא, או אם המיקום של קטגוריה של Cloud Storage הוא במספר אזורים, יחולו חיובים על העברת נתונים יוצאת. כדי לבחור אזור שבו עלויות העברת הנתונים הן הכי נמוכות, אפשר לעיין בתמחור של העברת נתונים ב-Cloud Storage.
הצגה או פתרון בעיות של משימות בממשק המשתמש של Dataflow
אחרי שמתחילים משימת ייבוא, אפשר לראות את פרטי המשימה, כולל יומנים, בקטע Dataflow במסוף Google Cloud .
צפייה בפרטי המשימה ב-Dataflow
כדי לראות פרטים של משימות ייבוא או ייצוא שהפעלתם בשבוע האחרון, כולל משימות שפועלות כרגע:
- עוברים לדף סקירה כללית של מסד הנתונים של מסד הנתונים.
- לוחצים על ייבוא/ייצוא בתפריט שבחלונית הימנית. בדף ייבוא/ייצוא של מסד הנתונים מוצגת רשימה של משימות אחרונות.
בדף ייבוא/ייצוא של מסד הנתונים, לוחצים על שם המשימה בעמודה שם משימת Dataflow:

הפרטים של משימת Dataflow מוצגים במסוף Google Cloud .
כדי לראות עבודה שהרצתם לפני יותר משבוע:
נכנסים לדף Dataflow jobs במסוף Google Cloud .
מחפשים את המשרה ברשימה ולוחצים על השם שלה.
הפרטים של משימת Dataflow מוצגים במסוף Google Cloud .
הצגת יומנים של Dataflow עבור העבודה שלכם
כדי לראות את היומנים של משימת Dataflow, עוברים לדף הפרטים של המשימה ולוחצים על Logs (יומנים) משמאל לשם המשימה.
אם משימה נכשלת, צריך לחפש שגיאות ביומנים. אם יש שגיאות, מספר השגיאות מוצג ליד יומנים:

כדי לראות שגיאות בעבודות:
לוחצים על מספר השגיאות לצד יומנים.
Google Cloud היומנים של העבודה מוצגים במסוף. יכול להיות שתצטרכו לגלול כדי לראות את השגיאות.
מאתרים את הרשומות עם סמל השגיאה
.לוחצים על רשומה ספציפית ביומן כדי להרחיב את התוכן שלה.
מידע נוסף על פתרון בעיות בעבודות Dataflow זמין במאמר פתרון בעיות בצינורות.
פתרון בעיות שקשורות למשימות ייבוא שנכשלו
אם השגיאות הבאות מופיעות ביומני העבודות:
com.google.cloud.spanner.SpannerException: NOT_FOUND: Session not found --or-- com.google.cloud.spanner.SpannerException: DEADLINE_EXCEEDED: Deadline expired before operation could complete.
בודקים את השהיית הכתיבה ב-99% בכרטיסייה Monitoring של מסד הנתונים של Spanner במסוףGoogle Cloud . אם הערכים גבוהים (כמה שניות), זה מצביע על כך שהמופע עמוס מדי, ולכן פעולות הכתיבה נכשלות בגלל זמן קצוב לתפוגה.
אחת הסיבות לזמן האחזור הגבוה היא שהמשימה של Dataflow פועלת עם יותר מדי עובדים, מה שיוצר עומס רב מדי על מופע Spanner.
כדי להגדיר מגבלה על מספר העובדים של Dataflow, במקום להשתמש בכרטיסייה Import/Export בדף פרטי המופע של מסד הנתונים של Spanner במסוף Google Cloud , צריך להתחיל את הייבוא באמצעות התבנית Cloud Storage Avro to Spanner של Dataflow ולהגדיר את המספר המקסימלי של העובדים כמו שמתואר:המסוף
אם משתמשים במסוף Dataflow, הפרמטר Max workers נמצא בקטע Optional parameters בדף Create job from template.
gcloud
מריצים את הפקודה gcloud dataflow jobs run ומציינים את הארגומנט max-workers. לדוגמה:
gcloud dataflow jobs run my-import-job \
--gcs-location='gs://dataflow-templates/latest/GCS_Avro_to_Cloud_Spanner' \
--region=us-central1 \
--parameters='instanceId=test-instance,databaseId=example-db,inputDir=gs://my-gcs-bucket' \
--max-workers=10 \
--network=network-123
פתרון בעיות שגיאה ברשת
יכול להיות שתקבלו את השגיאה הבאה כשאתם מייצאים מסדי נתונים של Spanner:
Workflow failed. Causes: Error: Message: Invalid value for field 'resource.properties.networkInterfaces[0].subnetwork': ''. Network interface must specify a subnet if the network resource is in custom subnet mode. HTTP Code: 400
השגיאה הזו מתרחשת כי מערכת Spanner מניחה שאתם מתכוונים להשתמש ברשת VPC במצב אוטומטי בשם default באותו פרויקט כמו משימת Dataflow. אם אין לכם רשת VPC שמוגדרת כברירת מחדל בפרויקט, או אם רשת ה-VPC שלכם היא רשת VPC במצב מותאם אישית, אתם צריכים ליצור משימת Dataflow ולציין רשת או תת-רשת חלופית.
אופטימיזציה של עבודות ייבוא שפועלות לאט
אם פעלתם לפי ההצעות שבהגדרות הראשוניות, בדרך כלל לא תצטרכו לבצע התאמות נוספות. אם העבודה שלכם פועלת לאט, יש עוד כמה אופטימיזציות שאפשר לנסות:
אופטימיזציה של המשימה ומיקום הנתונים: מריצים את משימת Dataflow באותו אזור שבו נמצאים מופע Spanner וקטגוריית Cloud Storage.
מוודאים שיש מספיק משאבים ב-Dataflow: אם המיכסות הרלוונטיות של Compute Engine מגבילות את המשאבים של משימת Dataflow, סמל אזהרה
והודעות יומן יוצגו בדף Dataflow של המשימה במסוף Google Cloud :
במצב כזה, הגדלת המכסות של מעבדי CPU, כתובות IP בשימוש ודיסק מתמיד סטנדרטי עשויה לקצר את זמן הריצה של העבודה, אבל יכול להיות שתחויבו ביותר חיובים ב-Compute Engine.
בודקים את ניצול המעבד ב-Spanner: אם ניצול המעבד של המכונה הוא מעל 65%, אפשר להגדיל את קיבולת החישוב במכונה הזו. הקיבולת מוסיפה עוד משאבי Spanner והעבודה אמורה להתבצע מהר יותר, אבל תצטרכו לשלם יותר על Spanner.
גורמים שמשפיעים על הביצועים של עבודת הייבוא
יש כמה גורמים שמשפיעים על משך הזמן שנדרש להשלמת עבודת ייבוא.
גודל מסד הנתונים ב-Spanner: עיבוד של יותר נתונים דורש יותר זמן ומשאבים.
סכימת מסד הנתונים של Spanner, כולל:
- מספר הטבלאות
- גודל השורות
- מספר האינדקסים המשניים
- מספר המפתחות הזרים
- מספר סנכרון שינויים בזרמי נתונים
שימו לב: יצירת האינדקס והמפתח הזר ממשיכה אחרי השלמת עבודת הייבוא של Dataflow. סנכרון שינויים בזרמי נתונים נוצרים לפני שמשימת הייבוא מסתיימת, אבל אחרי שכל הנתונים מיובאים.
מיקום הנתונים: הנתונים מועברים בין Spanner לבין Cloud Storage באמצעות Dataflow. מומלץ שכל שלושת הרכיבים יהיו באותו אזור. אם הרכיבים לא נמצאים באותו אזור, העברת הנתונים בין אזורים מאטה את העבודה.
מספר העובדים (workers) של Dataflow: כדי להשיג ביצועים טובים, צריך מספר אופטימלי של עובדים ב-Dataflow. באמצעות שינוי גודל אוטומטי, מערכת Dataflow בוחרת את מספר העובדים עבור העבודה בהתאם לכמות העבודה שצריך לבצע. עם זאת, מספר העובדים יהיה מוגבל על ידי המכסות של מעבדי CPU, כתובות IP בשימוש ודיסק מתמיד סטנדרטי. אם המערכת נתקלת במגבלות מכסה, מוצג בממשק המשתמש של Dataflow סמל אזהרה. במצב כזה, ההתקדמות איטית יותר, אבל העבודה אמורה להסתיים. התאמה אוטומטית לעומס עלולה לגרום לעומס יתר ב-Spanner, ולשגיאות אם יש כמות גדולה של נתונים לייבא.
עומס קיים ב-Spanner: משימת ייבוא מוסיפה עומס משמעותי על המעבד של מופע Spanner. אם כבר יש עומס משמעותי על המופע, המשימה תפעל לאט יותר.
כמות קיבולת המחשוב של Spanner: אם ניצול ה-CPU של המופע גבוה מ-65%, העבודה תתבצע לאט יותר.
התאמת העובדים לביצועים טובים של ייבוא
כשמתחילים משימת ייבוא של Spanner, צריך להגדיר את העובדים של Dataflow לערך אופטימלי כדי להשיג ביצועים טובים. יותר מדי עובדים גורמים לעומס יתר ב-Spanner, ומעט מדי עובדים גורמים לביצועי ייבוא לא מרשימים.
המספר המקסימלי של העובדים תלוי מאוד בגודל הנתונים, אבל באופן אידיאלי, ניצול המעבד הכולל של Spanner צריך להיות בין 70% ל-90%. כך מתקבל איזון טוב בין יעילות של Spanner לבין השלמת עבודות ללא שגיאות.
כדי להשיג את יעד הניצול הזה ברוב הסכימות והתרחישים, מומלץ להגדיר מספר מקסימלי של מעבדי vCPU של העובדים בין פי 4 ל-6 ממספר הצמתים של Spanner.
לדוגמה, אם יש לכם מופע Spanner עם 10 צמתים, ואתם משתמשים בעובדים מסוג n1-standard-2, אתם יכולים להגדיר את מספר העובדים המקסימלי ל-25, וכך לקבל 50 מעבדים וירטואליים.