שאילתות מאוחדות ב-Spanner
שאילתות לכמה מסדי נתונים ב-BigQuery מאפשרות לשלוח שאילתות על נתונים שנמצאים ב-Spanner בזמן אמת, בלי להעתיק או להעביר את הנתונים. כדי להריץ שאילתות על נתונים ב-Spanner, אתם יכולים ליצור קבוצת נתונים חיצונית ב-Spanner או להשתמש בפונקציה EXTERNAL_QUERY.
הסבר על תפקידים והרשאות
כששולחים שאילתות ל-Spanner מ-BigQuery, יש שני סוגים שונים של תפקידים שמנהלים את הגישה ברמות שונות.
תפקידי IAM: התפקידים האלה קובעים את הגישה למשאביGoogle Cloud , כולל מכונות ומסדי נתונים של Spanner. הן קובעות לאילו חשבונות משתמשים יש גישה לשירות Spanner, ואילו פעולות הם יכולים לבצע ברמת המכונה או מסד הנתונים, כמו התחברות, קריאת נתונים או ניהול. אתם יכולים לנהל את התפקידים של ניהול הזהויות והרשאות הגישה (IAM) באמצעות מסוף IAM או Google Cloud CLI. לדוגמה,
roles/bigquery.connectionUserו-roles/spanner.databaseReader. למידע נוסף, קראו את המאמרים תפקידי IAM ב-Spanner ומתן הרשאות.תפקידים במסד נתונים ב-Spanner: התפקידים האלה מוגדרים בתוך מסד נתונים ב-Spanner באמצעות הצהרות DDL כמו
CREATE ROLEו-GRANT. הם שולטים בגישה פרטנית לאובייקטים ספציפיים של סכימה, כמו טבלאות, עמודות ותצוגות, בתוך מסד הנתונים. זה חלק מבקרת גישה פרטנית (FGAC). אם בארגון שלכם משתמשים ב-FGAC כדי לנהל את ההרשאות בתוך מסד הנתונים, אתם צריכים להשתמש בתפקיד במסד הנתונים.
איך בודקים אם אתם משתמשים ב-FGAC
כדי לקבוע אילו הרשאות צריך לבקש, אתם צריכים לקבוע אם אתם משתמשים ב-FGAC. כדי לעשות את זה, צריך לשאול את האדמין של מסד הנתונים ב-Spanner אם הגישה למסד הנתונים ב-Spanner מנוהלת באמצעות בקרת גישה מפורטת.
אם האדמין נותן לחשבון שלכם הרשאות באמצעות הקצאה לתפקיד ספציפי במסד הנתונים של Spanner (לדוגמה, באמצעות הקצאה של תפקיד ה-IAM roles/spanner.databaseRoleUser למשאב של תפקיד במסד הנתונים), אתם כנראה משתמשים ב-FGAC. במקרה כזה, אתם צריכים לדעת את השמות של התפקידים במסד הנתונים שבהם אתם יכולים להשתמש. צריך להגדיר את החיבור ל-BigQuery כך שישתמש באחד מהתפקידים האלה במסד הנתונים.
אם האדמין נותן לחשבון שלכם תפקידי IAM רחבים יותר ברמת מסד הנתונים, כמו roles/spanner.databaseReader, כנראה שאתם לא משתמשים ב-FGAC. במקרה כזה, לא צריך להשתמש בתפקיד ספציפי במסד הנתונים כשמתחברים.
השוואה בין בקשות לתפקידים
למרות ש-IAM שולט בגישה למשאב של מסד הנתונים עצמו, התפקידים במסד הנתונים של Spanner שולטים בהרשאות לאובייקטים בתוך מסד הנתונים.
כדי להשתמש בתפקיד במסד נתונים עם FGAC, בדרך כלל צריך את ההרשאות הבאות:
- ההרשאה
spanner.databases.useRoleBasedAccessב-IAM, שבדרך כלל ניתנת באמצעות התפקידroles/spanner.fineGrainedAccessUser. - הרשאה להשתמש בתפקיד הספציפי במסד הנתונים, שניתנת באמצעות התפקיד
roles/spanner.databaseRoleUserעם תנאי IAM.
מידע נוסף על הגדרת ההרשאות האלה זמין במאמר הגדרת FGAC.
שימוש במערכי נתונים חיצוניים
הדרך הפשוטה ביותר לשלוח שאילתות לטבלאות Spanner היא ליצור מערך נתונים חיצוני. אחרי שיוצרים את מערך הנתונים החיצוני, הטבלאות ממסד הנתונים התואם של Spanner מופיעות ב-BigQuery ואפשר להשתמש בהן בשאילתות – לדוגמה, בצירופים, באיחודים או בשאילתות משנה. עם זאת, לא מועברים נתונים מ-Spanner לאחסון ב-BigQuery.
אם יוצרים מערך נתונים חיצוני, לא צריך ליצור חיבור כדי לשלוח שאילתות לנתונים ב-Spanner.
שימוש בפונקציה EXTERNAL_QUERY
כמו במסדי נתונים מאוחדים אחרים, אתם יכולים לשלוח שאילתות לנתונים ב-Spanner באמצעות הפונקציה EXTERNAL_QUERY. האפשרות הזו יכולה להיות שימושית אם אתם רוצים יותר שליטה על הפרמטרים של החיבור.
לפני שמתחילים
- מוודאים שהאדמין ב-BigQuery יצר חיבור ל-Spanner ושיתף אותו איתכם. איך בוחרים את החיבור המתאים
- כדי לקבל את ההרשאות שנדרשות לשליחת שאילתות למכונה של Spanner, צריך לבקש מהאדמין להקצות לכם את התפקיד "משתמש בחיבורים של BigQuery" (
roles/bigquery.connectionUser) ב-IAM בחיבור. אתם צריכים גם הרשאות מתאימות במסד הנתונים של Spanner, בהתאם לאם אתם משתמשי FGAC.- אם אתם משתמשים בבקרת גישה פרטנית:
- אתם צריכים את התפקידים ב-IAM שנדרשים כדי להשתמש ב-FGAC. התפקידים האלה הם בדרך כלל
roles/spanner.fineGrainedAccessUserו-roles/spanner.databaseRoleUser. התפקידים משמשים עם תנאי שמציין את התפקיד במסד הנתונים. - לתפקיד במסד הנתונים ב-Spanner שאתם מציינים בחיבור צריכה להיות הרשאת
SELECTבכל אובייקטי הסכימה שהשאילתות שלכם מפנות אליהם. מנהל מסד הנתונים נותן הרשאות באמצעות הצהרת ה-DDLGRANT(או ההצהרה המקבילה ב-PostgreSQL).
- אתם צריכים את התפקידים ב-IAM שנדרשים כדי להשתמש ב-FGAC. התפקידים האלה הם בדרך כלל
- אם אתם לא משתמשים בבקרת גישה פרטנית, אתם צריכים את תפקיד ה-IAM "קורא מסד נתונים ב-Spanner" (
roles/spanner.databaseReader) במסד הנתונים.
למידע על הקצאת תפקידי IAM, קראו את המאמר ניהול הגישה לפרויקטים, לתיקיות ולארגונים.
- אם אתם משתמשים בבקרת גישה פרטנית:
בחירת החיבור המתאים
אם אתם משתמשים בבקרת גישה מפורטת (FGAC) ב-Spanner, כשאתם מריצים שאילתה לכמה מסדי נתונים עם פונקציית EXTERNAL_QUERY, אתם צריכים להשתמש בחיבור ל-Spanner שמציין תפקיד במסד הנתונים. התפקיד הזה במסד הנתונים הוא חלק מהגדרת ה-FGAC במסד הנתונים של Spanner, והוא נפרד מתפקידי ה-IAM. אחרי זה, כל השאילתות שתריצו באמצעות החיבור הזה ישתמשו בהרשאות שניתנו לתפקיד הזה במסד הנתונים.
אם אתם משתמשים בחיבור שלא מצוין בו תפקיד במסד הנתונים, אתם צריכים את תפקידי ה-IAM שמצוינים בקטע לפני שמתחילים.
נתוני שאילתות
כדי לשלוח שאילתה לכמה מסדי נתונים ל-Spanner משאילתת GoogleSQL, משתמשים בפונקציה EXTERNAL_QUERY.
מנסחים את השאילתה ב-Spanner ב-GoogleSQL או ב-PostgreSQL, בהתאם לניב שצוין במסד הנתונים.
בדוגמה הבאה, מתבצעת שאילתה לכמה מסדי נתונים במסד נתונים של Spanner בשם orders, והתוצאות מצורפות לטבלה ב-BigQuery בשם mydataset.customers:
SELECT c.customer_id, c.name, rq.first_order_date FROM mydataset.customers AS c LEFT OUTER JOIN EXTERNAL_QUERY( 'my-project.us.example-db', '''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;
Spanner Data Boost
Data Boost הוא פיצ'ר מנוהל בלי שרת (serverless) שמספק משאבי מחשוב נפרדים לעומסי עבודה נתמכים ב-Spanner. בעזרת Data Boost אתם יכולים להריץ שאילתות של ניתוח נתונים ולייצא נתונים, עם השפעה מינימלית על עומסי העבודה הקיימים במכונה המוקצית של Spanner. בעזרת Data Boost אתם יכולים להריץ שאילתות לכמה מסדי נתונים עם קיבולת מחשוב עצמאית, בנפרד מהמכונות שהוקצו לכם, כדי לא להשפיע על עומסי העבודה הקיימים ב-Spanner. התכונה Data Boost שימושית במיוחד כשמריצים שאילתות אד-הוק מורכבות, או כשרוצים לעבד כמויות גדולות של נתונים בלי להשפיע על עומס העבודה הקיים ב-Spanner. הפעלת שאילתות לכמה מסדי נתונים באמצעות Data Boost יכולה להפחית משמעותית את צריכת המעבד (CPU), ובמקרים מסוימים גם את זמן האחזור של השאילתות.
לפני שמתחילים
כדי לקבל את ההרשאה שנדרשת כדי לאפשר גישה ל-Data Boost, בקשו מהאדמין לתת לכם את התפקיד קריאה ממסד נתונים של Cloud Spanner עם DataBoost (roles/spanner.databaseReaderWithDataBoost) ב-IAM במסד הנתונים של Spanner.
כדי לקרוא הסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
התפקיד המוגדר מראש הזה כולל את ההרשאה spanner.databases.useDataBoost, שנדרשת כדי לאפשר גישה ל-Data Boost.
יכול להיות שתוכלו לקבל את ההרשאה הזו גם בתפקידים בהתאמה אישית או בתפקידים מוגדרים מראש.
התפקיד roles/spanner.databaseReaderWithDataBoost ב-IAM נותן הרשאה להשתמש ב-Data Boost. התפקיד הזה נדרש בנוסף להרשאות הבסיסיות שצריך כדי לקרוא נתונים, כמו roles/spanner.databaseReader למשתמשים ללא FGAC או הרשאות FGAC מתאימות.
כשמשתמשים במערכי נתונים חיצוניים עם Spanner, תמיד נעשה שימוש ב-Data Boost ולכן נדרשת ההרשאה spanner.databases.useDataBoost.
הפעלת Data Boost
כשמשתמשים במערכי נתונים חיצוניים, תמיד נעשה שימוש ב-Data Boost ואין צורך להפעיל אותו ידנית.
כדי להשתמש ב-Data Boost לשאילתות ב-EXTERNAL_QUERY, צריך להפעיל אותו כשיוצרים חיבור שמשמש את השאילתה.
קריאת נתונים במקביל
Spanner יכול לחלק שאילתות מסוימות לחלקים קטנים יותר, או למחיצות, ולאחזר את המחיצות במקביל. למידע נוסף, כולל רשימת מגבלות, קראו את המאמר קריאת נתונים במקביל במסמכי התיעוד של Spanner.
כדי לראות את תוכנית הביצוע של שאילתת Spanner, קראו את המאמר הסבר על האופן שבו Spanner מריץ שאילתות.
כשמריצים שאילתות לכמה מסדי נתונים עם מערכי נתונים חיצוניים, תמיד נעשה שימוש באפשרות "קריאת נתונים במקביל".
כדי להפעיל קריאות במקביל כשמשתמשים בEXTERNAL_QUERY, צריך להפעיל אותן כשיוצרים את החיבור.
ניהול העדיפות של הרצת השאילתות
כשמריצים שאילתות לכמה מסדי נתונים באמצעות פונקציית EXTERNAL_QUERY, אפשר להקצות עדיפות (high, medium או low) לשאילתות ספציפיות על ידי ציון האפשרות query_execution_priority:
SELECT * FROM EXTERNAL_QUERY( 'my-project.us.example-db', '''SELECT customer_id, MIN(order_date) AS first_order_date FROM orders GROUP BY customer_id''', '{"query_execution_priority":"high"}');
עדיפות ברירת המחדל היא medium.
שאילתות בעדיפות high מתחרות בתנועה של עסקאות. שאילתות בעדיפות low מבוצעות כמיטב היכולת, ויכול להיות שהן יופסקו על ידי עומס ברקע, למשל גיבויים מתוזמנים.
כשמריצים שאילתות לכמה מסדי נתונים עם מערכי נתונים חיצוניים, לכל השאילתות תמיד יש עדיפות medium.
הצגת סכימה של טבלת Spanner
אם אתם משתמשים במערכי נתונים חיצוניים, הטבלאות של Spanner מופיעות ישירות ב-BigQuery Studio ואתם יכולים לראות את הסכימות שלהן.
עם זאת, אתם יכולים לראות את הסכימות גם בלי להגדיר מערכי נתונים חיצוניים. אפשר גם להשתמש בפונקציה EXTERNAL_QUERY כדי לשלוח שאילתות לתצוגות של information_schema, כדי לגשת למטא-נתונים של מסד הנתונים. הדוגמה הבאה מחזירה מידע על העמודות בטבלה MyTable:
מסד נתונים של Google SQL
SELECT * FROM EXTERNAL_QUERY( 'my-project.us.example-db', '''SELECT t.column_name, t.spanner_type, t.is_nullable FROM information_schema.columns AS t WHERE t.table_catalog = '' AND t.table_schema = '' AND t.table_name = 'MyTable' ORDER BY t.ordinal_position ''');
מסד נתונים של PostgreSQL
SELECT * from EXTERNAL_QUERY( 'my-project.us.postgresql-example-db', '''SELECT t.column_name, t.data_type, t.is_nullable FROM information_schema.columns AS t WHERE t.table_schema = 'public' AND t.table_name = 'MyTable' ORDER BY t.ordinal_position''');
מידע נוסף זמין במאמרי העזרה הבאים בנושא סכימת מידע ב-Spanner:
תמחור
- ב-BigQuery, חל התמחור הרגיל של שאילתות לכמה מסדי נתונים.
- בצד של Spanner, השאילתות כפופות לתמחור של Spanner.
שאילתות בכמה אזורים
ב-BigQuery יש תמיכה בשאילתות לכמה מסדי נתונים, שבהן המכונות של Spanner ומערכי הנתונים של BigQuery נמצאים באזורים שונים. השאילתות האלה כרוכות בחיוב נוסף על העברת נתונים ב-Spanner. למידע נוסף, קראו את התמחור של Spanner.
החיוב על העברת הנתונים מתבצע על סמך המק"טים הבאים:
- תעבורת נתונים יוצאת (egress) בין אזורים שונים באותו אזור ברשת
- Network Inter-Region Data Transfer Out to the Same Continent
- העברת נתונים יוצאת בין אזורים ברשת ליבשת אחרת
החיוב על העברת נתונים מבוסס על האזור ב-BigQuery שבו מריצים את השאילתה, ועל האזור הקרוב ביותר ב-Spanner שיש בו רפליקות לקריאה וכתיבה או לקריאה בלבד.
בהגדרות של BigQuery במספר אזורים (US או EU), עלויות העברת הנתונים מ-Spanner נקבעות באופן הבא:
- BigQuery
USבמספר אזורים: Spanner באזורus-central1 - BigQuery
EUבמספר אזורים: Spanner באזורeurope-west1
לדוגמה:
- BigQuery (במספר אזורים של
US) ו-Spanner (us-central1): העלויות חלות על העברת נתונים בתוך אותו אזור. - BigQuery (במספר אזורים ב-
US) ו-Spanner (us-west4): העלויות חלות על העברת נתונים בין אזורים באותה יבשת.
פתרון בעיות
בקטע הזה מוסבר איך לפתור בעיות שעלולות לקרות כששולחים שאילתה לכמה מסדי נתונים ב-Spanner.
- הבעיה: אי אפשר לחלק את השאילתה למחיצות ברמה הבסיסית (root).
- פתרון: אם מגדירים את החיבור לקריאת נתונים במקביל, האופרטור הראשון בתוכנית הביצוע של השאילתה חייב להיות איחוד מבוזר, או שבתוכנית הביצוע לא יהיו איחודים מבוזרים. כדי לפתור את השגיאה, צריך להציג את תוכנית ההפעלה של השאילתה ולכתוב אותה מחדש. מידע נוסף זמין במאמר הסבר על האופן שבו Spanner מריץ שאילתות.
- הבעיה: חריגה מהמועד האחרון.
- פתרון: בוחרים באפשרות קריאת נתונים במקביל וכותבים מחדש את השאילתה כך שתהיה ניתנת לחלוקה למחיצות ברמה הבסיסית (root). למידע נוסף, קראו את המאמר איך Spanner מריץ שאילתות.