סנכרון נתונים מ-BigQuery ל-AlloyDB

בדף הזה מוסבר איך לסנכרן טבלאות מ-BigQuery עם מכונת AlloyDB ל-PostgreSQL.

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

יש כמה דרכים להעביר נתונים מ-BigQuery למופע שלכם ב-AlloyDB:

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

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

שיקולים לגבי ביצועים ותפעול

כשמשתמשים בטבלאות סנכרון של BigQuery, חשוב לשים לב לנקודות הבאות:

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

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

  1. חשוב להבין איך bigquery_fdw מטפל בסוגי נתונים ב-BigQuery ובמיפוי עמודות, כי התוסף alloydb_sync משתמש ב-bigquery_fdw כדי להתחבר ל-BigQuery.
  2. נכנסים לחשבון Google Cloud . אם אתם משתמשים חדשים ב- Google Cloud, צרו חשבון כדי שתוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
  3. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  4. Verify that billing is enabled for your Google Cloud project.

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  6. Verify that billing is enabled for your Google Cloud project.

  7. מפעילים את ממשקי ה-API של Cloud שנדרשים כדי ליצור חיבור ל-AlloyDB.

    הפעלת ממשקי ה-API

  8. כדי לאשר את שם הפרויקט שרוצים לבצע בו שינויים, בשלב אישור הפרויקט לוחצים על הבא.

  9. בשלב Enable APIs (הפעלת ממשקי API), לוחצים על Enable (הפעלה) כדי להפעיל את ממשקי ה-API הבאים:

    • AlloyDB API
    • Compute Engine API
    • Cloud Resource Manager API
    • Service Networking API
    • BigQuery Storage API

    אם אתם מתכננים להגדיר קישוריות לרשת ב-AlloyDB באמצעות רשת VPC שנמצאת באותו פרויקט Google Cloud כמו AlloyDB, אתם צריכים להשתמש ב-Service Networking API.

    אם אתם מתכננים להגדיר קישוריות לרשת ל-AlloyDB באמצעות רשת VPC שנמצאת בפרויקט אחר Google Cloud , תצטרכו להשתמש ב-Compute Engine API וב-Cloud Resource Manager API.

  10. מוודאים שיש לכם טבלה ב-BigQuery קיימת שממנה אתם רוצים לסנכרן נתונים. מידע נוסף זמין במאמר יצירה ושימוש בטבלאות BigQuery.

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

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

  • BigQuery Data Viewer (roles/bigquery.dataViewer) או כל תפקיד בהתאמה אישית עם ההרשאות bigquery.tables.get ו-bigquery.tables.getData. כשמקצים את התפקיד הזה לחשבון שירות, הוא מספק הרשאות לקריאת נתונים ומטא-נתונים מהטבלה או מהתצוגה.
  • BigQuery Read Session User (roles/bigquery.readSessionUser) או כל תפקיד מותאם אישית עם ההרשאות bigquery.readsessions.create ו-bigquery.readsessions.getData. ההרשאה מאפשרת ליצור סשנים של קריאה ולהשתמש בהם.
  • BigQuery Job User (roles/bigquery.jobUser) או כל תפקיד מותאם אישית עם הרשאות bigquery.jobs.create. הרישום מאפשר ליצור ולהריץ משימות, כולל משימות של שאילתות.

הגדרת התוסף

לפני שמסנכרנים טבלאות מ-BigQuery, צריך להפעיל את התוסף הנדרש ולהגדיר את החיבור ל-BigQuery.

  1. יוצרים את התוסף.

    1. מתחברים למכונת AlloyDB באמצעות לקוח psql לפי ההוראות במאמר חיבור לקוח psql למכונה.
    2. מריצים את הפקודה הבאה:

      CREATE EXTENSION IF NOT EXISTS alloydb_sync;
      
  2. כדי לאפשר ל-AlloyDB לבצע אימות ב-BigQuery, צריך ליצור את מיפוי המשתמשים.

    CREATE EXTENSION IF NOT EXISTS bigquery_fdw;
    CREATE SERVER IF NOT EXISTS BIGQUERY_SERVER_NAME FOREIGN DATA WRAPPER bigquery_fdw;
    CREATE USER MAPPING IF NOT EXISTS FOR USER SERVER BIGQUERY_SERVER_NAME;
    

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

    • USER: שם משתמש במסד נתונים או משתמש IAM שיש לו גישה לטבלה ב-BigQuery.
    • BIGQUERY_SERVER_NAME: מזהה ייחודי של שרת BigQuery. צריך להגדיר את זה פעם אחת במסד נתונים נתון. אפשר להחליף את BIGQUERY_SERVER_NAME בשם השרת.

סנכרון של טבלה ב-BigQuery לייצוא חד-פעמי

אפשר לסנכרן טבלה ב-BigQuery לייצוא חד-פעמי באמצעות psql.

סנכרון חד-פעמי של טבלה ב-BigQuery באמצעות psql

כדי ליצור עותק שאפשר לערוך של נתוני BigQuery, משתמשים ב-psql כדי להריץ את הפונקציה alloydb_sync.import_bq_table.

SELECT alloydb_sync.import_bq_table(
  'PROJECT_ID.DATASET_ID.TABLE_ID',
  'ALLOYDB_DESTINATION_TABLE_NAME',
  'ON_EXISTS',
  ARRAY['PRIMARY_KEY_COLUMN']
);

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

  • PROJECT_ID: המזהה של הפרויקט שבו נמצא מערך הנתונים ב-BigQuery.
  • DATASET_ID: השם של מערך הנתונים ב-BigQuery של הטבלה. בטבלאות Iceberg עם שם בן 4 חלקים, זהו Catalog.Namespace.
  • TABLE_ID: השם של הטבלה או התצוגה ב-BigQuery.
  • ALLOYDB_DESTINATION_TABLE_NAME: השם של הטבלה המקומית במסד הנתונים של AlloyDB שרוצים ליצור ולייבא אליה נתונים. אפשר לכלול את שם הסכימה – לדוגמה, public.local_sales.
  • ON_EXISTS: השיטה לשימוש אם טבלת היעד כבר קיימת.
  • PRIMARY_KEY_COLUMN: רשימה אופציונלית של שמות עמודות לשימוש כמפתח ראשי.

דוגמה

בדוגמה הבאה מוצג איך לסנכרן טבלה בשם transactions ממערך נתונים ב-BigQuery לטבלה חדשה ב-AlloyDB בשם transactions:public.local_sales

SELECT alloydb_sync.import_bq_table(
    'my-gcp-project.sales_data.transactions',
    'public.local_sales',
    'replace'
);
פרמטר on_exists

הפרמטר on_exists קובע איך הפונקציה תטפל בסנכרון אם טבלת היעד כבר קיימת ב-AlloyDB:

  • error: ברירת המחדל. הסנכרון נפסק אם טבלת היעד כבר קיימת.
  • skip: מדלג על הסנכרון אם טבלת היעד כבר קיימת.
  • replace: מחליף את הטבלה המקומית הקיימת בנתונים חדשים מ-BigQuery.
תמיכה במפתח ראשי

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

SELECT alloydb_sync.import_bq_table(
    'my-gcp-project.sales_data.transactions',
    'public.local_sales',
    ARRAY['transaction_id']
);

סנכרון טבלה ב-BigQuery לייצוא תקופתי

אפשר לסנכרן טבלה ב-BigQuery לייצוא תקופתי באמצעות psql.

יצירת סנכרון תקופתי

כדי לשמור על טבלה לקריאה בלבד שמסונכרנת עם נתוני BigQuery, צריך להשתמש ב-psql כדי להריץ את הפונקציה alloydb_sync.create_bq_sync_table.

SELECT alloydb_sync.create_bq_sync_table(
    'PROJECT_ID.DATASET_ID.TABLE_ID',
    'ALLOYDB_DESTINATION_TABLE_NAME',
    'REFRESH_INTERVAL',
    'ON_EXISTS',
    ARRAY['PRIMARY_KEY_COLUMN']
);

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

  • PROJECT_ID.DATASET_ID.TABLE_ID: השם המלא של הטבלה או התצוגה ב-BigQuery, כולל מזהה הפרויקט, מזהה מערך הנתונים ומזהה הטבלה, מופרדים בנקודות. בטבלאות Iceberg עם שם בן 4 חלקים, DATASET_ID מיוצג כ-Catalog.Namespace. לדוגמה, my-gcp-project.sales_data.transactions.
  • ALLOYDB_DESTINATION_TABLE_NAME: השם של הטבלה המקומית במסד הנתונים של AlloyDB שבה רוצים ליצור ולסנכרן נתונים.
  • REFRESH_INTERVAL: המרווח שבו AlloyDB מרענן את הנתונים מ-BigQuery באופן תקופתי – למשל, 12 hours.
  • ON_EXISTS: שיטת הפעולה לשימוש אם טבלת היעד כבר קיימת.
  • PRIMARY_KEY_COLUMN: רשימה אופציונלית של שמות עמודות לשימוש כמפתח ראשי.

דוגמה

בדוגמה הבאה מוצג אופן היצירה של העתק של פרופיל לקוח שמתעדכן כל 12 שעות:

SELECT alloydb_sync.create_bq_sync_table(
    'my-gcp-project.crm_data.profiles',
    'public.customer_mirror',
    '12 hours',
    'replace'
);

מעקב וניהול של עבודות

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

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

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

SELECT
    import_id,
    status,
    records_processed,
    total_records,
    error
FROM alloydb_sync.job_status;

לדוגמה, כדי לבטל את העבודה, מריצים את הפקודה הבאה:

SELECT alloydb_sync.cancel_import_job('85bb5dfa-dfb9-4017-9153-738f55abe4b1');

הפסקה ומחיקה של משימת סנכרון

כדי להפסיק לשקף טבלה ב-BigQuery ולמחוק את הטבלה המקומית, משתמשים בפונקציה alloydb_sync.delete_bq_sync_table:

SELECT alloydb_sync.delete_bq_sync_table('public.customer_mirror');

מגבלות

ההגבלות הבאות חלות כשמסנכרנים טבלאות מ-BigQuery:

  • התכונה הזו נתמכת רק ב-PostgreSQL גרסה 18.
  • אם DROP אתם מסירים את התוסף alloydb_sync, אתם צריכים להפעיל מחדש את המופע לפני שאתם יוצרים את התוסף שוב.
  • הסנכרון מתבצע במסגרת טרנזקציה. אם משימת הייבוא נקטעת או נכשלת, המערכת מבטלת את השינויים שבוצעו בנתונים המיובאים.
  • אם שני משתמשים יתחילו משימות סנכרון בו-זמנית עם אותן טבלאות יעד, יכול להיות שהטבלאות ידחפו אחת את השנייה.
  • אם מתרחשת הפרעה כלשהי במהלך הייבוא הראשוני ברקע של טבלת סנכרון חדשה שנרשמה, הטבלה נשארת לא שלמה עד למרווח הרענון המתוזמן הבא שלה. כדי לפתור את הבעיה, אפשר למחוק את טבלת הסנכרון באמצעות הפונקציה alloydb_sync.delete_bq_sync_table() וליצור אותה מחדש.
  • סוגים מורכבים של BigQuery כמו ARRAY,‏ BYTES,‏ VECTOR ו-GEOGRAPHY לא נתמכים בסנכרון. רשימה מלאה זמינה במאמר סוגי נתונים נתמכים ב-BigQuery ומיפוי עמודות.
  • אל תשמיטו ידנית טבלה משוכפלת. משתמשים בפונקציית ה-API‏ alloydb_sync.delete_bq_sync_table() כדי למחוק את הטבלה בצורה בטוחה ולרענן אותה.
  • כדי להסיר מסד נתונים שמשתמש בתוסף alloydb_sync, צריך להשתמש ב-DROP DATABASE ... WITH (FORCE).
  • אם מסד הנתונים של Postgres קורס בזמן שהייבוא פועל, יכול להיות שהמטא-נתונים ייתקעו במצב RUNNING, ויחסמו ייבוא עתידי. כדי לבטל את החסימה, צריך להפעיל את UPDATE alloydb_sync.import_job_status SET status = 'FAILED' WHERE status = 'RUNNING'; באופן ידני.

תמחור

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

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

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