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

כשמבצעים שאילתה בטבלה מסודרת באשכולות, לא מקבלים הערכה מדויקת של עלות השאילתה לפני ביצוע השאילתה, כי מספר בלוקי האחסון שצריך לסרוק לא ידוע לפני ביצוע השאילתה. העלות הסופית נקבעת אחרי השלמת הביצוע של השאילתה, והיא מבוססת על בלוקי האחסון הספציפיים שנסרקו.
השימוש באשכולות לא מבטיח צמצום במספר המשבצות שנדרשות לשאילתות בטבלה.
מתי כדאי להשתמש באשכולות
האשכולות קובעים איך הטבלה מאוחסנת, ולכן זו בדרך כלל אפשרות טובה לשיפור הביצועים של השאילתות. לכן, תמיד כדאי לשקול שימוש באשכולות, כי יש להם יתרונות רבים:
- בדרך כלל, כדאי להשתמש באשכולות בטבלאות לא מחולקות שגדולות מ-64MB. באופן דומה, סביר להניח שגם חלוקת טבלאות למחיצות שגדולות מ-64MB תפיק תועלת מאשכולות. אפשר לבצע אשכולות של טבלאות או מחיצות קטנות יותר, אבל בדרך כלל השיפור בביצועים זניח.
- אם השאילתות שלכם בדרך כלל מסננות עמודות מסוימות, האשכולות מאיצים את השאילתות כי השאילתה סורקת רק את הבלוקים שתואמים לסינון.
- אם השאילתות שלכם מסננות עמודות עם הרבה ערכים נפרדים (עוצמה גבוהה), האשכולות מאיצים את השאילתות האלה על ידי אספקת מטא-נתונים מפורטים ל-BigQuery לגבי המיקום של נתוני הקלט.
- האפשרות 'אשכולות' מאפשרת לשנות את הגודל של בלוקי האחסון הבסיסיים בטבלה באופן דינמי, בהתאם לגודל הטבלה.
בנוסף לאשכולות, כדאי לשקול חלוקה של הטבלה. בגישה הזו, קודם מחלקים את הנתונים למחיצות, ואז מקבצים את הנתונים בכל מחיצה לפי עמודות האשכול. כדאי להשתמש בגישה הזו במקרים הבאים:
- לפני שמריצים שאילתה, צריך לקבל אומדן מדויק של עלות השאילתה. אפשר לקבוע את העלות של שאילתות בטבלאות מקובצות רק אחרי שמריצים את השאילתה. חלוקה למחיצות מספקת הערכות מדויקות של עלות השאילתה לפני שמריצים אותה.
- חלוקת הטבלה למחיצות תגרום לכך שגודל המחיצה הממוצע יהיה לפחות 10GB לכל מחיצה. יצירה של מחיצות קטנות רבות מגדילה את המטא-נתונים של הטבלה, ויכולה להשפיע על זמני הגישה למטא-נתונים כשמבצעים שאילתה בטבלה.
- אתם צריכים לעדכן את הטבלה באופן שוטף, אבל עדיין רוצים ליהנות מתמחור אחסון לטווח ארוך. החלוקה למחיצות מאפשרת להתייחס לכל מחיצה בנפרד לצורך עמידה בדרישות של תמחור לטווח ארוך. אם הטבלה לא מחולקת למחיצות, אסור לערוך אותה במשך 90 ימים רצופים כדי שהיא תיחשב כמתאימה לתמחור לטווח ארוך.
מידע נוסף זמין במאמר בנושא שילוב של טבלאות מקובצות וטבלאות עם חלוקה למחיצות.
סוגי עמודות וסדר באשכול
בקטע הזה מתוארים סוגי העמודות ואיך סדר העמודות פועל באשכולות של טבלאות.
סוגי עמודות באשכול
עמודות של אשכולות צריכות להיות עמודות ברמה העליונה, לא חוזרות, מאחד מהסוגים הבאים:
BIGNUMERICBOOLDATEDATETIMEGEOGRAPHYINT64NUMERICRANGESTRINGTIMESTAMP
מידע נוסף על סוגי נתונים זמין במאמר בנושא סוגי נתונים ב-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.
המאמרים הבאים
- מידע נוסף על יצירה ושימוש בטבלאות מקובצות זמין במאמר יצירה ושימוש בטבלאות מקובצות.
- מידע על שליחת שאילתות לטבלאות מסודרות באשכולות זמין במאמר בנושא שליחת שאילתות לטבלאות מסודרות באשכולות.