קריאת נתונים באמצעות BigQuery API עם חלוקה לעמודים
במסמך הזה מוסבר איך לקרוא נתונים של טבלאות ותוצאות של שאילתות באמצעות BigQuery API עם חלוקה לעמודים.
מעבר בין תוצאות באמצעות ה-API
כל השיטות של *collection*.list מחזירות תוצאות עם מספור דפים בנסיבות מסוימות. המאפיין maxResults מגביל את מספר התוצאות בדף.
| Method | קריטריונים של עימוד | ערך ברירת המחדל של maxResults |
ערך מקסימלי של maxResults |
ערך מקסימלי של maxFieldValues |
|---|---|---|---|---|
tabledata.list |
הפונקציה מחזירה תוצאות עם עימוד אם גודל התגובה הוא יותר מ-10 MB1 של נתונים או יותר מ-maxResults שורות. |
ללא הגבלה | ללא הגבלה | ללא הגבלה |
כל שאר השיטות של *collection*.list |
הפונקציה מחזירה תוצאות עם חלוקה לדפים אם התשובה מכילה יותר מ-maxResults שורות וגם פחות מהמגבלות המקסימליות. |
10,000 | ללא הגבלה | 300,000 |
אם התוצאה גדולה מהמגבלה של בייט או שדה, התוצאה נחתכת כדי להתאים למגבלה. אם שורה אחת גדולה ממגבלת הבייטים או השדות, הפונקציה tabledata.list יכולה להחזיר עד 100 MB של נתונים1, שזה בהתאם למגבלת הגודל המקסימלי של שורה בתוצאות של שאילתות.
אין גודל מינימלי לכל דף, ויכול להיות שדפים מסוימים יחזירו יותר שורות מאחרים.
1גודל השורה הוא משוער, כי הגודל מבוסס על הייצוג הפנימי של נתוני השורה. הגבלת הגודל המקסימלי של שורה נאכפת בשלבים מסוימים של ביצוע שאילתת עבודה.
jobs.getQueryResults יכול להחזיר 20 MB של נתונים, אלא אם ביקשתם במפורש יותר נתונים דרך התמיכה.
דף הוא קבוצת משנה של המספר הכולל של השורות. אם התוצאות שלכם כוללות יותר מדף אחד של נתונים, נתוני התוצאות כוללים את המאפיין pageToken. כדי לאחזר את דף התוצאות הבא, צריך לבצע עוד קריאה ולכלול את ערך האסימון כפרמטר של כתובת URL בשם .list
pageToken
השיטה tabledata.list, שמשמשת להצגת נתוני טבלאות בדפים, משתמשת בערך היסט של שורה או באסימון דף. מידע נוסף זמין במאמר עיון בנתוני טבלה.
חזרה על התוצאות של ספריות הלקוח
ספריות הלקוח בענן מטפלות בפרטים ברמה הנמוכה של חלוקת ה-API לדפים, ומספקות חוויה שדומה יותר לאיטרטור, שמפשטת את האינטראקציה עם האלמנטים האישיים בתגובות של הדף.
בדוגמאות הבאות מוסבר איך להשתמש בהחלפה כדי לעבור בין דפים בנתונים של טבלה ב-BigQuery.
C#
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי C#הוראות ההגדרה שבמדריך למתחילים של BigQuery באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של BigQuery C# API.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
Java
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי Javaהוראות ההגדרה שבמדריך למתחילים של BigQuery באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של BigQuery Java API.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
Go
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי Goהוראות ההגדרה שבמדריך למתחילים של BigQuery באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של BigQuery Go API.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
ב ספריות הלקוח של Cloud ל-Go, החלוקה לדפים מתבצעת כברירת מחדל באופן אוטומטי, כך שלא צריך להטמיע אותה בעצמכם. לדוגמה:
Node.js
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי Node.jsהוראות ההגדרה שבמדריך למתחילים של BigQuery באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של BigQuery Node.js API.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
ספריות הלקוח של Cloud ל-Node.js מבצעות אוטומטית חלוקה לדפים כברירת מחדל, כך שלא צריך להטמיע חלוקה לדפים בעצמכם. לדוגמה:
PHP
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי PHPהוראות ההגדרה שבמדריך למתחילים של BigQuery באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של BigQuery PHP API.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
החלוקה לדפים מתבצעת באופן אוטומטי בספריות הלקוח של Cloud עבור PHP באמצעות פונקציית הגנרטור rows, שמביאה את הדף הבא של התוצאות במהלך האיטרציה.
Python
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי Pythonהוראות ההגדרה שבמדריך למתחילים של BigQuery באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של BigQuery Python API.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
ספריות הלקוח של Cloud לשימוש ב-Python מחלקות לדפים באופן אוטומטי כברירת מחדל, כך שלא צריך להטמיע חלוקה לדפים בעצמכם. למשל:
Ruby
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי Rubyהוראות ההגדרה שבמדריך למתחילים של BigQuery באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של BigQuery Ruby API.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
החלוקה לדפים מתבצעת באופן אוטומטי בספריות הלקוח ב-Cloud עבור Ruby באמצעות Table#data ו-Data#next.
בקשה של דפים שרירותיים והימנעות משיחות מיותרות לרשימה
כשמדפדפים אחורה או קופצים לדפים שרירותיים באמצעות ערכים ששמורים במטמון, יכול להיות שהנתונים בדפים השתנו מאז הצפייה האחרונה בהם, אבל אין אינדיקציה ברורה לכך שהנתונים השתנו.pageToken כדי למנוע את הבעיה הזו, אפשר להשתמש במאפיין etag.
כל method collection.list (חוץ מ-Tabledata) מחזירה מאפיין etag בתוצאה. המאפיין הזה הוא גיבוב של תוצאות הדף, שאפשר להשתמש בו כדי לבדוק אם הדף השתנה מאז הבקשה האחרונה. כששולחים בקשה ל-BigQuery עם ערך ETag, המערכת משווה את הערך הזה לערך ETag שמוחזר על ידי ה-API, ומגיבה בהתאם לתוצאת ההשוואה. כדי להימנע מקריאות מיותרות לרשימה, אפשר להשתמש ב-ETags באופן הבא:
כדי להחזיר ערכים של רשימה אם הערכים השתנו.
אם רוצים לקבל דף של ערכי רשימה רק אם הערכים השתנו, אפשר לבצע קריאה לרשימה עם ETag שמאוחסן מראש באמצעות הכותרת HTTP if-none-match. אם ה-ETag שסיפקתם לא תואם ל-ETag בשרת, BigQuery מחזיר דף של ערכי רשימה חדשים. אם תגי ה-ETag זהים, BigQuery מחזיר קוד סטטוס
HTTP 304 Not Modifiedוללא ערכים. דוגמה לכך היא דף אינטרנט שבו המשתמשים ממלאים מעת לעת מידע שמאוחסן ב-BigQuery. אם לא חלו שינויים בנתונים, אפשר להימנע מביצוע קריאות מיותרות לרשימה ב-BigQuery באמצעות הכותרת if-none-match עם תגי ETags.כדי להחזיר ערכים של רשימה אם הערכים לא השתנו.
אם רוצים להחזיר דף של ערכי רשימה רק אם ערכי הרשימה לא השתנו, אפשר להשתמש בכותרת HTTP 'if-match'. המערכת של BigQuery משווה את ערכי ה-ETag ומחזירה את דף התוצאות אם התוצאות לא השתנו, או מחזירה את התוצאה 412 Precondition Failed (התנאי המוקדם נכשל) אם הדף השתנה.
מעבר בין דפים בתוצאות של שאילתות
כל שאילתה כותבת לטבלת יעד. אם לא מציינים טבלת יעד, BigQuery API מאכלס אוטומטית את מאפיין טבלת היעד בהפניה לטבלה זמנית אנונימית.
API
קוראים את השדה jobs.config.query.destinationTable כדי לדעת לאיזו טבלה נכתבו תוצאות השאילתה.
מתקשרים אל tabledata.list כדי לקרוא את תוצאות השאילתה.
Java
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי Javaהוראות ההגדרה שבמדריך למתחילים של BigQuery באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של BigQuery Java API.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
כדי להגדיר את מספר השורות שיוחזרו בכל דף, משתמשים בGetQueryResults job ומגדירים את האפשרות pageSize של QueryResultsOption object שמעבירים, כמו בדוגמה הבאה:
TableResult result = job.getQueryResults();
QueryResultsOption queryResultsOption = QueryResultsOption.pageSize(20);
TableResult result = job.getQueryResults(queryResultsOption);
Node.js
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי Node.jsהוראות ההגדרה שבמדריך למתחילים של BigQuery באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של BigQuery Node.js API.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
Python
השיטה
QueryJob.result
מחזירה אובייקט שניתן לחזור עליו של תוצאות השאילתה. לחלופין,
- מומלץ לקרוא את הנכס
QueryJob.destination. אם לא מגדירים את המאפיין הזה, ה-API מגדיר אותו כהפניה לטבלה זמנית אנונימית. - אפשר לקבל את סכימת הטבלה באמצעות השיטה
Client.get_table. - יוצרים אובייקט שאפשר לחזור עליו בכל השורות בטבלת היעד באמצעות השיטה
Client.list_rows.
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי Pythonהוראות ההגדרה שבמדריך למתחילים של BigQuery באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של BigQuery Python API.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.