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

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

ב-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.

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