תבנית למחיקה בכמות גדולה ב-Firestore

תבנית המחיקה בכמות גדולה ב-Firestore היא צינור שקורא ישויות מ-Firestore באמצעות שאילתת GQL נתונה, ואז מוחק את כל הישויות התואמות בפרויקט היעד שנבחר. אפשר להגדיר את צינור הנתונים כך שיעביר את ישויות Firestore שמקודדות ב-JSON לפונקציה להגדרת משתמש ב-JavaScript. אפשר להשתמש בפונקציה הזו כדי לסנן ישויות על ידי החזרת ערכי null.

הדרישות לגבי צינורות עיבוד נתונים

  • צריך להגדיר את Firestore בפרויקט לפני שמריצים את התבנית.
  • אם קוראים ומוחקים ממופעי Firestore נפרדים, לחשבון השירות של Worker ב-Dataflow צריכה להיות הרשאה לקרוא ממופע אחד ולמחוק מהמופע השני.
  • צריך להפעיל את האפשרות Database writes (כתיבה למסד הנתונים) במופע Firestore.

פרמטרים של תבניות

פרמטר תיאור
firestoreReadGqlQuery שאילתת GQL שמציינת אילו ישויות יתאימו למחיקה. שימוש בשאילתה עם מפתחות בלבד עשוי לשפר את הביצועים. לדוגמה: "SELECT __key__ FROM MyKind".
firestoreReadProjectId מזהה הפרויקט של מופע Firestore שממנו רוצים לקרוא ישויות (באמצעות שאילתת GQL) שמשמשות להתאמה.
firestoreDeleteProjectId מזהה הפרויקט של מופע Firestore שממנו רוצים למחוק ישויות תואמות. אפשר להשתמש באותו ערך כמו firestoreReadProjectId אם רוצים לקרוא ולמחוק באותו מופע של Firestore.
firestoreReadNamespace (אופציונלי) מרחב השמות של הישויות המבוקשות. מגדירים את ברירת המחדל של מרחב השמות כ-"".
firestoreHintNumWorkers (אופציונלי) רמז למספר העובדים הצפוי בשלב של הגבלת קצב הבקשות ב-Firestore. ערך ברירת המחדל הוא 500.
javascriptTextTransformGcsPath (אופציונלי) URI של Cloud Storage של הקובץ .js שמגדיר את הפונקציה בהגדרת המשתמש (UDF) ב-JavaScript שרוצים להשתמש בה. לדוגמה, gs://my-bucket/my-udfs/my_file.js. ‫
javascriptTextTransformFunctionName (אופציונלי) השם של פונקציית JavaScript בהגדרת המשתמש (UDF) שרוצים להשתמש בה. לדוגמה, אם קוד הפונקציה ב-JavaScript הוא myTransform(inJson) { /*...do stuff...*/ }, אז שם הפונקציה הוא myTransform. דוגמאות ל-UDF ב-JavaScript זמינות במאמר דוגמאות ל-UDF. אם הפונקציה הזו מחזירה ערך לא מוגדר או null עבור ישות נתונה ב-Firestore, הישות הזו לא נמחקת.

פונקציה בהגדרת המשתמש

אפשר גם להרחיב את התבנית הזו על ידי כתיבת פונקציה בהגדרת המשתמש (UDF). התבנית קוראת ל-UDF עבור כל רכיב קלט. מטענים ייעודיים של רכיבים עוברים סריאליזציה כמחרוזות JSON. למידע נוסף, ראו יצירת פונקציות מוגדרות על ידי המשתמש לתבניות Dataflow.

מפרט הפונקציה

המאפיינים של פונקציית UDF:

  • קלט: ישות Firestore שעברה סריאליזציה כמחרוזת JSON.
  • פלט: אם רוצים לשמור את הישות ולא למחוק אותה, מחזירים null או undefined. אחרת, מחזירים את הישות המקורית למחיקה.

הרצת התבנית

המסוף

  1. עוברים לדף Create job from template (יצירת משימה מתבנית) ב-Dataflow.
  2. כניסה לדף Create job from template
  3. בשדה שם המשימה, מזינים שם ייחודי למשימה.
  4. אופציונלי: בשדה Regional endpoint (נקודת קצה אזורית), בוחרים ערך מהתפריט הנפתח. אזור ברירת המחדל הוא us-central1.

    רשימת האזורים שבהם אפשר להריץ משימת Dataflow מופיעה במאמר בנושא מיקומי Dataflow.

  5. בתפריט הנפתח Dataflow template (תבנית של Dataflow), בוחרים בתבנית Bulk Delete Entities in Firestore (מחיקה בכמות גדולה של ישויות ב-Firestore).
  6. בשדות הפרמטרים שמופיעים, מזינים את ערכי הפרמטרים.
  7. לוחצים על הפעלת העבודה.

gcloud

במעטפת או בטרמינל, מריצים את התבנית:

gcloud dataflow jobs run JOB_NAME \
    --gcs-location gs://dataflow-templates-REGION_NAME/VERSION/ \
    --region REGION_NAME \
    --parameters \
firestoreReadGqlQuery="GQL_QUERY",\
firestoreReadProjectId=FIRESTORE_READ_AND_DELETE_PROJECT_ID,\
firestoreDeleteProjectId=FIRESTORE_READ_AND_DELETE_PROJECT_ID

מחליפים את מה שכתוב בשדות הבאים:

  • JOB_NAME: שם ייחודי של המשימה לפי בחירתכם
  • REGION_NAME: האזור שבו רוצים לפרוס את עבודת Dataflow, לדוגמה: us-central1
  • VERSION: הגרסה של התבנית שבה רוצים להשתמש

    אפשר להשתמש בערכים הבאים:

    • latest כדי להשתמש בגרסה העדכנית של התבנית, שזמינה בתיקיית האב ללא תאריך בדלי – gs://dataflow-templates-REGION_NAME/latest/
    • שם הגרסה, כמו 2023-09-12-00_RC00, כדי להשתמש בגרסה ספציפית של התבנית, שאפשר למצוא אותה בתיקיית האב המתאימה עם התאריך בדלי – gs://dataflow-templates-REGION_NAME/
  • GQL_QUERY: השאילתה שתשמש להתאמת ישויות למחיקה
  • FIRESTORE_READ_AND_DELETE_PROJECT_ID: מזהה הפרויקט של מופע Firestore. בדוגמה הזו מתבצעת קריאה ממופע Firestore זהה וגם מחיקה ממנו.

API

כדי להריץ את התבנית באמצעות API בארכיטקטורת REST, שולחים בקשת HTTP POST. מידע נוסף על ה-API ועל היקפי ההרשאות שלו זמין במאמר projects.templates.launch.

POST https://dataflow.googleapis.com/v1b3/projects/PROJECT_ID/locations/LOCATION/templates:launch?gcsPath=gs://dataflow-templates-LOCATION/VERSION/
{
   "jobName": "JOB_NAME",
   "parameters": {
       "firestoreReadGqlQuery": "GQL_QUERY",
       "firestoreReadProjectId": "FIRESTORE_READ_AND_DELETE_PROJECT_ID",
       "firestoreDeleteProjectId": "FIRESTORE_READ_AND_DELETE_PROJECT_ID"
   },
   "environment": { "zone": "us-central1-f" }
}

מחליפים את מה שכתוב בשדות הבאים:

  • PROJECT_ID: מזהה הפרויקט שבו רוצים להריץ את משימת Dataflow Google Cloud
  • JOB_NAME: שם ייחודי של המשימה לפי בחירתכם
  • LOCATION: האזור שבו רוצים לפרוס את עבודת Dataflow, לדוגמה: us-central1
  • VERSION: הגרסה של התבנית שבה רוצים להשתמש

    אפשר להשתמש בערכים הבאים:

    • latest כדי להשתמש בגרסה העדכנית של התבנית, שזמינה בתיקיית האב ללא תאריך בדלי – gs://dataflow-templates-REGION_NAME/latest/
    • שם הגרסה, כמו 2023-09-12-00_RC00, כדי להשתמש בגרסה ספציפית של התבנית, שאפשר למצוא אותה בתיקיית האב המתאימה עם התאריך בדלי – gs://dataflow-templates-REGION_NAME/
  • GQL_QUERY: השאילתה שתשמש להתאמת ישויות למחיקה
  • FIRESTORE_READ_AND_DELETE_PROJECT_ID: מזהה הפרויקט של מופע Firestore. בדוגמה הזו מתבצעת קריאה ממופע Firestore זהה וגם מחיקה ממנו.

המאמרים הבאים