ייצוא נתונים ל-AlloyDB (תהליך ETL הפוך)
במאמר הזה מוסבר איך להגדיר תהליך עבודה של חילוץ, טרנספורמציה וטעינה הפוכה (reverse ETL) מ-BigQuery אל AlloyDB ל-PostgreSQL. אפשר לעשות את זה באמצעות ההצהרה EXPORT DATA.
לפני שמתחילים
יוצרים אשכול ומכונה של AlloyDB, שכוללים מסד נתונים, סכימה וטבלה, כדי לקבל את הנתונים המיוצאים. לפני שמריצים את עבודת הייצוא, צריך לוודא שיש סכימה וטבלה של היעד.
מופע היעד של AlloyDB חייב להיות מופע
PRIMARYבמצבREADY.יוצרים חיבור ל-BigQuery כדי להתחבר למופע AlloyDB. החיבור צריך להיות מאומת באמצעות שם משתמש וסיסמה. למשתמש במסד הנתונים שצוין בחיבור צריכות להיות הרשאות
INSERTבטבלת היעד וUSAGEבסכימת היעד.יוצרים מקום שמור ברמה BigQuery Enterprise או Enterprise Plus.
מעניקים תפקידים בניהול הזהויות והרשאות הגישה (IAM) שנותנים למשתמשים את ההרשאות הנדרשות לביצוע כל משימה במסמך הזה.
התפקידים הנדרשים
כדי לקבל את ההרשאות שדרושות לייצוא נתוני 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.