ייבוא נתונים מ-BigQuery ל-AlloyDB

אתם יכולים לייבא נתונים ל-AlloyDB ל-PostgreSQL מטבלאות מובנות, מתצוגות מפורטות ומטבלאות BigQuery, וגם מטבלאות חיצוניות של BigLake (כמו טבלאות מנוהלות של Apache Iceberg) ומטבלאות חיצוניות רגילות. ‫Iceberg הוא פורמט טבלה פתוח לניהול נתונים ולחילופי נתונים.

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

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

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

  1. מגדירים את הדגל bigquery_fdw.enabled במופע AlloyDB.
  2. כדאי לעיין במיפוי של סוגי הנתונים כדי להבין איך סוגי הנתונים של BigQuery מיוצגים ב-PostgreSQL כשמשתמשים ב-bigquery_fdw.
  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. Enable the AlloyDB, Compute Engine, Resource Manager, and BigQuery APIs.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the APIs

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

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

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

  8. בשלב 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.

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

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

  • 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. ההרשאה מאפשרת ליצור סשנים של קריאה ולהשתמש בהם.

מתן גישה ל-AlloyDB למערך הנתונים ב-BigQuery

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

כדי להשתמש ב-ה-CLI של gcloud, אפשר להתקין ולהפעיל את Google Cloud CLI, או להשתמש ב-Cloud Shell.

  1. פותחים את ה-CLI של gcloud. אם ה-CLI של gcloud לא מותקן, מתקינים ומפעילים את ה-CLI של gcloud, או משתמשים ב-Cloud Shell.

  2. מריצים את הפקודה gcloud beta alloydb clusters describe:

    gcloud beta alloydb clusters describe CLUSTER --region=REGION

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

    הפלט כולל את השדה serviceAccountEmail, שהוא חשבון השירות של האשכול הזה. אפשר למצוא את חשבון השירות גם בדף פרטי האשכול.

  3. נותנים את ההרשאות הנדרשות. מידע נוסף זמין במאמר שליטה בגישה למשאבים באמצעות IAM.

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

    • The user does not have bigquery.readsessions.create permissions
    • Permission bigquery.tables.get denied on table
    • Permission bigquery.tables.getData denied on table

הגדרת התוסף

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

    1. מתחברים למכונת AlloyDB באמצעות לקוח psql לפי ההוראות במאמר חיבור לקוח psql למכונה. אפשר גם להשתמש ב-AlloyDB Studio. מידע נוסף זמין במאמר בנושא ניהול הנתונים באמצעות מסוף Google Cloud .
    2. מריצים את הפקודה הבאה:

      CREATE EXTENSION bigquery_fdw;
      
  2. יוצרים שרת חיצוני כדי להגדיר את פרמטרי החיבור למערך הנתונים המרוחק ב-BigQuery.

    CREATE SERVER BIGQUERY_SERVER_NAME FOREIGN DATA WRAPPER bigquery_fdw;
    

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

    • BIGQUERY_SERVER_NAME: מזהה ייחודי של השרת החיצוני. צריך להגדיר את זה פעם אחת במסד נתונים נתון. אפשר להחליף את BIGQUERY_SERVER_NAME בשם השרת.
  3. מריצים את הפקודה CREATE USER MAPPING כדי ליצור את מיפוי המשתמשים. הפקודה הזו מציינת את פרטי הכניסה שבהם יש להשתמש כשמתחברים לשרת הזר.

    CREATE USER MAPPING FOR USERNAME SERVER BIGQUERY_SERVER_NAME ;
    

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

    • USERNAME: שם משתמש במסד נתונים או משתמש IAM שיש לו גישה לטבלה החיצונית. אם מדובר במשתמש IAM, השם צריך להיות באותיות קטנות בלבד, וצריך להשתמש במירכאות כי השם מכיל תווים מיוחדים כמו @ ו-.).
    • BIGQUERY_SERVER_NAME: מזהה ייחודי של השרת החיצוני שיצרתם.
  4. מגדירים טבלאות חיצוניות שתואמות לטבלאות שרוצים לגשת אליהן ב-BigQuery באמצעות הפקודה CREATE FOREIGN TABLE. הפקודה הזו מאפשרת להגדיר את המבנה של טבלה מרוחקת. הטבלה החיצונית יכולה לכלול את כל העמודות בטבלת המקור ב-BigQuery או רק חלק מהן.

    CREATE FOREIGN TABLE TABLENAME (
      COLUMNX_NAME DATA_TYPE,
      COLUMNX_NAME DATA_TYPE,
      ...
    ) SERVER  BIGQUERY_SERVER_NAME
      OPTIONS (project 'BIGQUERY_PROJECT_ID',
               dataset  'BIGQUERY_DATASET_NAME',
               table  'BIGQUERY_TABLE_NAME');
    

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

    • TABLENAME: השם של הטבלה החיצונית במסד הנתונים המקומי.
    • COLUMNX_NAME: שם העמודה ב-AlloyDB. שם העמודה צריך להיות זהה בדיוק לשם העמודה התואמת בטבלת המקור ב-BigQuery. הסמל X מציין שאפשר ליצור את הטבלה עם כמה עמודות. השם צריך להיות זהה גם לאותיות הרישיות בעמודה ב-BigQuery. אם שם העמודה ב-BigQuery מכיל אותיות רישיות – לדוגמה, employeeID – צריך להוסיף מרכאות כפולות למזהה ב-AlloyDB – לדוגמה, employeeID – כדי לשמור על אותיות רישיות או על שילוב של אותיות רישיות וקטנות."employeeID"
    • DATA_TYPE: סוג הנתונים בעמודה.
    • BIGQUERY_SERVER_NAME: מזהה ייחודי של השרת החיצוני שיצרתם.
    • BIGQUERY_PROJECT_ID: מזהה הפרויקט שבו נמצא מערך הנתונים ב-BigQuery.
    • BIGQUERY_DATASET_NAME: השם של מערך הנתונים ב-BigQuery של הטבלה.
    • BIGQUERY_TABLE_NAME: השם של הטבלה ב-BigQuery.

    אחרי שיוצרים את הטבלה החיצונית, אפשר להריץ שאילתות בטבלה הזו באותו אופן שבו מריצים שאילתות בכל טבלה ב-AlloyDB.

ייבוא נתונים

כדי לייבא נתוני BigQuery או נתוני Iceberg של BigLake שמאוחסנים ב-BigQuery אל AlloyDB, פועלים לפי השלבים הבאים:

  1. מזהים מקור נתונים קיים או יוצרים טבלה ב-BigQuery או טבלאות מנוהלות חדשות ב-Iceberg.

  2. משתמשים ב-psql כדי ליצור את local_table על ידי הרצת הפקודה הבאה:

    CREATE TABLE local_table AS (SELECT * from foreign_table);
    

    הפקודה הזו יוצרת עותק של טבלה ב-BigQuery בטבלת AlloyDB מקומית רגילה. בהתאם לתהליך העבודה של האפליקציה, אפשר להגדיר את התוסף pg_cron של PostgreSQL כך שיעדכן את טבלת AlloyDB במרווחי זמן קבועים.

הגדרת לוח זמנים לייבוא נתונים באופן תקופתי

כשמייבאים נתונים מ-BigQuery, ‏ bigquery_fdw מתחבר לטבלה המרוחקת כטבלה חיצונית, וכך מאפשר להעתיק את הנתונים לאחסון מקומי ב-AlloyDB באמצעות CREATE TABLE ... AS (SELECT * FROM foreign_table).

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

כדי להגדיר תזמון לייבוא תקופתי של נתונים מ-BigQuery או נתוני Iceberg מ-BigLake אל AlloyDB, פועלים לפי השלבים הבאים:

  1. הגדרת התוסף bigquery_fdw
  2. מפעילים את התוסף pg_cron במופע AlloyDB. מידע נוסף זמין במאמר בנושא תוספים נתמכים למסדי נתונים.
    1. מגדירים את הדגל alloydb.enable_pg_cron לערך on. מידע נוסף זמין במאמר בנושא alloydb.enable_pg_cron.
    2. מגדירים את הדגל cron.database_name לשם מסד הנתונים שבו התקנתם את התוסף bigquery_fdw ושבו אתם רוצים להריץ את שאילתות ה-SQL כדי לרענן את הנתונים. מידע נוסף זמין במאמר בנושא דגלים נתמכים של מסדי נתונים.
  3. כדי לרענן מעת לעת עותק מקומי של הטבלה החיצונית, מריצים את הפקודות הבאות במסד הנתונים שבו התקנתם את התוסף bigquery_fdw:

    CREATE EXTENSION pg_cron;
    SELECT cron.schedule(JOB_NAME, SCHEDULE, 'CREATE TABLE IF NOT EXISTS local_table_copy AS (SELECT * FROM foreign_table); DROP TABLE IF EXISTS local_table; ALTER TABLE local_table_copy RENAME TO local_table;');
    

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

    • JOB_NAME: שם המשימה.
    • SCHEDULE: לוח הזמנים של המשימה.

    מה זה pg_cron?

מיפוי של סוגי נתונים

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

בטבלה הבאה מפורטים מיפויי סוגי הנתונים בין BigQuery ל-AlloyDB.

סוגי נתונים בטבלה ב-BigQuery סוגי נתונים מומלצים בטבלת חוץ של PostgreSQL

BOOLEAN

BOOLEAN

INTEGER (INT64)

BIGINT

FLOAT (FLOAT64)

DOUBLE PRECISION

STRING

VARCHAR

NUMERIC

NUMERIC(38, 9)

NUMERIC(P[, S])

NUMERIC(P, S)

BIGNUMERIC

NUMERIC(77, 38)

BIGNUMERIC(P[, S])

NUMERIC(P, S)

DATE

DATE

TIMESTAMP

TIMESTAMPTZ

TIME

TIME

JSON

JSONB

BYTES

BYTEA

GEOGRAPHY

GEOGRAPHY(POINT), ...

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

DATETIME

TIMESTAMP

ARRAY

VECTOR(N)

N הוא הממד של הווקטור. צריך להגדיר את הדגל bigquery_fdw.enable_vector_downcasting בסשן. מכיוון שהסוג VECTOR ב-AlloyDB משתמש בסוג float4, יכול להיות שתהיה ירידה ברמת הדיוק בהמרה הזו.

מידע נוסף זמין במאמר בנושא התוסף pgvector.

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