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

כשמבצעים שאילתה בטבלה מסודרת באשכולות, לא מקבלים אומדן מדויק של עלות השאילתה לפני ביצוע השאילתה, כי מספר בלוקי האחסון שצריך לסרוק לא ידוע לפני ביצוע השאילתה. העלות הסופית נקבעת אחרי השלמת הביצוע של השאילתה, והיא מבוססת על בלוקי האחסון הספציפיים שנסרקו.
השימוש באשכולות לא מבטיח צמצום במספר המשבצות שנדרשות לשאילתות בטבלה.
מתי כדאי להשתמש באשכולות
האשכולות קובעים איך הטבלה מאוחסנת, ולכן זו בדרך כלל אפשרות טובה לשיפור הביצועים של השאילתות. לכן, תמיד כדאי לשקול שימוש באשכולות, כי יש להם יתרונות רבים:
- בדרך כלל, כדאי להשתמש באשכולות בטבלאות לא מחולקות שגדולות מ-64MB. באופן דומה, סביר להניח שחלוקת טבלאות למחיצות שגדולות מ-64MB תפיק תועלת מאשכולות. אפשר לבצע אשכולות של טבלאות או מחיצות קטנות יותר, אבל בדרך כלל השיפור בביצועים זניח.
- אם השאילתות שלכם בדרך כלל מסננות עמודות מסוימות, האשכולות מאיצים את השאילתות כי השאילתה סורקת רק את הבלוקים שתואמים למסנן.
- אם השאילתות שלכם מסננות עמודות עם הרבה ערכים נפרדים (עוצמה גבוהה), האשכולות מאיצים את השאילתות האלה כי הם מספקים ל-BigQuery מטא-נתונים מפורטים לגבי המקום שממנו צריך לקבל את נתוני הקלט.
- האשכולות מאפשרים להתאים את הגודל של בלוקי האחסון הבסיסיים של הטבלה באופן דינמי, בהתאם לגודל הטבלה.
בנוסף לאשכולות, כדאי לשקול חלוקה למחיצות (partitioning) של הטבלה. בגישה הזו, קודם מחלקים את הנתונים למחיצות, ואז מקבצים את הנתונים בכל מחיצה לפי עמודות האשכול. כדאי להשתמש בגישה הזו במקרים הבאים:
- לפני שמריצים שאילתה, צריך לקבל אומדן מדויק של עלות השאילתה. אפשר לקבוע את העלות של שאילתות בטבלאות מקובצות רק אחרי שמריצים את השאילתה. חלוקה למחיצות מספקת הערכות מפורטות של עלויות השאילתות לפני שמריצים שאילתה.
- החלוקה למחיצות של הטבלה יוצרת גודל ממוצע של מחיצה של לפחות 10GB לכל מחיצה. יצירה של הרבה מחיצות קטנות מגדילה את המטא-נתונים של הטבלה, ויכולה להשפיע על זמני הגישה למטא-נתונים כשמריצים שאילתה בטבלה.
- אתם צריכים לעדכן את הטבלה באופן שוטף, אבל עדיין רוצים ליהנות מתמחור אחסון לטווח ארוך. החלוקה למחיצות מאפשרת להתייחס לכל מחיצה בנפרד לצורך קביעת הזכאות לתמחור לטווח ארוך. אם הטבלה לא מחולקת למחיצות, אסור לערוך אותה במשך 90 ימים רצופים כדי שהיא תיחשב כטבלה שמתאימה לתמחור לטווח ארוך.
מידע נוסף זמין במאמר בנושא שילוב של טבלאות מקובצות וטבלאות מחולקות.
סוגי עמודות וסדר באשכול
בקטע הזה מתוארים סוגי העמודות ואיך סדר העמודות פועל באשכולות של טבלאות.
סוגי עמודות באשכול
עמודות של אשכולות חייבות להיות ברמה העליונה, לא חוזרות, ומהסוגים הבאים:
BIGNUMERICBOOLDATEDATETIMEGEOGRAPHYINT64NUMERICRANGESTRINGTIMESTAMP
מידע נוסף על סוגי נתונים זמין במאמר בנושא סוגי נתונים ב-GoogleSQL.
סדר העמודות באשכול
הסדר של העמודות המקובצות משפיע על ביצועי השאילתה. בדוגמה הבאה, הטבלה Orders מקובצת באמצעות סדר מיון של העמודות Order_Date, Country ו-Status. העמודה המסודרת באשכולות הראשונה בדוגמה הזו היא Order_Date, ולכן שאילתה שמסננת לפי Order_Date וCountry עוברת אופטימיזציה לאשכול, בעוד ששאילתה שמסננת רק לפי Country וStatus לא עוברת אופטימיזציה.

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

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