הגדרת גישה של AlloyDB לנתונים בזמן אמת ב-BigQuery

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

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

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

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

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

  1. מפעילים את הדגל bigquery_fdw.enabled במכונת AlloyDB ל-PostgreSQL.
  2. חשוב להכיר את סוגי הנתונים הנתמכים.
  3. נכנסים לחשבון Google Cloud . אם אתם משתמשים חדשים ב- Google Cloud, צרו חשבון כדי שתוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
  4. 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

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

  6. Enable the AlloyDB, Compute Engine, Resource Manager, and BigQuery APIs, if any are not already enabled.

    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

  7. 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

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

  9. Enable the AlloyDB, Compute Engine, Resource Manager, and BigQuery APIs, if any are not already enabled.

    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

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

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

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

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

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

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

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

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

כדי להעניק הרשאות קריאה למערך הנתונים ב-BigQuery לחשבון השירות של אשכול AlloyDB, צריך את ההרשאות הבאות. מידע נוסף זמין במאמר בנושא מתן גישה ל-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 API. אפשר לתת את התפקיד הזה רק למשאבים של מנהל המשאבים (פרויקטים, תיקיות וארגונים). כשמספקים פרויקט זמן ריצה נפרד, העבודה מופעלת בפרויקט הזה במקום בפרויקט הנתונים. כלומר, צריך להעניק את התפקיד Job User בפרויקט של זמן הריצה.

  • התפקיד 'צפייה באובייקט אחסון' (roles/storage.objectViewer) או כל תפקיד בהתאמה אישית עם ההרשאות storage.objects.get. ההרשאה מאפשרת גישה לטבלאות חיצוניות ב-BigQuery. צריך להעניק אותה ברמת הפרויקט או ברמת הקטגוריה.

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

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

מסוף Google Cloud מעניק באופן אוטומטי את ההרשאות הנדרשות לחשבון השירות של האשכול כשמחברים טבלה ב-BigQuery באמצעות AlloyDB Studio.

כדי לתת גישה באמצעות ה-CLI של gcloud:

gcloud

כדי להשתמש ב-ה-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, שהוא חשבון השירות של האשכול הזה. אפשר למצוא את חשבון השירות גם בדף Cluster overview.

  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. עוברים לדף Clusters.

    מעבר אל Clusters

  2. לוחצים על המזהה של האשכול שבו רוצים להשתמש.

  3. בתפריט הניווט, לוחצים על AlloyDB Studio.

  4. נכנסים למסד הנתונים.

  5. בחלונית Explorer, מרחיבים את הסכימה הרלוונטית.

  6. לוחצים על התפריט Actions (פעולות) לצד BigQuery Tables (טבלאות BigQuery) ואז על Connect BigQuery table (קישור טבלת BigQuery).

  7. בחלונית Connect BigQuery table (קישור טבלה ב-BigQuery), בוחרים פרויקט מקור, מערך נתונים מקור וטבלה.

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

  9. בשדה Table name (שם הטבלה), מזינים שם לטבלה החיצונית.

  10. אופציונלי: לוחצים על הצגת פקודת SQL כדי לראות את הפקודה שנוצרה.

  11. לוחצים על קישור טבלה. תיבת דו-שיח תציג את ההתקדמות. אחרי שהתהליך מסתיים, אפשר להריץ שאילתות בטבלה כמו בכל טבלה אחרת ב-AlloyDB.

psql

  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
      OPTIONS (runtime_project 'RUNTIME_PROJECT_ID');
    

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

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

    CREATE USER MAPPING FOR USERNAME SERVER BIGQUERY_SERVER_NAME ;
    

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

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

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

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

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

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

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

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

בטבלה הבאה מפורטים מיפויי סוגי הנתונים בין 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.

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