שאילתות עם אחזור נתונים גלובלי

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

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

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

הפעלת שאילתות עם אחזור נתונים גלובלי

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

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

דוגמה: הגדרה בכמה פרויקטים

בדוגמה הבאה מוסבר איך להריץ שאילתה בפרויקט אחד שניגשת לטבלה בפרויקט אחר.

נניח שיש לכם פרויקט query_project שמריץ משימות באזור us-central1, ואתם רוצים להריץ שאילתה שניגשת לטבלה data_project.dataset.my_table שנמצאת באזור europe-west1:

SET @@location='us-central1';
SELECT
  *
FROM
  `query_project.dataset.my_table`
  JOIN `data_project.dataset.my_other_table` USING id;

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

  1. צריך להפעיל את הרצת השאילתות עם אחזור נתונים גלובלי בפרויקט (query_project) באזור שבו מריצים את השאילתה (us-central1):

    ALTER PROJECT `query_project`
    SET OPTIONS (
    `region-us-central1.enable_global_queries_execution` = TRUE
    )
  2. צריך להפעיל את האפשרות להעתקת נתונים באמצעות שאילתות עם אחזור נתונים גלובלי מהפרויקט שמכיל את הנתונים (data_project) לאזור שלו (europe-west1):

    ALTER PROJECT `data_project`
    SET OPTIONS (
    `region-europe-west1.enable_global_queries_data_access` = TRUE
    )

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

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

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

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

  1. יוצרים תפקיד בהתאמה אישית, לדוגמה "מבצע שאילתות עם אחזור נתונים גלובלי ב-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

בחירת מיקום

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

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

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

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

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

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

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

הסבר על שאילתות עם אחזור נתונים גלובלי

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

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

  1. קובעים איפה צריך להריץ את השאילתה, לפי ההצהרה של המשתמש או באופן אוטומטי. המיקום הזה נקרא המיקום הראשי, וכל שאר המיקומים שהשאילתה מפנה אליהם הם מרוחקים.
  2. מריצים שאילתת משנה בכל אזור מרוחק כדי לאסוף את הנתונים שנדרשים להשלמת השאילתה באזור הראשי.
  3. מעתיקים את הנתונים האלה מהמיקומים המרוחקים למיקום הראשי.
  4. שמירת הנתונים בטבלאות זמניות במיקום הראשי למשך 24 שעות. בתוצאות של שאילתות משנה שקטנות מ-10GiB, יכול להיות שהנתונים יישמרו במטמון לשימוש חוזר כדי להימנע מהעברת הנתונים בין אזורים.
  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.

‫API בארכיטקטורת REST של Jobs

כשקוראים ל-method‏ jobs.get, המשאב Job שמוחזר מכיל את השדות הבאים באובייקט JobStatistics:

  • ‫statistics.globalQueryRemoteRegions: מערך של מחרוזות שמייצגות את האזורים המרוחקים שמהם שאילתה עם אחזור נתונים גלובלי ניגשת לנתונים. השדה הזה מאוכלס רק במשימות של שאילתות הורה עם אחזור נתונים גלובלי באזור הביצוע הראשי. הוא ריק במשימות של שאילתות צאצא עם אחזור נתונים גלובלי ובשאילתות באזור יחיד.
  • ‫statistics.parentGlobalQueryJob: אובייקט JobReference (projectId, ‏ jobId, ‏ location) שמזהה את משימת האב של השאילתה עם אחזור נתונים גלובלי. השדה הזה מאוכלס רק במשימות צאצא של שאילתות עם אחזור נתונים גלובלי (שאילתות משנה מרוחקות ומשימות העתקה בין אזורים) שמופעלות באזורים מרוחקים בשם שאילתה עם אחזור נתונים גלובלי. הוא לא מוגדר למשימות של שאילתות הורה עם אחזור נתונים גלובלי ולשאילתות באזור יחיד.

יומני ביקורת

ביומני הביקורת של Cloud, האובייקט BigQueryAuditMetadata מכיל את השדות הבאים באובייקט JobStats:

  • ‫jobStats.globalQueryRemoteRegions: מערך של מחרוזות שמייצגות את האזורים המרוחקים שהשאילתה ניגשה אליהם. השדה הזה מאוכלס רק במשימות הורה של שאילתות עם אחזור נתונים גלובלי באזור הביצוע הראשי.
  • ‫jobStats.parentGlobalQueryJobId: מזהה המשימה של משימת ההורה של השאילתה עם אחזור נתונים גלובלי. השדה הזה מאוכלס במשימות צאצא שבוצעו באזורים מרוחקים.
  • ‫jobStats.parentGlobalQueryJobLocation: המיקום של משימת ההורה של השאילתה עם אחזור נתונים גלובלי. השדה הזה מאוכלס במשימות צאצא שבוצעו באזורים מרוחקים.

חיפוש משימות צאצא מרוחקות של שאילתה עם אחזור נתונים גלובלי

כדי למצוא את כל המשימות המרוחקות של הצאצא שמשויכות לשאילתה גלובלית של הורה, אתם יכולים לשלוח שאילתה ליומני הביקורת באמצעות ניתוח יומנים או מערך נתונים של sink ביומן שיוצא:

SELECT
  timestamp,
  proto_payload.audit_log.resource_name AS resource_name,
  JSON_VALUE(proto_payload.audit_log.metadata.jobChange.job.jobConfig.queryConfig.query) AS query
FROM
  `PROJECT_ID.LOG_DATASET._AllLogs`
WHERE
  JSON_VALUE(proto_payload.audit_log.metadata.jobChange.job.jobStats.parentGlobalQueryJobId) = 'PARENT_JOB_ID';

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

  • PROJECT_ID: מזהה הפרויקט בענן של Google.
  • ‫LOG_DATASET: קבוצת הנתונים המקושרת ב-BigQuery לניתוח יומן או קבוצת הנתונים של יעד ה-sink ביומן.
  • ‫PARENT_JOB_ID: מזהה המשימה של משימת ההורה של השאילתה עם אחזור נתונים גלובלי.

תצוגות של INFORMATION_SCHEMA

אתם יכולים לשלוח שאילתות לתצוגות INFORMATION_SCHEMA.JOBS ו-INFORMATION_SCHEMA.JOBS_TIMELINE כדי לבדוק את המטא-נתונים של שאילתות עם אחזור נתונים גלובלי. העמודה global_query_info מכילה את השדות הבאים:

  • ‫parent_job_id: המזהה של משימת ההורה של השאילתה עם אחזור נתונים גלובלי באזור הראשי. השדה הזה מאוכלס בשאילתות משנה צאצא ובמשימות העתקה שבוצעו באזורים מרוחקים.
  • ‫parent_job_location: המיקום של משימת ההורה של השאילתה עם אחזור נתונים גלובלי.
  • ‫remote_regions: מערך של אזורים מרוחקים שהשאילתה מפנה אליהם. השדה הזה מאוכלס במשימת השאילתה הראשית עם אחזור נתונים גלובלי באזור הראשי.

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

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

SELECT
  job_id,
  creation_time,
  query,
  total_bytes_billed,
  global_query_info.remote_regions
FROM
  `region-REGION`.INFORMATION_SCHEMA.JOBS
WHERE
  ARRAY_LENGTH(global_query_info.remote_regions) > 0;

מחליפים את REGION באזור שבו בוצעה השאילתה עם אחזור נתונים גלובלי, למשל us-central1.

חיפוש משימות צאצא מרוחקות של שאילתה עם אחזור נתונים גלובלי

כדי למצוא את כל משימות הצאצאים המרוחקות שמשויכות לשאילתה עם אחזור נתונים גלובלי של הורה, שולחים שאילתה לתצוגה INFORMATION_SCHEMA.JOBS באזור המרוחק:

SELECT
  job_id,
  project_id,
  job_type,
  statement_type,
  total_bytes_billed,
  total_slot_ms
FROM
  `region-REMOTE_REGION`.INFORMATION_SCHEMA.JOBS
WHERE
  global_query_info.parent_job_id = 'PARENT_JOB_ID';

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

  • ‫REMOTE_REGION: האזור המרוחק שבו הופעלו שאילתת המשנה או משימת ההעתקה, למשל europe-west1.
  • ‫PARENT_JOB_ID: מזהה המשימה של משימת ההורה של השאילתה עם אחזור נתונים גלובלי.

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

כדי להשבית את השאילתות עם אחזור נתונים גלובלי בפרויקט או בארגון, משתמשים ב-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: שם האזור שבו רוצים להשבית את השאילתות עם אחזור נתונים גלובלי

יכול להיות שיעברו כמה דקות עד שהשינוי ייכנס לתוקף.

תמחור

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

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

מכסות

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

מגבלות

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