ייבוא וייצוא של נתונים

במסמך הזה מוסבר איך להעביר נתונים ב-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.import
  • spanner.databases.export

למידע נוסף על ניהול זהויות והרשאות גישה (IAM) ב-Spanner Omni, אפשר לעיין בסקירה הכללית על IAM. במאמר עדכון משתמשים מוסבר איך מעדכנים את התפקידים של משתמשים.

מקור נתונים ויעד

אפשר לאחסן נתונים בקטגוריה של Amazon Simple Storage Service‏ (Amazon S3), בקטגוריה של Cloud Storage, באחסון מקומי שתואם ל-Amazon S3 (כמו MinIO) או במערכת קבצים מקומית (NFS). אם אתם משתמשים במערכת קבצים מקומית, ודאו שהנתונים זמינים באותו נתיב בכל השרתים בפריסה.

יש שתי דרכים לספק גישה למאגר הנתונים:

  • הוספת אחסון חיצוני לפריסה: זו השיטה המועדפת אם אתם מתכננים לעשות שימוש חוזר בדלי.

  • יצירת פרטי כניסה חד-פעמיים: מוודאים שפרטי הכניסה האלה תקפים למשך זמן ארוך יותר ממשך פעולת הייבוא או הייצוא (לדוגמה, 48 שעות).

פרטי הכניסה צריכים לספק הרשאות לרישום ולקריאה של אובייקטים בקטגוריה לצורך ייבוא. כדי לייצא ל-Amazon S3, צריך את ההרשאות הנוספות הבאות ב-Amazon S3:

  • s3:PutObject
  • s3:AbortMultipartUpload
  • s3: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, חשוב לשים לב לנקודות הבאות:

כשתהליך הייבוא מתחיל בהצלחה, מוחזר מזהה של פעולה ממושכת. אפשר להשתמש במזהה הזה כדי לעקוב אחרי סטטוס הפעולה.

ייבוא קובצי 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

פתרון בעיות

אם הייבוא נכשל, עדכוני הסכימה והנתונים שיובאו לא יבוטלו באופן אוטומטי. לפני שמנסים שוב לבצע את הפעולה, צריך לנקות את מסד הנתונים באופן ידני.

מהירות פעולת הייבוא תלויה בכמה גורמים, כולל מספר הקבצים בתיקייה, משאבי המחשוב הזמינים בפריסה ומהירות הדיסק. אם יש מספיק משאבים זמינים, המערכת מייבאת קבצים במקביל.