ייצוא נתונים ל-AlloyDB (תהליך ETL הפוך)

תהליך עבודה של חילוץ, טרנספורמציה וטעינה (ETL) הפוך מ-BigQuery ל-AlloyDB ל-PostgreSQL מאפשר להעביר נתונים מ-BigQuery למסד נתונים של AlloyDB. אתם יכולים להשתמש בהצהרה EXPORT DATA כדי לעבד או לסנן את הנתונים באמצעות שאילתה לפני הייצוא, או לסנכרן את הטבלה ב-BigQuery עם AlloyDB כדי להעתיק או לשקף את הטבלה המלאה.

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

התפקידים הנדרשים

כדי לקבל את ההרשאות שדרושות לייצוא נתוני BigQuery ל-AlloyDB, בקשו מהאדמין להקצות לכם את תפקידי ה-IAM הבאים בפרויקט:

  • ייצוא נתונים מטבלה ב-BigQuery: צפייה בנתוני BigQuery (roles/bigquery.dataViewer)
  • הפעלת משימת חילוץ: משתמש BigQuery (roles/bigquery.user)
  • שימוש בחיבור ל-BigQuery: BigQuery Connection User (roles/bigquery.connectionUser)
  • התחברות למכונה של AlloyDB: לקוח AlloyDB ‏ (roles/alloydb.client) – חשבון השירות של החיבור

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

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

מגבלות

  • אפשר לייצא מ-AlloyDB רק בייצוא באצווה. אי אפשר להשתמש בשאילתות מתמשכות כדי לייצא ל-AlloyDB.

  • הנתונים שמיוצאים ל-AlloyDB מתווספים רק כשורות חדשות. תהליך הייצוא לא משנה או מוחק רשומות קיימות ב-AlloyDB. אם בטבלת היעד לא מוגדרים אילוצים של PRIMARY KEY או UNIQUE, ייצוא של אותם נתונים כמה פעמים יגרום לרשומות כפולות.

  • כדי להבטיח את תקינות הנתונים, מומלץ להגדיר אילוצים מסוג PRIMARY KEY או UNIQUE בטבלאות AlloyDB. משימות ייצוא לא מבצעות פעולות upsert, שבהן רשומה קיימת מתעדכנת אם יש מפתח תואם ייחודי. אם שורה נכנסת כלשהי מפרה אילוץ של PRIMARY KEY או UNIQUE, משימת הייצוא כולה תיכשל.

  • לא מומלץ להריץ כמה משימות EXPORT DATA בו-זמנית לאותה טבלה ב-AlloyDB. פעולה כזו עלולה לגרום להתנהגות בלתי צפויה, כמו אובדן נתונים או כשלים במשימות. מומלץ לוודא שרק משימת ייצוא אחת כותבת לטבלה ספציפית בכל פעם.

  • אפשר לבצע אימות רק באמצעות שם משתמש וסיסמה דרך חיבור ל-BigQuery.

  • אין תמיכה בסוגי הנתונים ARRAY,‏ BYTES,‏ GEOGRAPHY,‏ INTERVAL ו-STRUCT ב-BigQuery.

  • אם בהצהרת SELECT ב-BigQuery חסרות עמודות שקיימות בטבלת היעד ב-AlloyDB, העמודות האלה צריכות לאפשר ערכי NULL או שצריכים להיות מוגדרים להן ערכי ברירת מחדל ב-AlloyDB. אם יש להם אילוץ NOT NULL ואין ערך ברירת מחדל, הייצוא ייכשל.

  • אפשר לייצא ל-AlloyDB רק במהדורות BigQuery Enterprise או Enterprise Plus. אין תמיכה במהדורת BigQuery Standard ובמחשוב על פי דרישה. מידע נוסף זמין במאמר תכונות ניהול.

  • משימה ב-BigQuery, כמו משימת חילוץ ל-AlloyDB, נמשכת עד 6 שעות. אם אתם מייצאים קבצים גדולים מאוד, מומלץ לפצל את הייצוא לכמה משימות קטנות יותר.

שיקולים בקשר למיקום

כדי לייצא נתונים ל-AlloyDB, יש דרישות ספציפיות לגבי המיקום של מערך הנתונים ב-BigQuery והמכונה של AlloyDB:

  • ייצוא לאותו אזור: מכונה היעד של AlloyDB צריכה להיות באותו אזור של מערך הנתונים ב-BigQuery. Google Cloud לדוגמה, אפשר לייצא קבוצת נתונים ב-us-east1 רק למכונה של AlloyDB ב-us-east1.

  • ייצוא למספר אזורים:

    • אפשר לייצא מערכי נתונים במספר אזורים ב-US רק למכונה של AlloyDB שנמצאת באזור us-central1.
    • אפשר לייצא מערכי נתונים במספר אזורים ב-EU רק למכונה של AlloyDB שנמצאת באזור europe-west4.

אי אפשר לייצא בין אזורים אחרים, חוץ מהשילובים שצוינו למעלה.

הגדרת ייצוא באמצעות alloydb_options

אתם יכולים להשתמש באפשרות alloydb_options כדי לציין את הסכימה, הטבלה ומספר החיבורים המקסימלי של AlloyDB. ההגדרה מבוטאת כמחרוזת JSON. רק הפרמטר table נדרש, כל שאר הפרמטרים הם אופציונליים.

כשמגדירים את הייצוא, לעמודות בהצהרה SELECT צריכים להיות כינויים שתואמים לשמות העמודות בטבלת היעד ב-AlloyDB.

EXPORT DATA
  WITH CONNECTION `PROJECT_ID.LOCATION.CONNECTION_ID`
  OPTIONS(
    format='ALLOYDB',
    uri="https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/clusters/CLUSTER_ID/instances/INSTANCE_ID",
    alloydb_options="""{
      "schema": "SCHEMA_NAME",
      "table": "TABLE_NAME",
      "max_parallel_connections": MAX_CONNECTIONS
    }"""
  )
AS SELECT * FROM `mydataset.table1`;

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

  • ‫PROJECT_ID: שם הפרויקט ב- Google Cloud .
  • ‫LOCATION: המיקום של החיבור ומכונת היעד.
  • ‫CONNECTION_ID: השם של החיבור ל-BigQuery.
  • ‫CLUSTER_ID: השם של אשכול AlloyDB.
  • ‫INSTANCE_ID: השם של מכונת היעד ב-AlloyDB.
  • ‫SCHEMA_NAME (אופציונלי): השם של סכימת היעד ב-AlloyDB. אם לא מציינים סכימה, המערכת משתמשת בסכימה שמוגדרת כברירת מחדל למשתמש במסד הנתונים.
  • ‫TABLE_NAME: השם של טבלת יעדים קיימת ב-AlloyDB, בלי הקידומת של הסכימה.
  • ‫MAX_CONNECTIONS (אופציונלי): המספר המקסימלי של חיבורים מקבילים בו-זמנית בין ה-workers של BigQuery למכונה של AlloyDB. הגבלת החיבורים יכולה למנוע עומס יתר על מכונת היעד במהלך ייצוא של נתונים רבים.

ייצוא נתונים

אתם יכולים להשתמש בהצהרה EXPORT DATA כדי לייצא נתונים מטבלה ב-BigQuery לטבלה ב-AlloyDB.

בדוגמה הבאה, שדות נבחרים מטבלה בשם mydataset.table1 מיוצאים לטבלה ב-AlloyDB בשם my_target_table:

EXPORT DATA
  WITH CONNECTION `myproject.us-central1.my-alloydb-conn`
  OPTIONS (
    format='ALLOYDB',
    uri="https://alloydb.googleapis.com/v1/projects/myproject/locations/us-central1/clusters/my-cluster/instances/my-instance",
    alloydb_options="""{
      "schema": "public",
      "table": "my_target_table"
    }"""
  )
AS SELECT
  col1 AS id,
  col2 AS name,
  col3 AS value
FROM
  `mydataset.table1`;

סנכרון טבלה לייצוא

כדי להעתיק טבלאות מלאות או לשכפל אותן באופן אוטומטי בלי צורך בטרנספורמציות מבוססות-SQL, אתם יכולים לסנכרן את הטבלה ב-BigQuery ישירות עם AlloyDB. ההצהרה EXPORT DATA מאפשרת להשתמש בשאילתת SELECT כדי לעבד נתונים, לתת להם כינוי או לסנן אותם לפני שהם מועברים, אבל אפשר להשתמש בסנכרון טבלאות כדי להעביר טבלה ב-BigQuery באופן ישיר.

אפשר לסנכרן טבלאות במצבים הבאים:

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

מידע נוסף זמין במאמר סנכרון נתוני BigQuery עם AlloyDB.

תמחור

כשמייצאים נתונים ל-AlloyDB באמצעות ההצהרה EXPORT DATA, החיוב מתבצע לפי תמחור המחשוב של קיבולת BigQuery.

אחרי ייצוא הנתונים, תחויבו על אחסון הנתונים ב-AlloyDB. למידע נוסף, קראו את המאמר תמחור של AlloyDB ל-PostgreSQL.