התבנית הזו יוצרת צינור עיבוד באצווה שקורא מסמכים מ-MongoDB וכותב אותם ל-BigQuery.
אם רוצים לתעד נתונים של שינויים ב-MongoDB, אפשר להשתמש ב תבנית MongoDB ל-BigQuery (CDC).
הדרישות לגבי צינורות עיבוד נתונים
- מערך הנתונים ב-BigQuery שמוגדר כיעד חייב להתקיים.
- צריכה להיות גישה למופע המקור של MongoDB ממכונות העובדים של Dataflow.
פורמט הפלט
הפורמט של רשומות הפלט תלוי בערך של הפרמטר userOption. אם userOption הוא NONE, הפלט הוא לפי הסכימה הבאה. השדה source_data מכיל את המסמך בפורמט JSON.
[ {"name":"id","type":"STRING"}, {"name":"source_data","type":"STRING"}, {"name":"timestamp","type":"TIMESTAMP"} ]
אם userOption הוא FLATTEN, צינור הנתונים משטח את המסמכים וכותב את השדות ברמה העליונה כעמודות בטבלה. לדוגמה,
נניח שהמסמכים באוסף MongoDB מכילים את השדות הבאים:
"_id"(string)"title"(string)"genre"(string)
הפלט שמתקבל באמצעות FLATTEN הוא בסכימה הבאה. השדה
timestamp נוסף על ידי התבנית.
[ {"name":"_id","type":"STRING"}, {"name":"title","type":"STRING"}, {"name":"genre","type":"STRING"}, {"name":"timestamp","type":"TIMESTAMP"} ]
אם userOption הוא JSON, צינור העברת הנתונים שומר את המסמך בפורמט JSON של BigQuery. ל-BigQuery יש תמיכה מובנית בנתוני JSON באמצעות סוג הנתונים JSON.
מידע נוסף מופיע במאמר עבודה עם נתוני JSON ב-GoogleSQL.
פרמטרים של תבניות
פרמטרים נדרשים
- mongoDbUri: ה-URI של חיבור MongoDB בפורמט
mongodb+srv://:@.. - database: מסד נתונים ב-MongoDB שממנו יתבצע קריאת האוסף. לדוגמה,
my-db. - collection: השם של האוסף בתוך מסד הנתונים של MongoDB. לדוגמה,
my-collection. - userOption:
FLATTEN,JSONאוNONE.FLATTENמאחד את המסמכים לרמה אחת. JSONמאחסן את המסמך בפורמט JSON של BigQuery. NONEשומר את המסמך כולו כמחרוזת בפורמט JSON. ברירת המחדל היא: NONE. - outputTableSpec: הטבלה ב-BigQuery שאליה ייכתבו הנתונים. לדוגמה,
bigquery-project:dataset.output_table.
פרמטרים אופציונליים
- KMSEncryptionKey: מפתח הצפנה של Cloud KMS לפענוח מחרוזת החיבור של URI של MongoDB. אם מועבר מפתח Cloud KMS, מחרוזת החיבור של מזהה ה-URI של MongoDB חייבת להיות מוצפנת. לדוגמה,
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). - useStorageWriteApiAtLeastOnce: כשמשתמשים ב-Storage Write API, המאפיין הזה מציין את סמנטיקת הכתיבה. כדי להשתמש בסמנטיקה של 'לפחות פעם אחת' (https://beam.apache.org/documentation/io/built-in/google-bigquery/#at-least-once-semantics), צריך להגדיר את הפרמטר הזה לערך
true. כדי להשתמש בסמנטיקה של מסירה חד-פעמית, מגדירים את הפרמטר לערךfalse. הפרמטר הזה רלוונטי רק אם הערך שלuseStorageWriteApiהואtrue. ערך ברירת המחדל הוא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:
userOption הוא NONE, אובייקט ה-JSON חייב לכלול מאפיין בשם _id שמכיל את מזהה המסמך.הרצת התבנית
המסוף
- עוברים לדף Create job from template (יצירת משימה מתבנית) ב-Dataflow. כניסה לדף Create job from template
- בשדה שם המשימה, מזינים שם ייחודי למשימה.
- אופציונלי: בשדה Regional endpoint (נקודת קצה אזורית), בוחרים ערך מהתפריט הנפתח. אזור ברירת המחדל הוא
us-central1.רשימה של אזורים שבהם אפשר להריץ משימת Dataflow מופיעה במאמר מיקומי Dataflow.
- בתפריט הנפתח Dataflow template (תבנית Dataflow), בוחרים את התבנית MongoDB to BigQuery (מ-MongoDB ל-BigQuery).
- בשדות הפרמטרים שמופיעים, מזינים את ערכי הפרמטרים.
- לוחצים על הפעלת העבודה.
gcloud
במעטפת או בטרמינל, מריצים את התבנית:
gcloud dataflow flex-template run JOB_NAME \ --project=PROJECT_ID \ --region=REGION_NAME \ --template-file-gcs-location=gs://dataflow-templates-REGION_NAME/VERSION/flex/MongoDB_to_BigQuery \ --parameters \ outputTableSpec=OUTPUT_TABLE_SPEC,\ mongoDbUri=MONGO_DB_URI,\ database=DATABASE,\ collection=COLLECTION,\ userOption=USER_OPTION
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט שבו רוצים להריץ את משימת Dataflow Google Cloud -
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/
-
OUTPUT_TABLE_SPEC: שם טבלת היעד ב-BigQuery. -
MONGO_DB_URI: מזהה ה-URI של MongoDB. -
DATABASE: מסד הנתונים של MongoDB. -
COLLECTION: האוסף שלכם ב-MongoDB. -
USER_OPTION: FLATTEN, JSON או NONE.
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" }, "containerSpecGcsPath": "gs://dataflow-templates-LOCATION/VERSION/flex/MongoDB_to_BigQuery", } }
מחליפים את מה שכתוב בשדות הבאים:
-
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/
-
OUTPUT_TABLE_SPEC: שם טבלת היעד ב-BigQuery. -
MONGO_DB_URI: מזהה ה-URI של MongoDB. -
DATABASE: מסד הנתונים של MongoDB. -
COLLECTION: האוסף שלכם ב-MongoDB. -
USER_OPTION: FLATTEN, JSON או NONE.
המאמרים הבאים
- מידע נוסף על תבניות Dataflow
- כאן אפשר לעיין ברשימת התבניות ש-Google סיפקה.