שאילתות מאוחדות ב-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).
מידע נוסף מופיע במאמר הענקת גישה לחשבון השירות.