דגימת טבלה

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

שימוש בדגימת טבלאות

כדי להשתמש בדגימת טבלה בשאילתה, צריך לכלול את הסעיף TABLESAMPLE. לדוגמה, השאילתה הבאה בוחרת כ-10% מהנתונים בטבלה:

SELECT * FROM dataset.my_table TABLESAMPLE SYSTEM (10 PERCENT)

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

אפשר לשלב את הסעיף TABLESAMPLE עם תנאי בחירה אחרים. בדוגמה הבאה, המערכת דוגמת כ-50% מהטבלה ואז מחילה סעיף WHERE:

SELECT *
FROM dataset.my_table TABLESAMPLE SYSTEM (50 PERCENT)
WHERE customer_id = 1

בדוגמה הבאה משולב סעיף TABLESAMPLE עם סעיף JOIN:

SELECT *
FROM dataset.table1 T1 TABLESAMPLE SYSTEM (10 PERCENT)
JOIN dataset.table2 T2 TABLESAMPLE SYSTEM (20 PERCENT) USING (customer_id)

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

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

bq query --use_legacy_sql=false --parameter=percent:INT64:29 \
    'SELECT * FROM `dataset.my_table` TABLESAMPLE SYSTEM (@percent PERCENT)`

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

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

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

בדוגמה הבאה, המערכת קוראת כ-20% מבלוקי הנתונים מהאחסון, ואז בוחרת באופן אקראי 10% מהשורות בבלוקים האלה:

SELECT * FROM dataset.my_table TABLESAMPLE SYSTEM (20 PERCENT)
WHERE rand() < 0.1

טבלאות חיצוניות

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

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

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

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

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

מגבלות

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

תמחור של דגימת טבלאות

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