במסמך הזה מוסבר איך להעביר נתונים ב-Spanner Omni, לגבות אותם ולהעביר אותם באמצעות פורמטים של Avro ו-CSV. שימוש ב-Spanner Omni CLI כדי להעביר תוכן של מסד נתונים בין Spanner Omni לבין פתרונות אחסון כמו Cloud Storage, Amazon Simple Storage Service (Amazon S3), אחסון מקומי שתואם ל-S3 או מערכות קבצים מקומיות (NFS). תהליכי העבודה של ייבוא וייצוא נתונים ב-Spanner Omni לא תומכים במודלים, בקבוצות של אזורים או במיקומים.
פעולות הייבוא והייצוא מופעלות בשרתי Spanner Omni ומשתמשות במשאבי המערכת הזמינים. הייבוא הוא תהליך שדורש הרבה משאבים, ויכול לגרום לשימוש גבוה בזיכרון RAM, במעבד ובדיסק, מה שיכול להשפיע על עומסי עבודה פעילים. למרות שהמשימות האלה בדרך כלל פועלות בעדיפות נמוכה יותר מתנועה רגילה, כדאי לעקוב אחרי הפריסה כדי לזהות השפעות פוטנציאליות על הביצועים.
השוואה בין פורמטים של קבצים
בטבלה הבאה מוצגת השוואה בין היכולות של פורמטי הקבצים Avro ו-CSV לייבוא ולייצוא של נתונים ב-Spanner.
| יכולת | Avro | CSV |
|---|---|---|
| ייבוא או ייצוא של מסד נתונים שלם | כן | לא |
| ייבוא טבלאות שיוצאו בעבר | כן | כן |
| ייצוא בחותמת זמן קודמת | כן | כן |
| ייבוא או ייצוא באמצעות Spanner | כן | כן |
| ייבוא נתונים ממסדי נתונים אחרים | לא | כן |
בפורמטים Avro ו-CSV, כל הטבלאות במסד הנתונים מיוצאות. פורמט Avro מייצא גם את הסכימה, כך שאפשר לייבא אותה שוב. פורמט ה-CSV לא מייצא את הסכימה.
לפני שמתחילים
לפני שמתחילים פעולת ייבוא או ייצוא, צריך לוודא שיש לכם הרשאות ולתת גישה למיקום שבו מאוחסנים הנתונים.
הרשאות
לפני שמתחילים, חשוב לוודא שיש לכם את ההרשאות הבאות:
spanner.databases.importspanner.databases.export
למידע נוסף על ניהול זהויות והרשאות גישה (IAM) ב-Spanner Omni, אפשר לעיין בסקירה הכללית על IAM. במאמר עדכון משתמשים מוסבר איך מעדכנים את התפקידים של משתמשים.
מקור נתונים ויעד
אפשר לאחסן נתונים בקטגוריה של Amazon Simple Storage Service (Amazon S3), בקטגוריה של Cloud Storage, באחסון מקומי שתואם ל-Amazon S3 (כמו MinIO) או במערכת קבצים מקומית (NFS). אם אתם משתמשים במערכת קבצים מקומית, ודאו שהנתונים זמינים באותו נתיב בכל השרתים בפריסה.
יש שתי דרכים לספק גישה למאגר הנתונים:
הוספת אחסון חיצוני לפריסה: זו השיטה המועדפת אם אתם מתכננים לעשות שימוש חוזר בדלי.
יצירת פרטי כניסה חד-פעמיים: מוודאים שפרטי הכניסה האלה תקפים למשך זמן ארוך יותר ממשך פעולת הייבוא או הייצוא (לדוגמה, 48 שעות).
פרטי הכניסה צריכים לספק הרשאות לרישום ולקריאה של אובייקטים בקטגוריה לצורך ייבוא. כדי לייצא ל-Amazon S3, צריך את ההרשאות הנוספות הבאות ב-Amazon S3:
s3:PutObjects3:AbortMultipartUploads3:ListBucketMultipartUploads
מידע נוסף מופיע במאמר הרשאות IAM.
ייבוא קובצי Avro של Spanner
כדי לייבא נתונים שייצאתם בעבר ממסד נתונים אחר של Spanner (Spanner או Spanner Omni) בפורמט Avro, פועלים לפי השלבים הבאים.
דרישות מוקדמות לייבוא של Avro
לפני שמתחילים לייבא קובץ Avro, צריך לוודא שהסביבה עומדת בדרישות הבאות:
יצרתם את מסד הנתונים של היעד.
אובייקטי הסכימה שאתם מייבאים לא קיימים כבר במסד הנתונים. תהליך הייבוא של Avro יוצר את הטבלאות האלה לפני ייבוא הנתונים.
הוראות לייבוא של קובץ Avro
מזהים את הנתיב לתיקייה שמכילה את הנתונים המיוצאים. התיקייה מכילה את הפריטים הבאים:
קובץ
spanner-export.json.קובץ
ENTITY_NAME-manifest.jsonלכל ישות שמיוצאת (כמו טבלה, רצף או סכימה).כל קובצי ה-Avro שמופיעים בקובצי המניפסט.
אם כבר הוספתם את מאגר הנתונים כאחסון חיצוני, אתם לא צריכים לכלול את פרטי הכניסה בנתיב. אפשר לציין את הנתיב ישירות. אם אתם משתמשים בפרטי כניסה חד-פעמיים, אתם צריכים להשתמש בפורמטים הבאים של כתובות URL:
Cloud Storage:
gs://BUCKET_NAME/BASE_FOLDER[?accesskey=ACCESS_KEY&secret=SECRET_KEY]. שימוש בפרטי כניסה מסוג HMAC. מידע נוסף זמין במאמר בנושא מפתחות HMAC.Amazon S3:
s3://S3_BUCKET/BASE_FOLDER[?accesskey=ACCESS_KEY&secret=SECRET_KEY[&sessiontoken=SESSION_TOKEN]]תיקיית קבצים מקומית*:
file:///PATH_TO_DIR
כדי להתחיל את הייבוא, מריצים את הפקודה הבאה:
spanner databases import DATABASE_ID --url="URL" --format=avro [--avro-skip-wait-for-index-creation]
הערות נוספות
כשמייבאים קובצי Avro, חשוב לשים לב לנקודות הבאות:
הערה על ייבוא של עמודות שנוצרו ושל סנכרון שינויים בזרמי נתונים במסמכי Spanner.
הערה לגבי ייבוא רצפים בתיעוד של Spanner.
הערה על ייבוא של טבלאות משולבות ומפתחות זרים בתיעוד של Spanner.
כדי לדלג על ייבוא של ישויות ספציפיות, מסירים אותן מקובץ
spanner-export.json.יצירת אינדקס יכולה לקחת הרבה זמן במערכי נתונים גדולים. כדי לדלג על ההמתנה ליצירת האינדקס, משתמשים בדגל האופציונלי
--avro-skip-wait-for-index-creation.
כשתהליך הייבוא מתחיל בהצלחה, מוחזר מזהה של פעולה ממושכת. אפשר להשתמש במזהה הזה כדי לעקוב אחרי סטטוס הפעולה.
ייבוא קובצי CSV
כדי לייבא נתוני טקסט שייצאתם ממסד נתונים אחר, פועלים לפי השלבים הבאים.
דרישות מוקדמות לייבוא קובץ CSV
לפני שמתחילים לייבא קובץ CSV, חשוב לוודא את הדברים הבאים:
מוודאים שהטבלאות הן באחד מסוגי הנתונים הנתמכים הבאים:
BOOL,INT64,FLOAT64,NUMERIC,STRING,DATE,TIMESTAMP,BYTESו-JSON.יוצרים מסד נתונים ליעד.
יוצרים את כל הטבלאות שאליהן רוצים לייבא נתונים. תהליך הייבוא של קובץ CSV לא יוצר טבלאות.
מוודאים שקובץ ה-CSV לא מכיל שורת כותרת.
הוראות לייבוא קובץ CSV
כדי לייבא קובצי CSV, צריך ליצור קובץ מניפסט שמתאר את הנתונים לייבוא. קובץ המניפסט משתמש במבנה הבא, שמוגדר כאן בפורמט protobuf:
message ImportManifest {
// The per-table import manifest.
message TableManifest {
// Required. The name of the destination table.
string table_name = 1;
// Required. The CSV files to import. This value can be either a path or a glob pattern.
repeated string file_patterns = 2;
// The schema for a table column.
message Column {
// Required for each column that you specify. The name of the column in the
// destination table.
string column_name = 1;
// Required for each column that you specify. The type of the column.
string type_name = 2;
}
// Optional. The schema for the table columns.
repeated Column columns = 3;
}
// Required. The TableManifest of the tables to be imported.
repeated TableManifest tables = 1;
enum ProtoDialect {
GOOGLE_STANDARD_SQL = 0;
POSTGRESQL = 1;
}
// Optional. The dialect of the receiving database. Defaults to GOOGLE_STANDARD_SQL.
ProtoDialect dialect = 2;
}
דוגמה למניפסט:
{
"tables": [
{
"table_name": "Albums",
"file_patterns": [
"gs://bucket1/Albums_1.csv",
"gs://bucket1/Albums_2.csv"
]
},
{
"table_name": "Singers",
"file_patterns": [
"gs://bucket1/Singers*.csv"
],
"columns": [
{"column_name": "SingerId", "type_name": "INT64"},
{"column_name": "FirstName", "type_name": "STRING"},
{"column_name": "LastName", "type_name": "STRING"}
]
}
]
}
כתובת ה-URL בפקודת הייבוא הבאה צריכה להצביע על התיקייה שמכילה קובץ מניפסט בפורמט JSON, כפי שמתואר במניפסט לדוגמה. הקובץ יכול להיות ב-Cloud Storage, ב-Amazon S3 או בתיקיית קבצים מקומית, באמצעות אותו פורמט של כתובת URL לפרטי כניסה שמתואר בהוראות לייבוא של Avro. כדי להתחיל את הייבוא, מריצים את הפקודה הבאה:
spanner databases import DATABASE_ID --url="URL" --format=csv
אפשרויות ייבוא של קובץ CSV
אפשר להשתמש בדגלים הבאים כדי להתאים אישית את האופן שבו Spanner Omni מטפל בקובצי טקסט:
--csv-date-format: מחליף את הפורמט של עמודות התאריכים. ערך ברירת המחדל הוא%Y-%m-%d. דוגמה:%d/%m/%Y.
--csv-timestamp-format: מחליף את הפורמט של עמודות חותמות הזמן. משתמשים באפשרות הזו רק אם Spanner Omni לא תומך בפורמט בקובץ ה-CSV. דוגמה:%d/%m/%Y %H:%M:%S%Ez.
--csv-delimiter: מחליף את תו התוחם. ברירת המחדל היא פסיק.
--csv-quote-char: מחליף את תו המירכאות. ברירת המחדל היא מרכאות כפולות.
--csv-escape-char: מחליף את תו ה-escape. ברירת המחדל היא מרכאות כפולות.
--csv-null-string: מחליף את המחרוזת שמייצגת ערכים שלNULL. ערך ברירת המחדל הוא\N.
--csv-has-trailing-delimiters: מציין אם בקובצי ה-CSV יש תווי הפרדה בסוף השורה. ערך ברירת המחדל הואfalse.
ייצוא לקובצי Avro
כדי לייצא נתונים לקובצי Avro, פועלים לפי ההוראות לפורמט כתובת האתר שמפורטות בהוראות לייבוא של Avro.
כל שרת בפריסה יכול לכתוב נתונים במאגר הנתונים שצוין. אם אתם משתמשים בתיקיית קבצים מקומית כיעד, אתם צריכים לוודא שלכל השרתים יש גישה לאותו נתיב, ושהם יכולים לכתוב בו במקביל.
המערכת מייצאת את כל הטבלאות והישויות במסד הנתונים. חשוב לציין נתיב חדש לתיקייה ריקה בשביל הנתונים המיוצאים.
כדי להתחיל את הייצוא, מריצים את הפקודה הבאה:
spanner databases export DATABASE_ID --url="URL" --format=avro
ייצוא ל-CSV תומך רק בטבלאות ולא מייצא את סכימת מסד הנתונים.
ייצוא לקובצי CSV
ייצוא של קובצי CSV לא כולל את סכימת מסד הנתונים, אלא רק את טבלאות התמיכה. כדי לייצא נתונים לקובצי CSV, מריצים את הפקודה הבאה:
spanner databases export DATABASE_ID --url="URL" --format=csv
פתרון בעיות
אם הייבוא נכשל, עדכוני הסכימה והנתונים שיובאו לא יבוטלו באופן אוטומטי. לפני שמנסים שוב לבצע את הפעולה, צריך לנקות את מסד הנתונים באופן ידני.
מהירות פעולת הייבוא תלויה בכמה גורמים, כולל מספר הקבצים בתיקייה, משאבי המחשוב הזמינים בפריסה ומהירות הדיסק. אם יש מספיק משאבים זמינים, המערכת מייבאת קבצים במקביל.