שאילתות לכמה מסדי נתונים ב-AlloyDB
שאילתות מאוחדות ב-BigQuery מאפשרות לשלוח שאילתות על נתונים שמאוחסנים ב-AlloyDB ל-PostgreSQL בזמן אמת, בלי להעתיק או להעביר את הנתונים. אתם יכולים להשתמש בפונקציה EXTERNAL_QUERY כדי לשלוח שאילתות SQL ל-AlloyDB ולצרף את התוצאות לטבלאות ב-BigQuery.
לפני שמתחילים
- מוודאים שהאדמין ב-BigQuery יצר חיבור ל-AlloyDB ושיתף אותו איתכם.
-
כדי לקבל את ההרשאות שנדרשות לשליחת שאילתות למכונה של AlloyDB, צריך לבקש מהאדמין להקצות לכם את התפקיד משתמש בחיבורים של BigQuery (
roles/bigquery.connectionUser) ב-IAM בפרויקט. כדי לקרוא הסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.
נתוני שאילתות
כדי לשלוח שאילתה לכמה מסדי נתונים ל-AlloyDB משאילתת GoogleSQL, משתמשים בפונקציה EXTERNAL_QUERY.
נניח שאתם מאחסנים טבלת לקוחות ב-BigQuery וטבלת מכירות ב-AlloyDB, ואתם רוצים לאחד את שתי הטבלאות בשאילתה אחת. בדוגמה הבאה, השאילתה לכמה מסדי נתונים נשלחת לטבלה ב-AlloyDB בשם orders, והתוצאות מצורפות לטבלה ב-BigQuery בשם mydataset.customers.
השאילתה לדוגמה כוללת 3 חלקים:
מריצים את השאילתה החיצונית
SELECT customer_id, MIN(order_date) AS first_order_date FROM orders GROUP BY customer_idבמסד הנתונים של AlloyDB כדי לקבל את תאריך ההזמנה הראשונה של כל לקוח באמצעות הפונקציהEXTERNAL_QUERY.מצרפים את טבלת התוצאות של השאילתה החיצונית לטבלת הלקוחות ב-BigQuery לפי
customer_id.בוחרים את פרטי הלקוח ואת תאריך ההזמנה הראשונה בקבוצת התוצאות הסופית.
SELECT c.customer_id, c.name, rq.first_order_date
FROM mydataset.customers AS c
LEFT OUTER JOIN EXTERNAL_QUERY(
'us.connection_id',
'''SELECT customer_id, MIN(order_date) AS first_order_date
FROM orders
GROUP BY customer_id''') AS rq ON rq.customer_id = c.customer_id
GROUP BY c.customer_id, c.name, rq.first_order_date;
הצגת סכימת טבלה ב-AlloyDB
אפשר להשתמש בפונקציה EXTERNAL_QUERY כדי לשלוח שאילתות לטבלאות information_schema ולגשת למטא-נתונים של מסד הנתונים. לדוגמה, אתם יכולים להציג את כל הטבלאות במסד הנתונים או את הסכימה של הטבלה. מידע נוסף זמין במאמר טבלאות information_schema ב-PostgreSQL.
-- List all tables in a database.
SELECT * FROM EXTERNAL_QUERY("region.connection_id",
"select * from information_schema.tables;");
-- List all columns in a table.
SELECT * FROM EXTERNAL_QUERY("region.connection_id",
"select * from information_schema.columns where table_name='x';");
מעקב אחרי שאילתות לכמה מסדי נתונים ב-BigQuery
כשמריצים שאילתה מאוחדת ב-AlloyDB, BigQuery מוסיף לשאילתה הערה שדומה לזו:
/* Federated query from BigQuery. Project ID: PROJECT_ID, BigQuery Job ID: JOB_ID. */
אם אתם עוקבים אחרי יומנים של שימוש בשאילתות, ההערה הבאה יכולה לעזור לכם לזהות שאילתות שמגיעות מ-BigQuery.
נכנסים לדף Logs Explorer.
בכרטיסייה Query, מזינים את השאילתה הבאה:
resource.type="alloydb.googleapis.com/Instance" textPayload=~"Federated query from BigQuery"לוחצים על Run query.
אם יש רשומות זמינות לשאילתות לכמה מסדי נתונים ב-BigQuery, רשימה של רשומות שדומה לרשימה הבאה תופיע ב-Query results.
YYYY-MM-DD hh:mm:ss.millis UTC [3210064]: [4-1] db=DATABASE, user=USER_ACCOUNT STATEMENT: SELECT 1 FROM (SELECT FROM company_name_table) t; /* Federated query from BigQuery. Project ID: PROJECT_ID, BigQuery Job ID: JOB_ID */ YYYY-MM-DD hh:mm:ss.millis UTC [3210532]: [2-1] db=DATABASE, user=USER_ACCOUNT STATEMENT: SELECT "company_id", "company type_id" FROM (SELECT FROM company_name_table) t; /* Federated query from BigQuery. Project ID: PROJECT_ID, BigQuery Job ID: JOB_ID */
פתרון בעיות
בקטע הזה מתוארות שגיאות פוטנציאליות שעלולות להתרחש כששולחים שאילתה לכמה מסדי נתונים אל AlloyDB, ומוצעים פתרונות אפשריים לפתרון בעיות.
הבעיה: החיבור לשרת של מסד הנתונים נכשל ומוצגת השגיאה הבאה:
Invalid table-valued function EXTERNAL_QUERY Connect to PostgreSQL server failed: server closed the connection unexpectedly. This probably means the server terminated abnormally before or while processing the request.
פתרון: ודאו שהשתמשתם בפרטי כניסה תקינים ושהשלמתם את כל דרישות הקדם כשאתם יוצרים את החיבור ל-AlloyDB.
בודקים אם לחשבון השירות שנוצר באופן אוטומטי כשנוצר חיבור ל-AlloyDB יש את התפקיד "לקוח AlloyDB" (roles/alloydb.client).
למידע נוסף, קראו את המאמר מתן גישה לחשבון השירות.
המאמרים הבאים
- מידע על שאילתות לכמה מסדי נתונים
- מידע ולמידה על מיפוי סוגי נתונים מ-PostgreSQL ל-BigQuery
- מידע על סוגי נתונים שלא נתמכים