הודעות שגיאה
במאמר הזה מתוארות הודעות שגיאה שאפשר להיתקל בהן במהלך העבודה ב-BigQuery, כולל קודי שגיאות HTTP והצעות לפתרון בעיות.
למידע נוסף על שגיאות בשאילתות, קראו את המאמר פתרון בעיות בשאילתות.
למידע נוסף על שגיאות בהזנת זרם נתונים, ראו פתרון בעיות בהזנת זרם נתונים.
טבלת שגיאות
התגובות מ-BigQuery API כוללות קוד שגיאת HTTP ואובייקט שגיאה בגוף התגובה. אובייקט שגיאה הוא בדרך כלל אחד מהבאים:
- אובייקט
errors, שמכיל מערך של אובייקטיErrorProto. - אובייקט
errorResults, שמכיל אובייקטErrorProtoאחד.
העמודה הודעת שגיאה בטבלה הבאה ממפה למאפיין reason באובייקט ErrorProto.
הטבלה לא כוללת את כל שגיאות ה-HTTP האפשריות או שגיאות אחרות בחיבור לרשת. לכן, אל תניחו שאובייקט שגיאה קיים בכל תגובת שגיאה מ-BigQuery. בנוסף, יכול להיות שתקבלו שגיאות או אובייקטים של שגיאות שונים אם תשתמשו בספריות הלקוח ב-Cloud ל-BigQuery API. למידע נוסף, ראו ספריות הלקוח של BigQuery API.
אם קיבלתם קוד תגובת HTTP שלא מופיע בטבלה הבאה, קוד התגובה מציין בעיה או תוצאה צפויה של בקשת ה-HTTP. קודי תגובה בטווח 5xx מציינים שגיאה בצד השרת. אם קיבלתם קוד תגובה 5xx, נסו שוב מאוחר יותר. במקרים מסוימים, קוד התגובה 5xx עשוי להיות מוחזר על ידי שרת ביניים כמו שרת proxy. כדי לקבל פרטים על השגיאה, בודקים את גוף התגובה ואת כותרות התגובה. לרשימה המלאה של קודי תגובת HTTP, ראו קודי תגובת HTTP.
אם אתם משתמשים בכלי שורת הפקודה של BigQuery כדי לבדוק את סטטוס המשימה, אובייקט השגיאה לא מוחזר כברירת מחדל. כדי לראות את אובייקט השגיאה ואת המאפיין reason התואם שממופה לטבלה הבאה, משתמשים בדגל --format=prettyjson. לדוגמה, bq --format=prettyjson show -j
*<job id>*. כדי להציג רישום מפורט ביומן של הכלי bq, משתמשים ב---apilog=stdout. למידע נוסף על פתרון בעיות בכלי bq, קראו את המאמר ניפוי באגים.
| הודעת השגיאה | קוד HTTP | תיאור | פתרון בעיות |
|---|---|---|---|
| accessDenied | 403 |
השגיאה הזו מוחזרת כשמנסים לגשת למשאב שאין לכם גישה אליו, כמו מערך נתונים, טבלה, תצוגה או משימה. השגיאה הזו מוחזרת גם כשמנסים לשנות אובייקט לקריאה בלבד. |
פונים לבעלי המשאב ומבקשים גישה למשאב בשביל המשתמש שמזוהה לפי הערך |
| attributeError | 400 |
השגיאה הזו מוחזרת כשיש בעיה בקוד המשתמש, שבה מאפיין אובייקט מסוים נקרא אבל לא קיים. |
ודאו שלאובייקט שאתם עובדים איתו יש את המאפיין שאתם מנסים לגשת אליו. מידע נוסף על השגיאה הזו זמין במאמר AttributeError. |
| backendError | 500, 502, 503 או 504 |
השגיאה הזו מציינת שהשירות לא זמין כרגע. זה יכול לקרות בגלל כמה בעיות זמניות, כולל:
|
שגיאות 5xx הן בעיות בצד השירות, וללקוח אין דרך לתקן אותן או לשלוט בהן. כדי לצמצם את ההשפעה של שגיאות 5xx בצד הלקוח, צריך לנסות שוב את הבקשות באמצעות השהיה מעריכית קטועה לפני ניסיון חוזר. למידע נוסף על השהיה מעריכית לפני ניסיון חוזר (exponential backoff), ראו השהיה מעריכית לפני ניסיון חוזר (exponential backoff). עם זאת, יש שני מקרים מיוחדים לפתרון השגיאה הזו: קריאות ל-
קריאות ל- אם הניסיונות החוזרים לא עוזרים והבעיות נמשכות, אתם יכולים לחשב את שיעור הבקשות שנכשלו ולפנות לתמיכה. |
| badRequest | 400 |
השגיאה |
צריך להמתין כמה דקות ולנסות שוב, או לסנן את ההצהרה כך שתפעל רק על נתונים ישנים יותר שנמצאים מחוץ למאגר הנתונים הזמני של הסטרימינג. כדי לבדוק אם הנתונים זמינים לפעולות DML בטבלה, בודקים את התגובה של לחלופין, אפשר להעביר נתונים בסטרימינג באמצעות BigQuery Storage Write API (gRPC), שאין בו את המגבלה הזו. |
| billingNotEnabled | 403 |
השגיאה הזו מוחזרת כשהחיוב לא מופעל בפרויקט. |
מפעילים את החיוב בפרויקט במסוףGoogle Cloud . |
| billingTierLimitExceeded | 400 |
השגיאה הזו מוחזרת כשהערך של |
השגיאה הזו נגרמת בדרך כלל מהפעלה של שאילתות איחוד (cross join) לא יעילות, באופן מפורש או משתמע, למשל בגלל תנאי איחוד לא מדויק. שאילתות מהסוג הזה לא מתאימות לתמחור על פי דרישה בגלל צריכת משאבים גבוהה, ובאופן כללי יכול להיות שהן לא יתאימו להרחבה. כדי לפתור את השגיאה, אתם יכולים לבצע אופטימיזציה של השאילתה או לעבור למודל התמחור מבוסס-הקיבולת (משבצות). למידע על אופטימיזציה של שאילתות, קראו את המאמר הימנעות מתבניות אנטי-תבניות ב-SQL. |
| נחסם | 403 |
השגיאה הזו מוחזרת כש-BigQuery חסמה באופן זמני את הפעולה שניסיתם לבצע, בדרך כלל כדי למנוע הפסקה בשירות. |
לקבלת מידע נוסף, אפשר לפנות לתמיכה. |
| כפילות | 409 |
השגיאה הזו מוחזרת כשמנסים ליצור משימה, מערך נתונים או טבלה שכבר קיימים. השגיאה מוחזרת גם כשהמאפיין |
משנים את השם של המשאב שמנסים ליצור, או את הערך של |
| internalError | 500 |
השגיאה הזו מוחזרת כשיש שגיאה פנימית ב-BigQuery. |
צריך להמתין בהתאם לדרישות ההשהיה שמתוארות בהסכם רמת השירות של BigQuery, ואז לנסות שוב את הפעולה. אם השגיאה נמשכת, פנו לתמיכה או דווחו על באג באמצעות הכלי למעקב אחר בעיות ב-BigQuery. אפשר גם להפחית את תדירות השגיאה הזו באמצעות הזמנות. |
| לא חוקי | 400 |
השגיאה הזו מוחזרת כשיש קלט לא חוקי מכל סוג שהוא, מלבד שאילתה לא חוקית, כמו שדות חובה חסרים או סכימת טבלה לא חוקית.
שאילתות לא חוקיות מחזירות שגיאת |
|
| invalidQuery | 400 |
השגיאה הזו מוחזרת כשמנסים להריץ שאילתה לא חוקית. |
בודקים אם יש שגיאות תחביר בשאילתה. המדריך לשאילתות כולל תיאורים ודוגמאות ליצירת שאילתות תקינות. |
| invalidUser | 400 |
השגיאה הזו מוחזרת כשמנסים לתזמן שאילתה עם פרטי כניסה לא חוקיים של משתמש. |
מרעננים את פרטי הכניסה של המשתמש, כמו שמוסבר במאמר תזמון שאילתות. |
| jobBackendError | 400 |
השגיאה הזו מוחזרת כשהמשימה נוצרה בהצלחה, אבל נכשלה בגלל שגיאה פנימית. השגיאה הזו יכולה להופיע ב- |
מנסים שוב את המשימה עם |
| jobInternalError | 400 |
השגיאה הזו מוחזרת כשהמשימה נוצרה בהצלחה, אבל נכשלה בגלל שגיאה פנימית. השגיאה הזו יכולה להופיע ב- |
מנסים שוב את המשימה עם |
| jobRateLimitExceeded | 400 |
השגיאה הזו מוחזרת כשהמשימה נוצרה בהצלחה, אבל נכשלה עם השגיאה rateLimitExceeded. השגיאה הזו יכולה להופיע ב- |
כדי להפחית את קצב הבקשות, צריך להשתמש בהשהיה מעריכית לפני ניסיון חוזר (exponential backoff) ואז לנסות שוב את המשימה עם |
| notFound | 404 |
השגיאה הזו מוחזרת כשמפנים למשאב (מערך נתונים, טבלה או משימה) שלא קיים, או כשהמיקום בבקשה לא תואם למיקום של המשאב (לדוגמה, המיקום שבו המשימה פועלת). השגיאה הזו יכולה להתרחש גם כשמשתמשים במעצבי טבלאות כדי להפנות לטבלאות שנמחקו, שהועברו בסטרימינג לאחרונה. |
צריך לתקן את שמות המשאבים, לציין את המיקום הנכון או להמתין לפחות 6 שעות אחרי הסטרימינג לפני ששולחים שאילתה לטבלה שנמחקה. |
| notImplemented | 501 |
השגיאה הזו מוחזרת כשמנסים לגשת לתכונה שלא הוטמעה. |
לקבלת מידע נוסף, אפשר לפנות לתמיכה. |
| proxyAuthenticationRequired | 407 |
השגיאה הזו מוחזרת בין סביבת הלקוח לבין שרת ה-proxy כשבבקשה חסרים פרטי כניסה לאימות של שרת ה-proxy. למידע נוסף, קראו את המאמר 407 Proxy Authentication Required. |
פתרון הבעיות הוא ספציפי לסביבה שלכם. אם אתם מקבלים את השגיאה הזו כשאתם עובדים ב-Java, ודאו שהגדרתם את המאפיינים |
| quotaExceeded | 403 |
השגיאה הזו מוחזרת כשהפרויקט חורג ממכסת BigQuery, ממכסה בהתאמה אישית, או כשלא הגדרתם חיוב וחורגים מתוכנית בחינם לשאילתות. |
כדי לראות איזו מכסה חרגה, אפשר לעיין במאפיין |
| rateLimitExceeded | 403, 429 |
השגיאה הזו מוחזרת אם הפרויקט חורג ממגבלת קצב שליחת הבקשות לטווח קצר, כי נשלחו יותר מדי בקשות מהר מדי. לדוגמה, ראו מגבלות קצב של משימות שאילתה ומגבלות קצב של בקשות API. |
להאט את קצב הבקשות. |
| resourceInUse | 400 |
השגיאה הזו מוחזרת כשמנסים למחוק מערך נתונים שמכיל טבלאות, או כשמנסים למחוק משימה שפועלת כרגע. |
כדי למחוק את מערך הנתונים, צריך קודם לרוקן אותו או להמתין עד שהמשימה תסתיים. |
| resourcesExceeded | 400 |
השגיאה הזו מוחזרת כשהמשימה משתמשת ביותר מדי משאבים. |
השגיאה הזו מוחזרת כשהמשימה משתמשת ביותר מדי משאבים. למידע על פתרון בעיות, קראו את המאמר פתרון שגיאות של חריגה מהמשאבים. |
| responseTooLarge | 403 |
השגיאה הזו מוחזרת כשתוצאות השאילתה גדולות מגודל התגובה המקסימלי. חלק מהשאילתות מבוצעות בכמה שלבים, והשגיאה הזו מוחזרת כששלב כלשהו מחזיר תגובה בגודל גדול מדי, גם אם התוצאה הסופית קטנה מהמקסימום. השגיאה הזו מופיעה בדרך כלל כששאילתות משתמשות בסעיף |
לפעמים הוספת פסוקית |
| הופסק | 200 |
קוד הסטטוס הזה מוחזר כשמשימה מבוטלת. |
|
| tableUnavailable | 400 |
טבלאות מסוימות ב-BigQuery מגובות בנתונים שמנוהלים על ידי צוותי מוצר אחרים של Google. השגיאה הזו מציינת שאחת מהטבלאות האלה לא זמינה. |
אם נתקלתם בהודעת השגיאה הזו, אתם יכולים לנסות שוב את הבקשה (ראו הצעות לפתרון בעיות של internalError) או לפנות לצוות המוצר של Google שנתן לכם גישה לנתונים שלו. |
| פסק זמן | 400 |
הזמן הקצוב למשימה הסתיים. |
כדאי לצמצם את כמות העבודה שהפעולה מבצעת כדי שהיא תוכל להסתיים במסגרת המגבלה שהוגדרה. פתרון בעיות שקשורות לשגיאות במכסות ובמגבלות |
דוגמה לתגובת שגיאה
GET https://bigquery.googleapis.com/bigquery/v2/projects/12345/datasets/foo
Response:
[404]
{
"error": {
"errors": [
{
"domain": "global",
"reason": "notFound",
"message": "Not Found: Dataset myproject:foo"
}],
"code": 404,
"message": "Not Found: Dataset myproject:foo"
}
}
חישוב שיעור הבקשות שנכשלו וזמן הפעולה התקינה
אפשר לפתור את רוב השגיאות מסוג 500 ו-503 על ידי ניסיון חוזר עם השהיה מעריכית לפני ניסיון חוזר (exponential backoff). אם שגיאות 500 ו-503 עדיין נמשכות, אתם יכולים לחשב את השיעור הכולל של הבקשות שנכשלו ואת זמן הפעולה התקינה התואם, כדי להשוות אותו להסכם רמת השירות (SLA) של BigQuery ולקבוע אם השירות פועל כצפוי.
כדי לחשב את השיעור הכולל של הבקשות שנכשלו ב-30 הימים האחרונים, מחלקים את מספר הבקשות שנכשלו בקריאה ל-API או במתודה מסוימת ב-30 הימים האחרונים במספר הכולל של הבקשות בקריאה ל-API או במתודה הזו ב-30 הימים האחרונים. מכפילים את הערך הזה ב-100 כדי לקבל את האחוז הממוצע של הבקשות שנכשלו במשך 30 יום.
לדוגמה, אתם יכולים לשלוח שאילתה לנתוני Cloud Logging כדי לקבל את המספר הכולל של בקשות jobs.insert ואת מספר בקשות jobs.insert שנכשלו, ולבצע את החישוב. אפשר גם לקבל את ערכי שיעור השגיאות ממרכז הבקרה של ה-API או באמצעות Metrics Explorer ב-Cloud Monitoring. האפשרויות האלה לא יכללו נתונים על בעיות ברשת או בניתוב בין הלקוח ל-BigQuery, ולכן מומלץ גם להשתמש במערכת רישום ביומן ודיווח בצד הלקוח כדי לחשב בצורה מדויקת יותר את שיעור הכשלים.
קודם כל, מחשבים 100% פחות השיעור הכולל של הבקשות שנכשלו. אם הערך הזה גדול או שווה לערך שמתואר בהסכם רמת השירות של BigQuery, אז זמן הפעולה התקינה עומד גם בהסכם רמת השירות של BigQuery. עם זאת, אם הערך הזה נמוך מהערך שמתואר בהסכם רמת השירות, צריך לחשב את זמן הפעולה התקינה באופן ידני.
כדי לחשב את זמן הפעולה התקינה, צריך לדעת כמה דקות נחשבות לזמן השבתה של השירות. זמן השבתה של השירות הוא פרק זמן של דקה עם שיעור שגיאות של יותר מ-10%, שמחושב לפי ההגדרות של הסכם רמת השירות (SLA). כדי לחשב את זמן הפעולה התקינה, מחסירים את מספר הדקות הכולל שבהן השירות לא פעל ממספר הדקות הכולל ב-30 הימים האחרונים. מחלקים את הזמן שנותר במספר הדקות הכולל ב-30 הימים האחרונים, ומכפילים את הערך הזה ב-100 כדי לקבל את אחוז זמן הפעולה התקינה במשך 30 ימים. למידע נוסף על ההגדרות והחישובים שקשורים ל-SLA , קראו את הסכם רמת השירות (SLA) של BigQuery.
אם אחוז זמן הפעולה התקינה החודשי גדול או שווה לערך שמתואר בהסכם רמת השירות של BigQuery, סביר להניח שהשגיאה נגרמה בגלל בעיה זמנית, ואפשר להמשיך לנסות שוב באמצעות השהיה מעריכית לפני ניסיון חוזר (exponential backoff).
אם זמן הפעולה התקינה נמוך מהערך שמוצג בהסכם רמת השירות, פנו לתמיכה כדי לקבל עזרה ושתפו את שיעור השגיאות הכולל שנצפה ואת החישובים של זמן הפעולה התקינה.
שגיאות אימות
שגיאות שמופיעות במערכת ליצירת אסימוני OAuth מחזירות את אובייקט ה-JSON הבא, כפי שמוגדר במפרט של OAuth 2.0.
{"error" : "_description_string_"}
השגיאה מלווה בשגיאת HTTP 400 Bad Request או בשגיאת HTTP 401 Unauthorized. _description_string_ הוא אחד מקודי השגיאה שמוגדרים במפרט של OAuth 2.0. לדוגמה:
{"error":"invalid_client"}
בדיקת השגיאות
אתם יכולים להשתמש בLogs Explorer כדי לראות שגיאות אימות של משימות, משתמשים או היקפים אחרים. הנה כמה דוגמאות למסננים ב-Logs Explorer שבהם אפשר להשתמש כדי לבדוק שגיאות אימות:
מחפשים משימות שנכשלו בגלל בעיות בהרשאות ביומני הביקורת Policy Denied:
resource.type="bigquery_resource" protoPayload.status.message=~"Access Denied" logName="projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fdata_access"מחליפים את
PROJECT_IDבמזהה הפרויקט שמכיל את המשאב.חיפוש משתמש או חשבון שירות ספציפיים ששימשו לאימות:
resource.type="bigquery_resource" protoPayload.authenticationInfo.principalEmail="EMAIL"מחליפים את
EMAILבכתובת האימייל של המשתמש או של חשבון השירות.חיפוש שינויים במדיניות של ניהול זהויות והרשאות גישה (IAM) ביומני הביקורת של פעילות האדמין:
protoPayload.methodName=~"SetIamPolicy" logName="projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Factivity"חיפוש שינויים במערך נתונים ספציפי של BigQuery ביומני הביקורת של הגישה לנתונים:
resource.type="bigquery_resource" protoPayload.resourceName="projects/PROJECT_ID/datasets/DATASET_ID" logName=projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fdata_accessמחליפים את
DATASET_IDבמזהה של מערך הנתונים שמכיל את המשאב.
הודעות שגיאה שקשורות לקישוריות
בטבלה הבאה מפורטות הודעות שגיאה שעשויות להופיע בגלל בעיות קישוריות לסירוגין, כשמשתמשים בספריות הלקוח או כשמפעילים את BigQuery API מהקוד:
| הודעת השגיאה | ספריית לקוח או API | פתרון בעיות |
|---|---|---|
| com.google.cloud.bigquery.BigQueryException: Read timed out | Java | מגדירים ערך גדול יותר של זמן קצוב לתפוגה. |
| החיבור נסגר: javax.net.ssl.SSLException: java.net.SocketException: Connection reset at com.google.cloud.bigquery.spi.v2.HttpBigQueryRpc.translate(HttpBigQueryRpc.java:115) | Java | מטמיעים מנגנון לניסיון חוזר ומגדירים ערך גדול יותר של זמן קצוב לתפוגה. |
| javax.net.ssl.SSLHandshakeException: Remote host terminated the handshake | Java | מטמיעים מנגנון לניסיון חוזר ומגדירים ערך גדול יותר של זמן קצוב לתפוגה. |
| BrokenPipeError: [Errno 32] Broken pipe | Python | להטמיע מנגנון לניסיון חוזר. מידע נוסף על השגיאה הזו זמין במאמר BrokenPipeError. |
| החיבור בוטל. RemoteDisconnected('Remote end closed connection without response' | Python | מגדירים ערך גדול יותר של זמן קצוב לתפוגה. |
| SSLEOFError (התרחשה שגיאת EOF בניגוד לפרוטוקול) | Python | השגיאה הזו מוחזרת במקום שגיאת HTTP 413 (ENTITY_TOO_LARGE). צריך להקטין את הבקשה. |
| TaskCanceledException: משימה בוטלה | ספריית .NET | מגדילים את ערך הזמן הקצוב לתפוגה בצד הלקוח. |
| google.api_core.exceptions.PreconditionFailed: 412 PATCH | Python | השגיאה הזו מוחזרת כשמנסים לעדכן משאב של טבלה באמצעות בקשת HTTP. חשוב לוודא שה-ETag בכותרת ה-HTTP לא מיושן. בפעולות ברמת הטבלה או מערך הנתונים, ודאו שהמשאב לא השתנה מאז הפעם האחרונה שבה נוצר לו מופע, ואם צריך, צרו מחדש את האובייקט. |
| Failed to establish a new connection: [Errno 110] Connection timed out | ספריות לקוח | השגיאה הזו מוחזרת כשהבקשה הגיעה לסוף הקובץ (EOF) בזמן סטרימינג או קריאת נתונים מ-BigQuery. מטמיעים מנגנון ניסיון חוזר ומגדירים ערך גדול יותר של זמן קצוב לתפוגה. |
| socks.ProxyConnectionError: Error connecting to HTTP proxy
|
ספריות לקוח | פתרון בעיות בסטטוס ובהגדרות של שרת ה-proxy. מטמיעים מנגנון ניסיון חוזר ומגדירים ערך גדול יותר של זמן קצוב לתפוגה. |
| התקבל EOF לא צפוי או 0 בייטים מזרם ההעברה | ספריות לקוח | מטמיעים מנגנון ניסיון חוזר ומגדירים ערך גדול יותר של זמן קצוב לתפוגה. |
הודעות שגיאה במסוףGoogle Cloud
בטבלה הבאה מפורטות הודעות שגיאה שעשויות להופיע בזמן העבודה במסוףGoogle Cloud .
| הודעת השגיאה | תיאור | פתרון בעיות |
|---|---|---|
| תגובת שגיאה לא ידועה מהשרת. | השגיאה הזו מוצגת כשמסוף Google Cloud מקבל שגיאה לא ידועה מהשרת. לדוגמה, כשלוחצים על קבוצת נתונים או על סוג אחר של קישור, ואי אפשר להציג את הדף. | עוברים למצב פרטי בדפדפן וחוזרים על הפעולה שגרמה לשגיאה. אם לא מופיעה שגיאה במצב פרטי, יכול להיות שהשגיאה נגרמת בגלל תוסף לדפדפן, כמו חסימת מודעות. משביתים את התוספים לדפדפן כשלא נמצאים במצב פרטי, ובודקים אם זה פותר את הבעיה. |