מבוא לטבלאות מסודרות באשכולות

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

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

איך פועל אשכול

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

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

כשמקבצים טבלה באמצעות כמה עמודות, סדר העמודות קובע אילו עמודות מקבלות עדיפות כש-BigQuery ממיין ומקבץ את הנתונים לבלוקים של אחסון, כמו בדוגמה הבאה. בטבלה 1 מוצג פריסת בלוק האחסון הלוגי של טבלה לא מקובצת. לעומת זאת, טבלה 2 מסודרת באשכולות רק לפי העמודה Country, ואילו טבלה 3 מסודרת באשכולות לפי כמה עמודות, Country ו-Status.

כדי לשפר את ביצועי השאילתות, BigQuery ממיין את הנתונים בטבלאות מסודרות באשכולות.

מתי כדאי להשתמש באשכולות

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

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

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

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

מידע נוסף זמין במאמר שילוב של טבלאות מחולקות למחיצות וטבלאות באשכולות.

סוגי עמודות וסדר באשכולות

בקטע הזה מתוארים סוגי העמודות ואיך סדר העמודות פועל באשכולות של טבלאות.

סוגי עמודות באשכול

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

  • BIGNUMERIC
  • BOOL
  • DATE
  • DATETIME
  • GEOGRAPHY
  • INT64
  • NUMERIC
  • RANGE
  • STRING
  • TIMESTAMP

למידע נוסף על סוגי נתונים, קראו את המאמר סוגי נתונים ב-GoogleSQL.

סדר העמודות באשכול

הסדר של עמודות מקובצות משפיע על ביצועי השאילתה. בדוגמה הבאה, הטבלה Orders מקובצת לפי סדר המיון של העמודות Order_Date,‏ Country ו-Status. העמודה הראשונה באשכול בדוגמה הזו היא Order_Date, ולכן שאילתה שמסננת לפי Order_Date ו-Country עוברת אופטימיזציה לאשכולות, ואילו שאילתה שמסננת רק לפי Country ו-Status לא עוברת אופטימיזציה.

שאילתות בטבלאות מסודרות באשכולות חייבות לכלול עמודות מסודרות באשכולות, לפי הסדר, החל מהראשונה.

חסימת גיזום

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

כשמריצים שאילתה על טבלה מסודרת באשכולות, והשאילתה כוללת מסנן על העמודות המסודרות באשכולות, BigQuery משתמש בביטוי המסנן ובמטא-נתונים של הבלוק כדי לצמצם את הבלוקים שנסרקים על ידי השאילתה. כך BigQuery יכול לסרוק רק את הבלוקים הרלוונטיים.

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

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

שילוב של טבלאות מקובצות לאשכולות וטבלאות מחולקות למחיצות

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

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

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

השוואה בין טבלאות שלא מקובצות לאשכולות או מחולקות למחיצות לבין טבלאות שכן מקובצות לאשכולות ומחולקות למחיצות.

דוגמה

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

מזהה המחיצה מזהה הבלוק הערך המינימלי של customer_id בבלוק הערך המקסימלי של customer_id בבלוק
20160501 B1 10000 19999
20160501 B2 20000 24999
20160502 B3 15000 17999
20160501 B4 22000 27999

אתם מריצים את השאילתה הבאה על הטבלה. השאילתה מכילה מסנן בעמודה customer_id.

SELECT
  SUM(totalSale)
FROM
  `mydataset.ClusteredSalesData`
WHERE
  customer_id BETWEEN 20000
  AND 23000
  AND DATE(timestamp) = "2016-05-01"

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

  • סורק את העמודות timestamp,‏ customer_id ו-totalSale בבלוקים B2 ו-B4.
  • מסיר את הבלוק B3 בגלל הפרדיקט של המסנן DATE(timestamp) = "2016-05-01" בעמודת החלוקה למחיצות timestamp.
  • מבטל את בלוק B1 בגלל הפרדיקט של המסנן customer_id BETWEEN 20000 AND 23000 בעמודת האשכולות customer_id.

קיבוץ מחדש אוטומטי

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

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

מגבלות

  • אפשר להשתמש רק ב-GoogleSQL כדי לשלוח שאילתות לטבלאות מסודרות באשכולות, ולכתוב תוצאות של שאילתות בטבלאות מסודרות באשכולות.
  • אפשר לציין עד ארבע עמודות אשכולות. אם אתם צריכים עמודות נוספות, כדאי לשלב בין אשכולות לחלוקה למחיצות.
  • כשמשתמשים בעמודות מסוג מוגדר STRING לצורך סידור באשכולות, BigQuery משתמש רק ב-1,024 התווים הראשונים כדי לאסוף את הנתונים לאשכולות. הערכים בעמודות יכולים להיות ארוכים יותר מ-1,024 תווים.
  • אם משנים טבלה קיימת שלא מסודרת באשכולות לטבלה מסודרת באשכולות, הנתונים הקיימים לא מסודרים באשכולות באופן אוטומטי. רק נתונים חדשים שמאוחסנים באמצעות העמודות המקובצות כפופים לקיבוץ מחדש אוטומטי. מידע נוסף על הגדרה מחדש של אשכולות בנתונים קיימים באמצעות הצהרת UPDATE זמין במאמר שינוי מפרט האשכולות.

מכסות ומגבלות של טבלאות מסודרות באשכולות

ב-BigQuery יש הגבלות על השימוש במשאבים משותפים של Google Cloud באמצעות מכסות ומגבלות, כולל מגבלות על פעולות מסוימות בטבלאות או על מספר המשימות שמופעלות ביום.

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

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

תמחור של טבלאות מסודרות באשכולות

כשיוצרים טבלאות מסודרות באשכולות ב-BigQuery ומשתמשים בהן, החיובים מבוססים על כמות הנתונים שמאוחסנים בטבלאות ועל השאילתות שמריצים על הנתונים. למידע נוסף, ראו תמחור האחסון ותמחור השאילתות.

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

במאמר הערכת עלויות של אחסון ושאילתות תוכלו לקרוא דוגמה מפורטת לתמחור של טבלה מסודרת באשכולות.

אבטחת טבלאות

כדי לשלוט בגישה לטבלאות ב-BigQuery, קראו את המאמר בקרת גישה למשאבים באמצעות IAM.

המאמרים הבאים