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