תבנית MongoDB ל-BigQuery (סטרימינג)

התבנית הזו יוצרת פייפליין סטרימינג שפועל עם MongoDB סנכרון שינויים בזרמי נתונים. כדי להשתמש בתבנית הזו, צריך לפרסם את נתוני הסטרים של השינויים ב-Pub/Sub. הצינור קורא את רשומות ה-JSON מ-Pub/Sub וכותב אותן ל-BigQuery. הפורמט של הרשומות שנכתבות ב-BigQuery זהה לפורמט של תבנית האצווה של MongoDB ל-BigQuery.

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

  • מערך הנתונים ב-BigQuery צריך להתקיים.
  • צריכה להיות גישה למופע המקור של MongoDB ממכונות העובדים של Dataflow.
  • כדי לקרוא את סנכרון שינויים בזרמי נתונים, צריך ליצור נושא Pub/Sub. בזמן שהצינור פועל, מקשיבים לאירועים של סימון נתונים שהשתנו (CDC) בזרם השינויים של MongoDB ומפרסמים אותם ב-Pub/Sub כרשומות JSON. מידע נוסף על פרסום הודעות ב-Pub/Sub
  • התבנית הזו משתמשת ב-MongoDB סנכרון שינויים בזרמי נתונים. אין תמיכה בסימון נתונים שהשתנו (CDC) ב-BigQuery.

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

פרמטרים נדרשים

  • ‫mongoDbUri: ה-URI של חיבור MongoDB בפורמט mongodb+srv://:@..
  • ‫database: מסד נתונים ב-MongoDB שממנו יתבצע קריאת האוסף. לדוגמה, my-db.
  • ‫collection: השם של האוסף בתוך מסד הנתונים של MongoDB. לדוגמה, my-collection.
  • ‫userOption: ‏ FLATTEN,‏ JSON או NONE. ‫FLATTEN משטיח את המסמכים לרמה אחת. ‫JSON מאחסן את המסמך בפורמט JSON של BigQuery. ‫NONE שומר את המסמך כולו כמחרוזת בפורמט JSON. ברירת המחדל היא: NONE.
  • ‫inputTopic: נושא הקלט ב-Pub/Sub שממנו קוראים, בפורמט projects/<PROJECT_ID>/topics/<TOPIC_NAME>.
  • ‫outputTableSpec: הטבלה ב-BigQuery שאליה ייכתבו הנתונים. לדוגמה, bigquery-project:dataset.output_table.

פרמטרים אופציונליים

  • ‫useStorageWriteApiAtLeastOnce: כשמשתמשים ב-Storage Write API, המאפיין הזה מציין את סמנטיקת הכתיבה. כדי להשתמש בסמנטיקה של 'לפחות פעם אחת' (https://beam.apache.org/documentation/io/built-in/google-bigquery/#at-least-once-semantics), מגדירים את הפרמטר הזה לערך true. כדי להשתמש בסמנטיקה של מסירה בדיוק פעם אחת, צריך להגדיר את הפרמטר לערך false. הפרמטר הזה רלוונטי רק אם הערך של useStorageWriteApi הוא true. ערך ברירת המחדל הוא false.
  • ‫KMSEncryptionKey: מפתח הצפנה של Cloud KMS לפענוח מחרוזת החיבור של URI של MongoDB. אם מועבר מפתח Cloud KMS, מחרוזת החיבור של mongodb uri חייבת להיות מוצפנת. לדוגמה, projects/your-project/locations/global/keyRings/your-keyring/cryptoKeys/your-key.
  • ‫filter: מסנן Bson בפורמט JSON. לדוגמה, { "val": { $gt: 0, $lt: 9 }}.
  • ‫useStorageWriteApi: אם הערך הוא true, צינור הנתונים משתמש ב-BigQuery Storage Write API ‏ (https://cloud.google.com/bigquery/docs/write-api). ערך ברירת המחדל הוא false. מידע נוסף זמין במאמר בנושא שימוש ב-Storage Write API‏ (https://beam.apache.org/documentation/io/built-in/google-bigquery/#storage-write-api).
  • ‫numStorageWriteApiStreams: כשמשתמשים ב-Storage Write API, מציינים את מספר זרמי הכתיבה. אם useStorageWriteApi הוא true ו-useStorageWriteApiAtLeastOnce הוא false, חובה להגדיר את הפרמטר הזה. ברירת המחדל היא 0.
  • ‫storageWriteApiTriggeringFrequencySec: כשמשתמשים ב-Storage Write API, מציינים את תדירות ההפעלה בשניות. אם useStorageWriteApi הוא true ו-useStorageWriteApiAtLeastOnce הוא false, חובה להגדיר את הפרמטר הזה.
  • ‫bigQuerySchemaPath: נתיב Cloud Storage של סכימת ה-JSON של BigQuery. לדוגמה, gs://your-bucket/your-schema.json.
  • ‫javascriptDocumentTransformGcsPath: ה-URI של Cloud Storage של קובץ .js שמגדיר את הפונקציה בהגדרת המשתמש (UDF) ב-JavaScript שבה רוצים להשתמש. לדוגמה, gs://your-bucket/your-transforms/*.js.
  • ‫javascriptDocumentTransformFunctionName: השם של פונקציית JavaScript בהגדרת המשתמש (UDF) שבה רוצים להשתמש. לדוגמה, אם קוד הפונקציה של JavaScript הוא myTransform(inJson) { /*...do stuff...*/ }, אז שם הפונקציה הוא myTransform. דוגמאות ל-UDF ב-JavaScript זמינות במאמר UDF Examples (https://github.com/GoogleCloudPlatform/DataflowTemplates#udf-examples). לדוגמה, transform.

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

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

כדי להשתמש ב-UDF, מעלים את קובץ ה-JavaScript ל-Cloud Storage ומגדירים את פרמטרים התבנית הבאים:

פרמטרתיאור
javascriptDocumentTransformGcsPath המיקום של קובץ ה-JavaScript ב-Cloud Storage.
javascriptDocumentTransformFunctionName השם של פונקציית JavaScript.

מידע נוסף זמין במאמר בנושא יצירת פונקציות מוגדרות על ידי המשתמש לתבניות Dataflow.

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

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

  • קלט: מסמך MongoDB.
  • פלט: אובייקט שעבר סריאליזציה כמחרוזת JSON.
  • הרצת התבנית

    המסוף

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

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

    5. בתפריט הנפתח Dataflow template (תבנית Dataflow), בוחרים את התבנית MongoDB (CDC) to BigQuery (מ-MongoDB‏ (CDC) ל-BigQuery).
    6. בשדות הפרמטרים שמופיעים, מזינים את ערכי הפרמטרים.
    7. לוחצים על הפעלת העבודה.

    gcloud

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

    gcloud dataflow flex-template run JOB_NAME \
        --project=PROJECT_ID \
        --region=REGION_NAME \
        --template-file-gcs-location=gs://dataflow-templates/VERSION/flex/MongoDB_to_BigQuery_CDC \
        --parameters \
    outputTableSpec=OUTPUT_TABLE_SPEC,\
    mongoDbUri=MONGO_DB_URI,\
    database=DATABASE,\
    collection=COLLECTION,\
    userOption=USER_OPTION,\
    inputTopic=INPUT_TOPIC

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

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

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

      • latest כדי להשתמש בגרסה העדכנית של התבנית, שזמינה בתיקיית ההורה ללא תאריך בדלי – gs://dataflow-templates/latest/
      • שם הגרסה, כמו 2023-09-12-00_RC00, כדי להשתמש בגרסה ספציפית של התבנית. אפשר למצוא את הגרסה הזו בתיקיית ההורה המתאימה עם התאריך בדלי – gs://dataflow-templates/
    • ‫OUTPUT_TABLE_SPEC: שם טבלת היעד ב-BigQuery.
    • ‫MONGO_DB_URI: מזהה ה-URI של MongoDB.
    • ‫DATABASE: מסד הנתונים של MongoDB.
    • ‫COLLECTION: האוסף של MongoDB.
    • ‫USER_OPTION: FLATTEN,‏ JSON או NONE.
    • ‫INPUT_TOPIC: נושא הקלט של Pub/Sub.

    API

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

    POST https://dataflow.googleapis.com/v1b3/projects/PROJECT_ID/locations/LOCATION/flexTemplates:launch
    {
       "launch_parameter": {
          "jobName": "JOB_NAME",
          "parameters": {
              "inputTableSpec": "INPUT_TABLE_SPEC",
              "mongoDbUri": "MONGO_DB_URI",
              "database": "DATABASE",
              "collection": "COLLECTION",
              "userOption": "USER_OPTION",
              "inputTopic": "INPUT_TOPIC"
          },
          "containerSpecGcsPath": "gs://dataflow-templates/VERSION/flex/MongoDB_to_BigQuery_CDC",
       }
    }

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

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

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

      • latest כדי להשתמש בגרסה העדכנית של התבנית, שזמינה בתיקיית ההורה ללא תאריך בדלי – gs://dataflow-templates/latest/
      • שם הגרסה, כמו 2023-09-12-00_RC00, כדי להשתמש בגרסה ספציפית של התבנית. אפשר למצוא את הגרסה הזו בתיקיית ההורה המתאימה עם התאריך בדלי – gs://dataflow-templates/
    • ‫OUTPUT_TABLE_SPEC: שם טבלת היעד ב-BigQuery.
    • ‫MONGO_DB_URI: מזהה ה-URI של MongoDB.
    • ‫DATABASE: מסד הנתונים של MongoDB.
    • ‫COLLECTION: האוסף של MongoDB.
    • ‫USER_OPTION: FLATTEN,‏ JSON או NONE.
    • ‫INPUT_TOPIC: נושא הקלט של Pub/Sub.

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