ייבוא של קובץ CSV

כדי לטעון נתונים בטבלה לטבלה קיימת במסד נתונים, אתם יכולים לייבא קובץ CSV שמאוחסן בקטגוריה של Cloud Storage לאשכול של AlloyDB ל-PostgreSQL.

אתם יכולים לבטל את הייבוא של נתונים לאשכולות של AlloyDB. איך מבטלים פעולת ייבוא?

לפני שמתחילים

לפני שמתחילים פעולת ייבוא:

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

התפקידים וההרשאות שנדרשים כדי לייבא לאשכולות של AlloyDB

כדי לייבא נתונים מ-Cloud Storage ל-AlloyDB, המשתמש שמפעיל את הייבוא צריך להיות באחד מהתפקידים הבאים:

בנוסף, לחשבון השירות של אשכול AlloyDB צריך להיות אחד מהתפקידים הבאים:

  • תפקיד ה-IAM‏ storage.objectViewer
  • תפקיד בהתאמה אישית, כולל ההרשאות הבאות:
    • storage.objects.get

למידע נוסף על תפקידי IAM, קראו את המאמר ניהול זהויות והרשאות גישה.

ייבוא נתונים מקובץ CSV לאשכולות AlloyDB

  • מסד הנתונים והטבלה שאליהם אתם מייבאים צריכים להיות קיימים באשכול AlloyDB. למידע נוסף על יצירת מסד נתונים, תוכלו לקרוא את המאמר יצירת מסד נתונים.
  • בקובצי CSV, כל שורה צריכה להכיל שורת נתונים אחת, והשדות צריכים להיות מופרדים בפסיקים.
  • קובצי CSV לא יכולים להכיל שורת כותרת. אם בקובץ ה-CSV יש שורת כותרת, צריך להסיר אותה לפני הייבוא.

כדי לייבא נתונים לאשכול AlloyDB באמצעות קובץ CSV:

המסוף

  1. נכנסים לדף Clusters במסוף Google Cloud .

    כניסה לדף Clusters

  2. לוחצים על שם האשכול כדי לפתוח את דף הסקירה הכללית (Overview) שלו.

  3. לוחצים על Import.

  4. בקטע פורמט קובץ, בוחרים באפשרות CSV.

  5. בקטע Select source file, בוחרים אם להעלות קבצים מהמחשב או לבחור קובץ ממיקום ב-Cloud Storage.

    1. כדי להעלות קובץ מהמחשב:

      1. בוחרים באפשרות העלאת קבצים מהמחשב.
      2. לוחצים על עיון לצד בחירת קובץ מקומי כדי לבחור קובץ CSV מהמחשב המקומי.
      3. לוחצים על Browse לצד Select Cloud Storage location כדי לבחור מיקום ב-Cloud Storage שבו יאוחסן הקובץ המקומי שהועלה.
      4. לוחצים על העלאה כדי להעלות את הקובץ.
    2. כדי לבחור קובץ CSV שקיים בקטגוריה של Cloud Storage:

      1. לוחצים על בחירת קובץ מ-Google Cloud Storage.
      2. לוחצים על Browse לצד bucket-name/file-name כדי לבחור קובץ CSV מקטגוריה של Cloud Storage.
  6. בתפריט הנפתח מסד נתונים, בוחרים את מסד הנתונים שאליו רוצים לייבא את הנתונים.

  7. בתפריט הנפתח Table, בוחרים את הטבלה במסד הנתונים.

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

  9. כדי להתחיל את פעולת הייבוא, לוחצים על ייבוא.

gcloud

  1. יצירת קטגוריה של Cloud Storage
  2. מעלים את קובץ ה-CSV לקטגוריה. לקבלת עזרה בהעלאת קבצים לקטגוריות, ראו העלאת אובייקטים.
  3. משתמשים ב-gcloud storage buckets add-iam-policy-binding כדי להקצות את תפקיד ה-IAM storage.objectViewer לחשבון השירות של AlloyDB בקטגוריה:

     service-PROJECT_NUMBER@gcp-sa-alloydb.iam.gserviceaccount.com

    במאמר שימוש בהרשאות IAM מוסבר איך מגדירים הרשאות IAM.

  4. מייבאים את הקובץ:

    gcloud alloydb clusters import CLUSTER_NAME \
      --region=REGION \
      --gcs-uri=gs://BUCKET_NAME/FILE_NAME \
      --database=DATABASE_NAME \
      --user=USER \
      --csv \
      --table=TABLE_NAME

    מחליפים את מה שכתוב בשדות הבאים:

    • ‫CLUSTER_NAME: שם האשכול.
    • ‫REGION: האזור שבו פרוס אשכול AlloyDB.
    • ‫BUCKET_NAME: השם של הקטגוריה ב-Cloud Storage.
    • ‫FILE_NAME: השם של קובץ ה-CSV.
    • ‫DATABASE_NAME: שם של מסד נתונים בתוך האשכול.
    • ‫USER: המשתמש שמבצע את פעולת הייבוא.
    • ‫TABLE_NAME: הטבלה בתוך מסד הנתונים.

    למידע נוסף על השימוש בפקודה import, אפשר לעיין בדף העזרה של הפקודה gcloud alloydb clusters import.

  5. אם אתם לא צריכים לשמור את הרשאות ה-IAM שהגדרתם קודם, אתם יכולים להסיר אותן באמצעות gcloud storage buckets remove-iam-policy-binding.

REST v1

  1. יצירת קטגוריה של Cloud Storage
  2. מעלים את קובץ ה-CSV לקטגוריה. לקבלת עזרה בהעלאת קבצים לקטגוריות, ראו העלאת אובייקטים.
  3. משתמשים ב-gcloud storage buckets add-iam-policy-binding כדי להקצות את storage.objectViewer התפקיד ב-IAM לחשבון השירות של אשכול AlloyDB בקטגוריה. הפורמט של חשבון השירות הוא:

    service-PROJECT_NUMBER@gcp-sa-alloydb.iam.gserviceaccount.com

    במאמר שימוש בהרשאות IAM מוסבר איך מגדירים הרשאות IAM.

  4. מייבאים את הקובץ.

    משתמשים ב-method הבא ב-HTTP ובכתובת ה-URL:

    POST https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/clusters/CLUSTER_ID:import

    לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הערכים בשדות הבאים:

    • ‫PROJECT_ID: מזהה הפרויקט.
    • ‫LOCATION_ID: האזור שבו פרוס אשכול AlloyDB.
    • ‫CLUSTER_ID: מזהה האשכול.
    • ‫BUCKET_NAME: השם של הקטגוריה ב-Cloud Storage.
    • ‫PATH_TO_CSV_FILE: הנתיב לקובץ ה-CSV.
    • ‫USER: המשתמש שמבצע את פעולת הייבוא.
    • ‫DATABASE_NAME: השם של מסד נתונים באשכול AlloyDB.
    • ‫TABLE_NAME: הטבלה בתוך מסד הנתונים.
    • ‫COLUMNS (אופציונלי): העמודות שרוצים לייבא.
    • ‫ESCAPE_CHARACTER (אופציונלי): התו שצריך להופיע לפני תו נתונים שצריך להוסיף לו תו בריחה (escape). הערך של הארגומנט הזה חייב להיות תו בקוד ASCII הקסדצימלי. לדוגמה, 22 מייצג מירכאות כפולות.
    • ‫QUOTE_CHARACTER (אופציונלי): התו שתוחם ערכים מעמודות עם סוג נתונים של מחרוזת. הערך של הארגומנט הזה חייב להיות תו בקוד ASCII הקסדצימלי. לדוגמה, 22 מייצג מירכאות כפולות.
    • ‫FIELD_DELIMITER (אופציונלי): התו שמפצל את ערכי העמודות. הערך של הארגומנט הזה חייב להיות תו בקוד ASCII הקסדצימלי. לדוגמה, 2C מייצג פסיק.

    תוכן בקשת JSON:

    {
      "gcsUri": "gs://BUCKET_NAME/PATH_TO_CSV_FILE",
      "database": "DATABASE_NAME",
      "user": "USER",
      "csvImportOptions": {
        "table": "TABLE_NAME",
        "columns": ["COLUMN1", "COLUMN2"],
        "fieldDelimiter": "FIELD_DELIMITER",
        "quoteCharacter": "QUOTE_CHARACTER",
        "escapeCharacter": "ESCAPE_CHARACTER"
      }
    }
    

    כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:

    ‏Curl (Linux,‏ macOS או Cloud Shell)

    שומרים את גוף הבקשה בקובץ בשם request.json ומריצים את הפקודה הבאה:

       curl -X POST \
             -H "Authorization: Bearer $(gcloud auth print-access-token)" \
             -H "Content-Type: application/json; charset=utf-8" \
             -d @request.json \
             "https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/clusters/CLUSTER_ID:import"
    

    ‎PowerShell (Windows)

    שומרים את גוף הבקשה בקובץ בשם request.json ומריצים את הפקודה הבאה:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }
    
    Invoke-WebRequest `
      -Method POST `
      -Headers $headers `
      -ContentType: "application/json; charset=utf-8" `
      -InFile request.json `
      -Uri "https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/clusters/CLUSTER_ID:import"| Select-Object -Expand Content
    

    תגובת JSON אמורה להיראות כך:

    תשובה

    {
     "name": "projects/PROJECT_ID/locations/LOCATION_ID/operations/OPERATION_ID",
     "metadata": {
      "@type": "type.googleapis.com/google.cloud.alloydb.v1.OperationMetadata",
      "createTime": "2024-09-17T06:05:31.244428646Z",
      "target": "projects/PROJECT_ID/locations/LOCATION_ID/clusters/CLUSTER_ID",
      "verb": "import",
      "requestedCancellation": false,
      "apiVersion": "v1"
     },
     "done": false
    }
    
  5. אם אתם לא צריכים לשמור את הרשאות ה-IAM שהגדרתם קודם, הסירו אותן.

    הרשימה המלאה של הפרמטרים לבקשה מופיעה במאמר clusters.import.

התאמה אישית של פורמט ה-CSV וייבוא הקובץ

אתם יכולים להתאים אישית את הפורמט של קובץ ה-CSV ולייבא אותו אם הוא מכיל תווי בריחה (escape), מירכאות או מפרידי שדות שאינם ברירת המחדל. כדי לייבא קובץ CSV בפורמט שאינו ברירת המחדל, צריך לציין בבקשה את אותן אפשרויות עיצוב.

כדי להתאים אישית את הפורמט של קובץ ה-CSV, אתם יכולים להיעזר בדוגמאות הבאות ל-CLI של gcloud ול-API בארכיטקטורת REST.

gcloud

gcloud alloydb clusters import CLUSTER_NAME \
  --region=REGION \
  --database=DATABASE_NAME \
  --gcs-uri='gs://BUCKET_NAME/PATH_TO_CSV_FILE' \
  --user=USERNAME \
  --table=TABLE_NAME \
  --columns=COLUMNS \
  --field-delimiter='2C' \
  --quote-character='22' \
  --escape-character='5C' \
  --csv

REST v1

גוף הבקשה המקבילה ב-API בארכיטקטורת REST נראה בערך ככה:

{
 "gcsUri": "gs://BUCKET_NAME/PATH_TO_CSV_FILE",
 "database": "DATABASE_NAME",
 "user": "USER",
 "csvImportOptions": {
     "table": "TABLE_NAME",
     "columns": ["COLUMN1", "COLUMN2"],
     "escapeCharacter": "5C",
     "quoteCharacter": "22",
     "fieldDelimiter": "2C"
 }
}

כדי לראות איך בקשת ה-API הבסיסית בארכיטקטורת REST בנויה למשימה הזו, עיינו ב-APIs Explorer בדף clusters.import.

אם מופיעה שגיאה כמו INVALID_ARGUMENT, צריך לוודא שהטבלה קיימת. אם הטבלה קיימת, ודאו שיש לכם את ההרשאות הנכונות בקטגוריה. במאמר יצירה וניהול של רשימות של בקרת גישה מוסבר איך מגדירים בקרת גישה ב-Cloud Storage.

בדיקת הסטטוס של פעולת ייבוא

כדי לבדוק את הסטטוס של פעולת ייבוא:

gcloud

מריצים את הפקודה הבאה באמצעות gcloud alloydb operations describe:

gcloud alloydb operations describe OPERATION_ID --region=REGION

הסטטוס של הפעולות האלה נמצא בשדה STATUS.

אפשר גם להציג את הפרטים של פעולה ספציפית או לבטל פעולה ספציפית. מידע נוסף על הפקודה הזו זמין בדף העזרה של הפקודה gcloud alloydb operations.

REST v1

משתמשים ב-method‏ GET ובכתובת ה-URL הבאה:

GET https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/operations/OPERATION_ID

מידע נוסף זמין במאמר get.

לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הערכים בשדות הבאים:

  • ‫REGION: האזור שבו פרוס אשכול AlloyDB.
  • ‫PROJECT_ID: מזהה הפרויקט.
  • ‫OPERATION_ID: המזהה של פעולת הייבוא. מידע נוסף מופיע בקטע לפני שמתחילים.

כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:

‫curl‏ (Linux,‏ macOS או Cloud Shell)

מריצים את הפקודה הבאה:

  curl -X GET \
       -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/operations/OPERATION_ID
 

‎PowerShell (Windows)

מריצים את הפקודה הבאה:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
  -Method GET `
  -Headers $headers `
  -Uri "https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/operations/OPERATION_ID" | Select-Object -Expand Content

אם הפעולה בוצעה ללא שגיאות, גוף התגובה יכיל מופע של Operation.

המאמרים הבאים