שאילתות לכמה מסדי נתונים ב-AlloyDB
כאנליסטים של נתונים, אתם יכולים להריץ שאילתות על נתונים ב-AlloyDB ל-PostgreSQL מ-BigQuery באמצעות שאילתות מאוחדות.
פדרציית AlloyDB ב-BigQuery מאפשרת ל-BigQuery לשלוח שאילתות לנתונים שנמצאים ב-AlloyDB בזמן אמת, בלי להעתיק או להעביר את הנתונים.
לפני שמתחילים
- מוודאים שמנהל BigQuery יצר חיבור AlloyDB ושיתף אותו איתכם.
-
כדי לקבל את ההרשאות שנדרשות להפעלת שאילתה במופע AlloyDB, צריך לבקש מהאדמין להקצות לכם ב-IAM את התפקיד BigQuery Connection User (
roles/bigquery.connectionUser) בפרויקט. להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.
שאילתות על נתונים
כדי לשלוח שאילתה לכמה מסדי נתונים ל-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.
בכרטיסייה שאילתה, מזינים את השאילתה הבאה:
resource.type="alloydb.googleapis.com/Instance" textPayload=~"Federated query from BigQuery"לוחצים על Run query.
אם יש רשומות שזמינות לשאילתות מאוחדות ב-BigQuery, רשימה של רשומות שדומה לרשימה הבאה תופיע בתוצאות השאילתה.
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 */
מידע נוסף על Cloud Logging זמין במאמר Cloud Logging.
פתרון בעיות
בקטע הזה מתוארות שגיאות פוטנציאליות שאתם עלולים להיתקל בהן כשאתם שולחים שאילתה לכמה מסדי נתונים ל-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 Client (roles/alloydb.client).
מידע נוסף מופיע במאמר הענקת גישה לחשבון השירות.
המאמרים הבאים
- מידע על שאילתות מאוחדות
- מידע נוסף על מיפוי סוגי נתונים מ-PostgreSQL ל-BigQuery
- מידע נוסף על סוגי נתונים שלא נתמכים