כדי לחלץ נתונים מטבלאות או משאילתות לשימוש בכלים ובסביבות חיצוניים, אתם יכולים לייצא נתונים מאשכולות של AlloyDB ל-PostgreSQL לקטגוריה של Cloud Storage בפורמט CSV.
כדי להעביר מסד נתונים שלם משרת מסד נתונים נתמך למכונה חדשה של AlloyDB, קראו את המאמר העברת מסד נתונים ל-AlloyDB באמצעות Database Migration Service. אם אתם מייצאים כדי ליצור מכונה חדשה מהקובץ שיוצא, כדאי לשחזר אשכול מגיבוי שמור.
אתם יכולים לבטל את הייצוא של נתונים מאשכולות של AlloyDB ל-PostgreSQL. איך מבטלים פעולת ייצוא?
לפני שמתחילים
- לפני שמתחילים פעולת ייצוא, חשוב לזכור שפעולות ייצוא משתמשות במשאבי מסד הנתונים, אבל הן לא מפריעות לפעולות הרגילות של מסד הנתונים, אלא אם המכונה לא הוקצתה כראוי.
- השדה
SELECT_QUERYיכול להכיל הערות או רווחים לבנים בתחילת הטקסט או בסופו. לפני הרצת שאילתת הייצוא, המערכת מתעלמת מהערות ומסירה רווחים. - חיובים על העברת נתונים בין אזורים חלים כשקטגוריית היעד נמצאת באזור שונה מאשכול המקור. מידע נוסף זמין במאמר תמחור של AlloyDB ל-PostgreSQL.
- אפשר להריץ כמה פעולות ייצוא במקביל.
- הדחיסה מופעלת אם שם האובייקט מסתיים בסיומת
.gz. לאחר מכן, האובייקט מיוצא בפורמט.gzל-Cloud Storage. - מותר להשתמש רק בתווי ASCII בקוד הקסדצימלי (עם או בלי הקידומת
0x) לערכי תווים באפשרויות CSV כמוfield_delimiter,quote_characterו-escape_character.
התפקידים וההרשאות שנדרשים כדי לייצא מ-AlloyDB
כדי לייצא נתונים מ-AlloyDB ל-Cloud Storage, המשתמש שמפעיל את הייצוא צריך להיות עם אחד מהתפקידים הבאים בניהול זהויות והרשאות גישה (IAM):
- התפקיד אדמין ב-AlloyDB (
roles/alloydb.admin) - תפקיד בהתאמה אישית, כולל ההרשאות הבאות:
alloydb.clusters.getalloydb.clusters.export
בנוסף, לחשבון השירות של אשכול AlloyDB צריך להיות אחד מהתפקידים הבאים:
- תפקיד ה-IAM
storage.objectAdmin - תפקיד בהתאמה אישית, כולל ההרשאות הבאות:
storage.objects.create
למידע נוסף על תפקידי IAM, קראו את המאמר ניהול זהויות והרשאות גישה.
ייצוא נתונים לקובץ CSV
במהלך ייצוא של קובץ CSV, אתם יכולים לציין את הסכימות שאתם רוצים לייצא. אפשר לייצא את כל הסכימות ברמת מסד הנתונים.
אפשר להשתמש ב-CLI של gcloud או ב-API בארכיטקטורת REST כדי להתאים אישית את פורמט קובץ ה-CSV.
gcloud
- יצירת קטגוריה של Cloud Storage
משתמשים ב-
gcloud storage buckets add-iam-policy-bindingכדי להקצות את התפקיד ב-IAM (storage.objectAdmin) לחשבון השירות של AlloyDB בקטגוריה. הפורמט של חשבון השירות הוא:service-PROJECT_NUMBER@gcp-sa-alloydb.במאמר שימוש בהרשאות IAM מוסבר איך מגדירים הרשאות IAM.
מייצאים את מסד הנתונים לקטגוריה של Cloud Storage.
מריצים את הפקודה לייצוא קובץ CSV:
gcloud alloydb clusters export.ברשימה הבאה מתוארות האפשרויות לייצוא נתונים בפורמט CSV:
--select-query(חובה): שאילתת הבחירה שמשמשת לחילוץ הנתונים.
-
--async(אופציונלי): חזרה מיידית, בלי להמתין שהפעולה תסתיים. -
--field-delimiter(אופציונלי): התו שמפריד בין העמודות בכל שורה בקובץ. ברירת המחדל היא פסיק. הערך של הארגומנט הזה חייב להיות תו בקוד ASCII הקסדצימלי. --quote-character(אופציונלי): מציין את תו המירכאות שבו צריך להשתמש כשערך נתונים מוקף במירכאות. ברירת המחדל היא מירכאות כפולות. הערך של הארגומנט הזה חייב להיות תו בקוד ASCII הקסדצימלי.-
--escape-character(אופציונלי): מציין את התו שצריך להופיע לפני תו נתונים שצריך להוסיף לו תו בריחה. ערך ברירת המחדל זהה לערך של--quote-character. הערך של הארגומנט הזה חייב להיות תו בקוד ASCII הקסדצימלי.
כדי להשתמש בתכונות האלה, צריך לכלול את האפשרויות האלה בפקודה של ה-CLI של gcloud.
אם לא, צריך להסיר את הפרמטרים האלה מהפקודה הבאה:
gcloud alloydb clusters export CLUSTER_NAME \ --region=REGION \ --database=DATABASE_NAME \ --gcs-uri="gs://BUCKET_NAME/OBJECT_NAME" \ --select-query=SELECT_QUERY \ --field-delimiter=FIELD_DELIMITER \ --quote-character=QUOTE_CHARACTER \ --escape-character=ESCAPE_CHARACTER \ --csvאם אתם לא צריכים לשמור את תפקיד ה-IAM שהגדרתם קודם, אתם יכולים לבטל אותו.
REST v1
יוצרים קטגוריה לייצוא:
gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAMEמשתמשים ב-
gcloud storage buckets add-iam-policy-bindingכדי להקצות את תפקיד ה-IAMstorage.objectAdminלחשבון השירות של AlloyDB בקטגוריה. הפורמט של חשבון השירות הוא:service-PROJECT_NUMBER@gcp-sa-alloydb.במאמר שימוש בהרשאות IAM מוסבר איך מגדירים הרשאות IAM.
מייצאים את מסד הנתונים.
משתמשים ב-method הבא ב-HTTP ובכתובת ה-URL:
POST https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/clusters/CLUSTER_ID:exportלפני שמשתמשים בנתוני הבקשה, צריך להחליף את הערכים בשדות הבאים:
- PROJECT_ID: מזהה הפרויקט.
- REGION: האזור שבו פרוס אשכול AlloyDB.
- CLUSTER_ID: מזהה האשכול.
- BUCKET_NAME: השם של הקטגוריה ב-Cloud Storage.
- PATH_TO_CSV_FILE: הנתיב לקובץ ה-CSV.
- DATABASE_NAME: השם של מסד נתונים באשכול AlloyDB.
SELECT_QUERY: שאילתת ה-SQL לייצוא.
ESCAPE_CHARACTER (אופציונלי): התו שצריך להופיע לפני תו נתונים שצריך להוסיף לו תו בריחה (escape). הערך של הארגומנט הזה חייב להיות תו בקוד ASCII הקסדצימלי. לדוגמה,
22מייצג מירכאות כפולות.QUOTE_CHARACTER (אופציונלי): התו שתוחם ערכים מעמודות עם סוג נתונים של מחרוזת. הערך של הארגומנט הזה חייב להיות תו בקוד ASCII הקסדצימלי. לדוגמה,
22מייצג מירכאות כפולות.FIELD_DELIMITER (אופציונלי): התו שמפצל את ערכי העמודות. הערך של הארגומנט הזה חייב להיות תו בקוד ASCII הקסדצימלי. לדוגמה,
2Cמייצג פסיק.
תוכן בקשת JSON:
{ "gcs_destination": { "uri": "gs://BUCKET_NAME/PATH_TO_CSV_FILE" }, "database": "DATABASE_NAME", "csv_export_options": { "select_query": "SELECT_QUERY", "escape_character": "ESCAPE_CHARACTER", "quote_character": "QUOTE_CHARACTER", "field_delimiter": "FIELD_DELIMITER" } }כדי לשלוח את הבקשה, אתם יכולים לבחור אחת מהאפשרויות הבאות:
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/REGION/clusters/CLUSTER_ID:export"
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/REGION/clusters/CLUSTER_ID:export"| Select-Object -Expand Content
תגובת JSON אמורה להיראות כך:
תשובה
{
"name": "projects/PROJECT_ID/locations/REGION/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/REGION/clusters/TARGET_CLUSTER",
"verb": "export",
"requestedCancellation": false,
"apiVersion": "v1"
},
"done": false
}
אם אתם לא צריכים לשמור את הרשאות ה-IAM שהגדרתם קודם, הסירו אותן.
הרשימה המלאה של הפרמטרים לבקשה מופיעה במאמר clusters.export.
התאמה אישית של הפורמט של קובץ CSV לייצוא
אפשר להשתמש ב-CLI של gcloud או ב-API בארכיטקטורת REST כדי להתאים אישית את פורמט קובץ ה-CSV. כשמייצאים, אפשר לציין את אפשרויות העיצוב הבאות:
| אפשרות CSV | ערך ברירת המחדל | דגל gcloud | נכס API בארכיטקטורת REST | תיאור |
|---|---|---|---|---|
| Escape | ברירת המחדל זהה לערך של QUOTE. |
--escape-character |
escape_character |
תו שמופיע לפני תו נתונים שצריך להוסיף לו תו בריחה (escape). |
| ציטוט | "22"קוד הקסדצימלי ב-ASCII למירכאות כפולות. |
--quote-character |
quote_character |
מציין את תו המירכאות שבו צריך להשתמש כשערך נתונים מוקף במירכאות. |
| תו מפריד בין שדות | "2C"קוד הקסדצימלי של ASCII לפסיק. |
--field-delimiter |
field_delimiter |
התו שמפריד בין ערכי העמודות. |
כדי להתאים אישית את הפורמט של קובץ ה-CSV לייצוא, אפשר להשתמש בדוגמאות הבאות ל-CLI של gcloud ול-API בארכיטקטורת REST:
gcloud
gcloud alloydb clusters export CLUSTER_NAME \
--region=REGION \
--database=DATABASE_NAME \
--gcs-uri='gs://BUCKET_NAME/PATH_TO_CSV_FILE' \
--select-query=SELECT_QUERY \
--field-delimiter='2C' \
--quote-character='22' \
--escape-character='5C' \
--csvREST v1
גוף הבקשה המקבילה ב-API בארכיטקטורת REST נראה בערך ככה:
{
"gcs_destination": {
"uri": "gs://BUCKET_NAME/PATH_TO_CSV_FILE"
},
"database": "DATABASE_NAME",
"csv_export_options": {
"select_query": "SELECT_QUERY",
"escape_character": "5C",
"quote_character": "22",
"field_delimiter": "2C"
}
}
כברירת מחדל, הייצוא ל-CSV יוצר פלט CSV רגיל. אם אתם צריכים אפשרויות נוספות מעבר לאלה ש-AlloyDB מספק, אתם יכולים להשתמש בהצהרה הבאה בלקוח psql:
\copy TABLE_NAME TO 'CSV_FILE_NAME.csv' WITH
(FORMAT csv, ESCAPE 'ESCAPE_CHARACTER', QUOTE 'QUOTE_CHARACTER',
DELIMITER 'DELIMITER_CHARACTER', ENCODING 'UTF8', NULL 'NULL_MARKER_STRING');