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

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

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

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

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

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

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

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

מגבלות

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

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

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

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

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

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

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

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

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

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

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

  • ייצוא באותו אזור: מופע היעד של AlloyDB צריך להיות באותו אזור בדיוק Google Cloud שבו נמצא מערך הנתונים של BigQuery. לדוגמה, אפשר לייצא קבוצת נתונים ב-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 (אופציונלי): המספר המקסימלי של חיבורים מקבילים בו-זמנית מעובדי 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`;

תמחור

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

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