שאילתות גלובליות

שאילתות גלובליות מאפשרות להריץ שאילתות SQL שמפנות לנתונים שמאוחסנים ביותר מאזור אחד. לדוגמה, אפשר להריץ שאילתה עם אחזור נתונים גלובלי שמצטרפת לטבלה שנמצאת ב-us-central1 עם טבלה שנמצאת ב-europe-central2. במאמר הזה מוסבר איך להפעיל ולהריץ שאילתות גלובליות בפרויקט.

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

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

הפעלת שאילתות גלובליות

כדי להפעיל שאילתות גלובליות בפרויקט או בארגון, משתמשים בהצהרה ALTER PROJECT SET OPTIONS או בהצהרה ALTER ORGANIZATION SET OPTIONS כדי לשנות את הגדרת ברירת המחדל.

  • כדי להריץ שאילתות גלובליות באזור מסוים, צריך להגדיר את הארגומנט enable_global_queries_execution לערך true באותו אזור עבור פרויקט שבו השאילתה מורצת.
  • כדי לאפשר לשאילתות גלובליות להעתיק נתונים מאזור מסוים, צריך להגדיר את הארגומנט enable_global_queries_data_access לערך true באזור הזה בפרויקט שבו הנתונים מאוחסנים.
  • אפשר להריץ שאילתות גלובליות בפרויקט אחד ולשלוף נתונים מאזורים אחרים מפרויקט אחר.

בדוגמה הבאה אפשר לראות איך משנים את ההגדרות האלה ברמת הפרויקט. נניח שאתם רוצים להריץ שאילתות גלובליות באזור REGION_1 בפרויקט PROJECT_1_ID ולשלוף נתונים מ-REGION_2 בפרויקט PROJECT_2_ID.

צריך להפעיל את ההרצה של שאילתות גלובליות ב-REGION_1:

ALTER PROJECT `PROJECT_1_ID`
SET OPTIONS (
  `region-REGION_1.enable_global_queries_execution` = true
);

והפעלת העתקת נתונים באמצעות שאילתות גלובליות מ-REGION_2:

ALTER PROJECT `PROJECT_2_ID`
SET OPTIONS (
  `region-REGION_2.enable_global_queries_data_access` = true
);

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

  • PROJECT_1_ID: השם של הפרויקט שבו יופעלו שאילתות גלובליות
  • REGION_1: האזור שבו יופעלו שאילתות גלובליות
  • PROJECT_2_ID: שם הפרויקט שממנו שאילתות גלובליות ישלפו נתונים
  • REGION_2: האזור שממנו שאילתות גלובליות ישלפו נתונים

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

ההרשאה הנדרשת

כדי להריץ שאילתה עם אחזור נתונים גלובלי, נדרשת ההרשאה bigquery.jobs.createGlobalQuery. התפקיד BigQuery Admin הוא התפקיד המוגדר מראש היחיד שמכיל את ההרשאה הזו. כדי לתת הרשאה להריץ שאילתות עם אחזור נתונים גלובלי בלי לתת את תפקיד האדמין ב-BigQuery, פועלים לפי השלבים הבאים:

  1. יוצרים תפקיד בהתאמה אישית, לדוגמה BigQuery global queries executor (הרצת שאילתות גלובליות ב-BigQuery).
  2. הוספת bigquery.jobs.createGlobalQuery לתפקיד הזה.
  3. מקצים את התפקיד הזה למשתמשים או לחשבונות שירות נבחרים.

שאילתת נתונים

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

בדוגמה הבאה מריצים שאילתה עם אחזור נתונים גלובלי שמאחדת טבלאות משני מערכי נתונים שונים שמאוחסנים בשני מיקומים שונים:

SELECT id, tr_date, product_id, price FROM us_dataset.transactions
UNION ALL
SELECT id, tr_date, product_id, price FROM europe_dataset.transactions

המיקום ייבחר אוטומטית

במקרים הבאים, המיקום שבו צריך להריץ את השאילתה נקבע באופן אוטומטי ואי אפשר לשנות אותו:

  • שאילתות בשפת שינוי נתונים (הצהרות INSERT, UPDATE, DELETE) תמיד מופעלות במיקום של טבלת היעד.
  • שאילתות בשפת הגדרת נתונים, כמו הצהרת CREATE TABLE AS SELECT, תמיד מופעלות במיקום שבו נוצר או שונה משאב.
  • שאילתות עם טבלת יעד שצוינה תמיד מופעלות במיקום שבו נמצאת טבלת היעד.

בחירת מיקום

באופן כללי, אתם קובעים איפה השאילתות הגלובליות יופעלו. כדי לקבל את ההחלטה הזו, צריך לשקול את הדברים הבאים:

  • שאילתות גלובליות מעתיקות נתונים באופן זמני ממיקום אחד למיקום אחר. אם לארגון שלכם יש דרישות לגבי מיקום אחסון הנתונים, ואתם לא רוצים שהנתונים ממיקום א' ייצאו ממיקום א', אתם צריכים להגדיר את מיקום השאילתה ל-א'.

  • כדי לצמצם את כמות הנתונים שמועברים בין מיקומים ולהפחית את עלות השאילתה, מריצים את השאילתה באזור שבו מאוחסנים רוב הנתונים שמופיעים בשאילתה.

נניח שיש לכם חנות וירטואלית ואתם שומרים רשימה של המוצרים שלכם במיקום us-central1, אבל אתם מבצעים עסקאות באזור us-south1. אם יש יותר עסקאות ממוצרים בקטלוג, צריך להריץ את השאילתה באזור us-south1.

הסבר על שאילתות גלובליות

כדי להריץ שאילתות גלובליות בצורה יעילה וחסכונית, חשוב להבין את המנגנון שמאחורי ההרצה שלהן.

כדי להשתמש בנתונים שנמצאים במיקומים שונים, צריך לשכפל אותם למיקום אחד. התרשים הבא הוא הפשטה של תהליך העבודה של שאילתה עם אחזור נתונים גלובלי שמבוצעת על ידי BigQuery:

  1. קובעים איפה צריך להריץ את השאילתה – בהצהרה של המשתמש או באופן אוטומטי. המיקום הזה נקרא מיקום ראשי, וכל שאר המיקומים שאליהם מתייחסת השאילתה הם מרוחקים.
  2. מריצים שאילתת משנה בכל אזור מרוחק כדי לאסוף את הנתונים שנדרשים להשלמת השאילתה באזור הראשי.
  3. מעתיקים את הנתונים האלה ממיקומים מרוחקים למיקום הראשי.
  4. שמירת הנתונים בטבלאות זמניות במיקום הראשי למשך 8 שעות.
  5. מריצים שאילתה סופית עם כל הנתונים שנאספו במיקום הראשי.
  6. החזרת תוצאות השאילתה.

מערכת BigQuery מנסה לצמצם את כמות הנתונים שמועברים בין אזורים. דוגמה:

SET @@location = 'EU';
SELECT
  t1.col1, t2.col2
FROM
  eu_dataset.table1 t1
  JOIN us_dataset.table2 t2 using col3
WHERE
  t2.col4 = 'ABC'

ב-BigQuery אין צורך לשכפל את כל הטבלה t2 מארה"ב לאיחוד האירופי. מספיק להעביר רק את העמודות המבוקשות (col2 ו-col3) ואת השורות שתואמות לתנאי WHERE (t2.col4 = 'ABC'). עם זאת, המנגנונים האלה, שנקראים pushdowns, תלויים במבנה השאילתה, ולפעמים כמות הנתונים שמועברת גדולה. מומלץ לבדוק שאילתות גלובליות על קבוצת משנה קטנה של נתונים, ולוודא שהנתונים מועברים רק כשצריך.

ניראות (observability)

כדי לראות את טקסט השאילתה שנשלח לאזור המרוחק, בודקים את היסטוריית העבודות. למשרה המרוחקת יש אותו מזהה משרה כמו לשאילתה המקורית, עם הסיומת _xregion.

השבתת שאילתות גלובליות

כדי להשבית שאילתות גלובליות בפרויקט או בארגון, משתמשים ב-ALTER PROJECT SET OPTIONS statement או ב-ALTER ORGANIZATION SET OPTIONS statement כדי לשנות את הגדרת ברירת המחדל.

  • כדי להשבית שאילתות גלובליות באזור מסוים, מגדירים את הארגומנט enable_global_queries_execution לערך false או NULL באזור הזה.
  • כדי למנוע משאילתות גלובליות להעתיק נתונים מאזור מסוים, צריך להגדיר את הארגומנט enable_global_queries_data_access לערך false או NULL באותו אזור.

בדוגמה הבאה מוצג איך משביתים שאילתות גלובליות ברמת הפרויקט:

ALTER PROJECT PROJECT_ID
SET OPTIONS (
  `region-REGION.enable_global_queries_execution` = false,
  `region-REGION.enable_global_queries_data_access` = false
);

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

  • PROJECT_ID: השם של הפרויקט שרוצים לשנות
  • REGION: שם האזור שבו רוצים להשבית את השאילתות הגלובליות

יכול להיות שיחלפו כמה דקות עד שהשינוי ייכנס לתוקף.

תמחור

העלות של שאילתה עם אחזור נתונים גלובלי מורכבת מהרכיבים הבאים:

  • עלות החישוב של כל שאילתת משנה במיקומים מרוחקים, על סמך מודל התמחור שלכם במיקומים האלה
  • עלות החישוב של השאילתה הסופית באזור שבו היא מופעלת, על סמך מודל התמחור שלכם באותו אזור
  • העלות של העתקת נתונים בין מיקומים שונים, בהתאם לתמחור של רפליקציית נתונים
  • העלות של אחסון נתונים שהועתקו מאזורים מרוחקים לאזור הראשי (למשך 8 שעות), בהתאם לתמחור האחסון

מכסות

מידע על מכסות שקשורות לשאילתות גלובליות זמין במאמר Query jobs.

מגבלות

  • פרטי ההפעלה וגרף ההפעלה של שאילתה לא מציגים את מספר הבייטים שעברו עיבוד והועברו ממיקומים מרוחקים. המידע הזה מופיע בעבודות העתקה שאפשר למצוא בהיסטוריית העבודות. למזהה של עבודת העתקה שנוצרה על ידי שאילתה עם אחזור נתונים גלובלי יש את מזהה העבודה של שאילתת העבודה כקידומת.
  • אין תמיכה בשאילתות גלובליות במצב סביבת ארגז חול
  • החביון של שאילתות גלובליות גבוה יותר מזה של שאילתות באזור יחיד, כי נדרש זמן להעברת נתונים בין אזורים.
  • שאילתות גלובליות לא משתמשות במטמון כדי למנוע העברת נתונים בין אזורים.
  • אי אפשר לשלוח שאילתות לגבי עמודות פסאודו, כמו _PARTITIONTIME, באמצעות שאילתות גלובליות.
  • אי אפשר לשלוח שאילתות לעמודות באמצעות שמות עמודות גמישים עם שאילתות גלובליות.
  • אי אפשר לשלוח שאילתה לגבי תצוגות של INFORMATION_SCHEMA מאזור מרוחק בשאילתה עם אחזור נתונים גלובלי.
  • אי אפשר להריץ שאילתות על טבלאות Apache Iceberg במאגר מטא-נתונים של BigLake מאזור מרוחק בשאילתה עם אחזור נתונים גלובלי.
  • כשמפנים לעמודות של טבלת BigLake באמצעות פסקה WHERE, אי אפשר להשתמש בערכים מילוליים RANGE או INTERVAL.
  • אין תמיכה בתצוגות מורשות ובשגרות מורשות גלובליות (כשתצוגה או שגרה במיקום אחד מורשות לגשת למערך נתונים במיקום אחר).
  • אין תמיכה בתצוגות חומריות של שאילתות גלובליות.
  • אם השאילתה עם אחזור נתונים גלובלי מפנה לעמודות STRUCT, לא מוחלים דחיפות על אף אחת מהשאילתות המשניות המרוחקות. כדי לשפר את הביצועים, כדאי ליצור תצוגה באזור המרוחק שמסננת עמודות STRUCT ומחזירה רק את השדות הנדרשים כעמודות נפרדות.
  • שאילתות גלובליות לא מבוצעות באופן אטומי. במקרים שבהם שכפול הנתונים מצליח, אבל השאילתה הכוללת נכשלת, עדיין תחויבו על שכפול הנתונים.
  • טבלאות זמניות שנוצרות באזורים מרוחקים כחלק מהרצת שאילתות עם אחזור נתונים גלובלי מוצפנות רק באמצעות מפתחות הצפנה בניהול הלקוח (CMEK) אם מפתח CMEK שהוגדר להצפנת התוצאות של השאילתה עם אחזור נתונים גלובלי (ברמת הטבלה, מערך הנתונים או הפרויקט) הוא גלובלי. כדי להבטיח שטבלאות זמניות מרוחקות תמיד יהיו מוגנות באמצעות CMEK, צריך להגדיר מפתח KMS כברירת מחדל לפרויקט שמריץ שאילתות גלובליות באזור המרוחק.
  • אין תמיכה בשאילתות גלובליות ב-Assured Workloads.
  • אפשר לשלוח שאילתה לכל היותר ל-10 טבלאות בכל אזור בשאילתה עם אחזור נתונים גלובלי.