במאמר הזה מוסבר איך לפתור בעיות ב-Dataform.
הגישה ל-BigQuery נדחתה
השגיאה הבאה מתרחשת כשמפעילים קריאה לצינור עיבוד נתונים לפני שנותנים ל-Dataform גישה ל-BigQuery:
Access Denied: Project PROJECT_ID: User does not have bigquery.jobs.create permission in project PROJECT_ID.
כדי לפתור את השגיאה, צריך לתת ל-Dataform גישה ל-BigQuery.
טוקן הגישה למאגר מרוחק נדחה
השגיאה הבאה מתקבלת כשלטוקן האימות של מאגר מקושר של צד שלישי אין גישה למאגר הזה:
The access token for remote repository REPOSITORY_NAME was rejected
כדי לפתור את השגיאה, צריך לבדוק את ההרשאות הנדרשות בספק Git ולעדכן את אסימון האימות של Secret Manager בהתאם. למידע נוסף על אימות מאגרי Git של צד שלישי ב-Dataform, ראו התחברות למאגר Git של צד שלישי.
בחיבור של Secure Source Manager חסר שרת proxy של Developer Connect
השגיאה הבאה מתרחשת כשמקשרים מאגר של Dataform למאגר של Secure Source Manager (גרסת טרום-השקה (Preview)) באמצעות חיבור Developer Connect שלא מופעל בו שרת proxy:
This repository uses a Secure Source Manager connection that does not have the Developer Connect proxy enabled. Dataform cannot access it. Select a different repository, or link a new repository using a connection with the proxy enabled.
כדי לפתור את השגיאה, צריך לבחור מאגר אחר, לקשר מאגר חדש באמצעות חיבור עם שרת proxy מופעל, או לעדכן את החיבור הקיים של Developer Connect כדי להפעיל את שרת ה-proxy. מידע נוסף זמין במאמר קישור מאגר מרוחק באמצעות Developer Connect.
חריגה ממגבלת השאילתות בו-זמנית ב-BigQuery
השגיאה הבאה מתרחשת כשמספר השאילתות שמריצים בו-זמנית ב-BigQuery חורג ממגבלת השאילתות בו-זמנית ב-BigQuery:
Exceeded rate limits: too many concurrent queries for this project_and_region
כדי לפתור את השגיאה, צריך להפחית את מספר השאילתות המקבילות לפחות מ-250, באחת מהדרכים הבאות:
- ב-Dataform, מגבילים את הפעולות בו-זמנית בהפעלה הידנית או בלוח הזמנים של הגדרת תהליך העבודה.
- ב-Dataform, מסווגים פעולות באמצעות תגים ומריצים רק תגים נבחרים בכל פעם.
- ב-Dataform, להוסיף יחסי תלות בין פעולות.
- ב-Dataform, מחלקים את ההרצות של הפעולות בין פרויקטים שונים ב-Google Cloud .
במאמר פתרון בעיות שקשורות לשגיאות במכסות ובמגבלות מוסבר איך לפתור את השגיאה הזו ב-BigQuery.
חרגתם מהמכסה ב-BigQuery
השגיאה הבאה מתרחשת כשמספר בקשות ה-API ש-Dataform שולח ל-BigQuery חורג מהמכסה של BigQuery:
Quota exceeded: Your user_method exceeded quota for concurrent api requests
per user per method.
כדי לפתור את השגיאה, צריך להפחית את מספר השאילתות המקבילות לפחות מ-250, באחת מהדרכים הבאות:
- ב-Dataform, מגבילים את הפעולות בו-זמנית בהפעלה הידנית או בלוח הזמנים של הגדרת תהליך העבודה.
- ב-Dataform, מסווגים פעולות באמצעות תגים ומריצים רק תגים נבחרים בכל פעם.
- ב-Dataform, להוסיף יחסי תלות בין פעולות.
- ב-Dataform, מחלקים את ההרצות של הפעולות בין פרויקטים שונים ב-Google Cloud .
במאמר פתרון בעיות שקשורות לשגיאות במכסות ובמגבלות מוסבר איך לפתור את השגיאה הזו ב-BigQuery.
שגיאות בהפעלת צינור עיבוד הנתונים של BigQuery
השגיאות הבאות מתרחשות במהלך הפעלה של תהליך עבודה ב-BigQuery:
- שגיאות בהפעלת צינור עיבוד נתונים שמתחילות בהודעות שגיאה של BigQuery.
כדי לפתור את השגיאות האלה, אפשר לעיין במאמר הודעות שגיאה ב-BigQuery.
הקומפילציה נכשלת
השגיאות הבאות מתרחשות במהלך הידור בגלל הגודל או המספר של השאילתות שעברו הידור:
Compilation timed out. Reduce the complexity of your project to ensure it can compile within limits.Compilation exceeded its allowed heap memory limits. Reduce the complexity of your project to ensure it can compile within limits.Compilation exceeded its allowed ArrayBuffer or string memory limits. Reduce the complexity of your project to ensure it can compile within limits.Compilation cancelled because it exceeded size limits.
כדי לפתור את השגיאות האלה, צריך לבצע את השלבים הבאים:
- מעדכנים את ליבת Dataform לגרסה האחרונה.
- בודקים את תהליך העבודה כדי לזהות ולצמצם חוסר יעילות.
- להקטין את הגודל של שאילתות SQL.
צמצמו את מספר הפעולות של JavaScript בזיכרון, לדוגמה:
config { config {type: "table" }} js { const tooBig = new Uint8Array(110_000_000); } SELECT ...
מידע נוסף על מגבלות המשאבים של הידור ב-Dataform זמין במאמר מכסות ומגבלות.
מאפייני includeDependentAssertions סותרים
השגיאה הבאה מתרחשת במהלך ההידור כשהפרמטר includeDependentAssertions מוגדר לאותה פעולה עם ערכים שונים בקובץ אחד:
Conflicting "includeDependentAssertions" properties are not allowed. Dependency
dependencyName has different values set for this property.
כדי לפתור את השגיאה, עורכים את הקובץ ומסירים חזרות מתנגשות של הפרמטר includeDependentAssertions.
מידע נוסף על השימוש בפרמטר includeDependentAssertions כדי להגדיר טענות נכוֹנוּת (assertions) כיחסי תלות זמין במאמר הגדרת טענות הנכוֹנוּת של פעולה נבחרת כיחסי תלות.
צירוף חשבונות שירות בין פרויקטים חסום
השגיאה הבאה מתרחשת כשמנסים להשתמש בחשבון שירות בהתאמה אישית מפרויקט אחר, ולא מהמאגר של Dataform, והפעולה נחסמת על ידי אילוץ של מדיניות הארגון:
The caller does not have permission to act as service account: SERVICE_ACCOUNT_EMAIL
כדי לפתור את השגיאה:
- מזהים את הפרויקט ב- Google Cloud שבו נמצא חשבון השירות בהתאמה אישית.
- בפרויקט הזה, משביתים את האילוץ
iam.disableCrossProjectServiceAccountUsageשל מדיניות הארגון. מידע נוסף מופיע במאמר הפעלה של צירוף חשבונות שירות בין פרויקטים. - מוודאים שלחשבון המשתמש שמבצע את הקריאה יש את התפקיד "משתמש בחשבון שירות" (
roles/iam.serviceAccountUser) בחשבון השירות בהתאמה אישית.
מידע נוסף מופיע במאמר טיפול בצירוף של חשבון שירות בפרויקטים שונים.
@dataform/core שגיאות תלות
אם התלות dataform-core ב-package.json לא מעודכנת, השגיאות הבאות יתרחשו במהלך ההידור:
Failed to resolve @dataform/core
@dataform/core version should be X.X.X or newer
התלות @dataform/core נדרשת ב-package.json. כשמאתחלים את סביבת העבודה הראשונה במאגר, Dataform מאכלס באופן אוטומטי את package.json בגרסה הנוכחית של @dataform/core. צריך לעדכן את @dataform/core לגרסה העדכנית ביותר כשהיא יוצאת.
כדי לפתור את השגיאות האלה, עדכנו את @dataform/core לגרסה העדכנית.
נדחתה הרשאת הגישה לפרטי הכניסה של המשתמש בחשבון Google
השגיאה הבאה מתרחשת כשמריצים את עומס העבודה באמצעות פרטי כניסה של חשבון Google, אבל ל-Dataform אין את ההרשאות הנדרשות:
Dataform does not have the necessary permissions to run your workload using end user credentials. Error details: Account restricted: https://accounts.google.com/info/servicerestricted?...
השגיאה הזו יכולה להופיע אם בארגון שלכם משתמשים בכללים של בקרת גישה מבוססת-הקשר שמגבילים את הגישה לשירותי Google Cloud על סמך הזהות וההקשר של המשתמש.
כדי לפתור את השגיאה הזו, יכול להיות שתצטרכו לעדכן את ההגדרות של בקרת הגישה מבוססת-ההקשר כדי לאפשר ל-Dataform להשתמש בפרטי הכניסה של המשתמש בחשבון Google. כדי לעשות את זה, צריך להחריג את מזהה הלקוח של Dataform ב-OAuth בהגדרות של רמת הגישה. למידע נוסף על החרגת אפליקציות, קראו את המאמר הגדרת רמות גישה לאפליקציות נתמכות.
כדי לקבל את מזהה הלקוח ב-OAuth בשביל Dataform, פנו ל-Cloud Customer Care.
לא הצלחנו לפתור את הבעיה dataform.json
השגיאה הבאה מתקבלת כשמפעילים סביבת עבודה ב-Dataform, אבל תהליך ההפעלה לא מצליח להתקין את כל החבילות:
Uncaught Error: Failed to resolve dataform.json
כדי לפתור את השגיאה, פותחים את package.json בסביבת העבודה ולוחצים על Install packages.
לא הצלחנו לפתור את הבעיה workflow_settings.yaml
השגיאה הבאה מתקבלת כשמפעילים סביבת עבודה ב-Dataform, אבל תהליך ההפעלה לא מצליח להתקין את כל החבילות:
Uncaught Error: Failed to resolve workflow_settings.yaml
כדי לפתור את השגיאה, פותחים את workflow_settings.yaml בסביבת העבודה ולוחצים על Install packages.
אין תמיכה ביעדי חבילה מסוג git+
השגיאה הבאה מתקבלת כשמגדירים חבילות ב-package.json עם יעדים שמתחילים ב-git+:
'git+' prefixed package targets are not currently supported. However,
in most cases they can be used via a '.tar.gz' suffixed target instead.
ב-Dataform אין תמיכה ביעדי חבילות עם הקידומת git+.
כדי לפתור את השגיאה הזו, יוצרים כתובת URL של tar.gz לחבילה ומעדכנים את יעד החבילה ב-package.json. מידע נוסף על התקנת חבילות ב-Dataform זמין במאמר התקנת חבילה.
הזמן הקצוב להתקנת החבילה פג
השגיאה הבאה מתרחשת כשגודל החבילות שמוגדרות ב-package.json חורג מהגודל המקסימלי של יחסי התלות של NPM:
API request error: Package installation timed out
כדי לפתור את השגיאה הזו, צריך להסיר חבילות מיותרות מ-package.json. חשוב לוודא שהקובץ package.json לא מכיל את @dataform/cli, ושהגודל הכולל של יחסי התלות המוגדרים של NPM לא עולה על 200MB.
אם הגדרות הגרסה מפנות ל-commitish של Git, כמו הסתעפויות, תגים או SHA של commit, ודאו שקובצי ה-package.json ביעדים שלהם תקינים.
אין הרשאה לפעול כחשבון שירות
השגיאה הבאה מתרחשת כשבחשבון המשתמש שמבצע את הפעולה חסרה ההרשאה iam.serviceAccounts.actAs בחשבון השירות בפועל:
Permission denied: Principal CALLER_EMAIL is missing 'iam.serviceAccounts.actAs' permission on service account SERVICE_ACCOUNT_EMAIL.
השגיאה הזו יכולה להופיע במהלך הפעולות הבאות:
- יצירה או עדכון של מאגר.
- יצירה או עדכון של הגדרת תהליך עבודה.
- יצירת הפעלה של תהליך עבודה.
- עדכון הגדרות של גרסה.
כדי לפתור את השגיאה, מקצים לחשבון המשתמש את התפקיד "משתמש בחשבון שירות" (roles/iam.serviceAccountUser) בחשבון השירות בפועל. למידע נוסף, קראו את המאמר הקצאת תפקידי IAM הנדרשים.
אי אפשר להגיע למרשם החבילות הפרטיות
השגיאה הבאה מתרחשת כשתוקף האימות של Dataform לחבילה פרטית פג:
Permission denied when fetching one or more npm packages. Please verify that
private registry authentication details are valid for each npm registry
כדי לפתור את השגיאה הזו, צריך לוודא שפרטי האימות של המאגר הפרטי תקינים לכל מאגר NPM. מידע נוסף זמין במאמר אימות חבילה פרטית.
אין גישה למאגר המרוחק
אחת מהשגיאות הבאות מתרחשת כש-Dataform לא מצליח להתחבר למאגר Git המרוחק:
Remote repository 'REMOTE_REPOSITORY_URL' could not be reached.
Error during remote operation: SSH connection to remote repository 'REMOTE_REPOSITORY_URL' timed out.
Error during remote operation: `Read timed out`.
Error during remote operation: `Connection time out`.
Error during remote operation: The remote repository 'REMOTE_REPOSITORY_URL' closed connection during remote operation.
הדרך לפתור את שגיאות החיבור האלה תלויה בשאלה אם הכשל הוא קבוע או זמני.
כשלים קבועים בחיבור
אם השגיאה מתרחשת באופן עקבי בכל ניסיון קומפילציה או במהלך ההגדרה הראשונית של המאגר, החיבור נכשל באופן סופי. החיבור לא מוגדר כמו שצריך או שפג התוקף של פרטי הכניסה. כדי לפתור את השגיאה, מבצעים את השלבים הבאים:
- מוודאים שאפשר לגשת למארח של מאגר Git מהאינטרנט הציבורי.
- אם מאגר Git המרוחק לא נגיש דרך האינטרנט הציבורי, אתם יכולים להשתמש ב-Developer Connect כדי להתחבר בצורה מאובטחת מ-Dataform.
- מוודאים שאסימון האימות או מפתחות ה-SSH תקינים, שהתוקף שלהם לא פג ושיש להם גישה למאגר.
- מבצעים את כל השלבים שמפורטים בקטע חיבור למאגר Git של צד שלישי.
כשלים זמניים או לסירוגין בחיבור
אם השגיאה מתרחשת מדי פעם במהלך הפעלות מתוזמנות או כשכמה תהליכי עבודה מופעלים בו-זמנית, הכשל בחיבור הוא זמני. יכול להיות שהחיבור לרשת החיצונית למאגר המרוחק לא אמין באופן זמני.
כדי לשפר את אמינות הייצור ולמנוע שגיאות חיבור זמניות, מומלץ לפעול לפי השיטות המומלצות הבאות:
- הימנעו מהידורים תכופים של commitish בסביבת הייצור: קריאה ל-
CreateCompilationResultישירות ב-commitish של Git, כמו הסתעפות, תג או SHA של commit, מחייבת את Dataform לבצע שכפול חדש של Git ולהתקין חבילות דרך הרשת בכל הפעלה. הפעלה של קומפילציות תכופות של commitish בכמה צינורות עיבוד נתונים מגבירה את התלות ברשת החיצונית ואת זמן האחזור של הביצוע. - שימוש בהגדרות מוצר: להפעלה בסביבת ייצור, משתמשים בהגדרות מוצר. הגדרת גרסה מקמפלת את המאגר לפי לוח זמנים מבוקר ושומרת את תוצאת הקימפול הבלתי ניתנת לשינוי. תהליכי עבודה במורד הזרם משתמשים בתוצאה הזו מהמטמון באופן מיידי, בלי לשלוח שאילתה למאגר ה-Git החיצוני.
- הפעלות מתוזמנות מדורגות: כשמתזמנים כמה טריגרים של קומפילציות או גרסאות, כדאי לדרג את לוחות הזמנים של ה-cron כדי לפזר את העומס על הרשת. לדוגמה, אפשר להגדיר הפרש של 5-10 דקות בין לוחות הזמנים במקום להריץ את כל המשימות בו-זמנית.
- הוספת ניסיונות חוזרים בתהליכי עבודה של תזמור: כשמתזמרים הידורים של Dataform מתזמונים חיצוניים כמו Managed Service for Apache Airflow, מגדירים ניסיונות חוזרים אוטומטיים עם השהיה מעריכית לפני ניסיון חוזר (exponential backoff) באופרטור כדי לטפל בצורה חלקה בבעיות זמניות ברשת. לדוגמה, ב-DAG של Airflow שמשתמש ב-
DataformCreateCompilationResultOperator, מגדירים ניסיונות חוזרים באופן הבא:
from datetime import timedelta
from airflow.providers.google.cloud.operators.dataform import (
DataformCreateCompilationResultOperator,
)
create_compilation_result = DataformCreateCompilationResultOperator(
task_id="create_compilation_result",
project_id="PROJECT_ID",
region="REGION",
repository_id="REPOSITORY_ID",
compilation_result={
"git_commitish": "GIT_COMMITISH",
},
retries=5,
retry_delay=timedelta(minutes=2),
retry_exponential_backoff=True,
)
המאגרים לא מוצגים ב-Dataform
יכול להיות שחלק מהמאגרים של Dataform יופיעו בחיפושים של מאגר משאבי ענן או בביקורות של הרשאות IAM, אבל הם לא יופיעו ב-Dataform במסוף Google Cloud .
במאמר זיהוי מאגרים של נכסי BigQuery מוסבר איך לזהות את המקור של המאגרים האלה באמצעות תוויות.
אין גישה לסוד של מאגר מרוחק
השגיאה הבאה מתרחשת כשסוכן השירות של Dataform לא יכול לגשת לסוד שלכם ב-Secret Manager במאגר מקושר של צד שלישי:
Dataform's service account is unable to reach the configured secret.
Make sure the secret exists and is shared with your Dataform service account:
SERVICE_ACCOUNT_ID.
כדי לפתור את השגיאה, צריך לוודא שלסוכן השירות של Dataform יש גישה לסוד.
חשבון השירות לא מופיע בתפריט הנפתח
כשמגדירים הפעלה של מאגר או של תהליך עבודה, יכול להיות שחשבון שירות מותאם אישית קיים לא יופיע בתפריט Service account.
Dataform משתמש ב-Identity and Access Management API כדי להציג את רשימת חשבונות השירות. לשם כך נדרשת ההרשאה iam.serviceAccounts.list ברמת הפרויקט.
כדי לפתור את הבעיה תוכלו לנסות אחד מהפתרונות הבאים:
- לוחצים על Enter manually ומזינים את מזהה חשבון השירות.
- מבקשים מהאדמין של הפרויקט להקצות לכם את התפקיד "צפייה בחשבונות שירות" (
roles/iam.serviceAccountViewer) או תפקיד אחר שכולל את ההרשאהiam.serviceAccounts.listבפרויקט.
ארגומנט לא ידוע: תגים
השגיאה הבאה מתקבלת כשגרסת ה-CLI של Dataform לא מזהה את הארגומנט tags:
Unknown argument: tags
כדי לפתור את השגיאה:
- מעדכנים את גרסת ה-CLI ל-
3.0.0ואילך. תמיד צריך לבדוק גרסאות חדשות של חבילות בסביבה שאינה סביבת ייצור לפני שפורסים אותן בסביבת הייצור. - מומלץ תמיד להשתמש בגרסה העדכנית ביותר של חבילת הליבה של Dataform.
- מציינים במפורש את גרסת החבילה ב-
package.json, לדוגמה3.0.0. אל תשתמשו באפשרויות אחרות שלdependenciesב-package.json, למשל>version.
האפשרות להגביל פעולות בו-זמניות לא מוצגת
האפשרות הגבלת פעולות בו-זמניות לא זמינה בתרחישים הבאים:
- מצב ההפעלה מוגדר ל-Unit tests (בדיקות יחידה). בבדיקות יחידה אין תמיכה במגבלות על פעולות בו-זמניות. כדי להגדיר מגבלה על מספר הפעולות בו-זמנית, מגדירים את מצב ההפעלה ל-Actions (פעולות).
- אתם מתזמנים תהליך עבודה של Notebook.
פעולות נשארות במצב "בתור" במשך זמן רב
אם מוגדרת מגבלה על מספר הפעולות בו-זמנית בהרצה של תהליך עבודה, הפעולות נכנסות למצב בתור אם הפעולות שפועלות תופסות את כל המקומות הפנויים להרצה בו-זמנית.
כדי לפתור את הבעיה, אתם יכולים:
- מחכים שהפעולות הפעילות יסתיימו. כשהמשבצות מתפנות, Dataform מתחיל את הפעולות שבתור.
- אם הפעולות נשארות בתור יותר מדי זמן או שמשך ההרצה של תהליך העבודה ארוך מדי, הגדילו את הערך של Maximum concurrent actions להרצות הבאות בלוח הזמנים של הגדרת תהליך העבודה.