כשמשכפלים נתונים ל-BigQuery באמצעות הצינור לעיבוד נתונים בסטרימינג של Datastream ו-Dataflow, אפשר להתאים אישית את האופן שבו Dataflow מעבד וממזג את השינויים. חלוקה למחיצות של טבלאות משוכפלות לפי מפתחות מותאמים אישית, שינוי אירועים באמצעות פונקציות מוגדרות על ידי המשתמש (UDF) ב-JavaScript והתאמה של תדירות המיזוג עוזרים לכם לאזן בין עדכניות הנתונים לבין עלויות השאילתות והאחסון.
חלוקה למחיצות של מערכי נתונים של רפליקות לפי מפתחות שהמשתמשים מגדירים
מערך הנתונים של שלב הביניים ב-BigQuery מחולק למחיצות באופן אוטומטי. עם זאת, כברירת מחדל, מערך הנתונים של העותק לא מחולק למחיצות, כי מפתחות המחיצות בטבלאות של העותק צריכים להיות מוגדרים על סמך לוגיקה עסקית ספציפית, במקום להיות נאכפים על ידי Datastream ו-Dataflow.
לכל טבלה במערך הנתונים המשוכפל שצריך לבצע בה חלוקה למחיצות:
משתמשים בעורך ה-SQL ב-BigQuery כדי להריץ את סקריפט ה-SQL הבא לכל טבלה במערך הנתונים של העותק. בדוגמה הזו, לטבלה
actorבמערך הנתוניםdatastream_cdcיש עמודהlast_updateשאנחנו רוצים להגדיר כמפתח החלוקה. כשמריצים את הסקריפט, הטבלה נוצרת מחדש עם מפתח המחיצה הנכון.create table '[BigQuery_PROJECT_ID].datastream_cdc.actor_new'
partition by date(last_update) as SELECT * FROM '[BigQuery_PROJECT_ID].datastream_cdc.actor' drop table '[BigQuery_PROJECT_ID].datastream_cdc.actor' alter table '[BigQuery_PROJECT_ID].datastream_cdc.actor_new' rename to 'actor' משתמשים בתבנית Datastream to BigQuery כדי ליצור מחדש משימת Dataflow.
להריץ פונקציות בהגדרת המשתמש (UDF) כדי לשנות את נתוני האירועים
אתם יכולים להשתמש בתבנית Datastream to BigQuery כדי להריץ פונקציה בהגדרת המשתמש ב-JavaScript. כדי לעשות את זה, קודם צריך למקם קובץ שמכיל את הפונקציה במיקום ספציפי ב-Cloud Storage. לאחר מכן, מבצעים את הפעולות הבאות:
- משתמשים בפרמטר
javascriptTextTransformGcsPathבתבנית כדי לציין את המיקום של הקובץ ב-Cloud Storage שמכיל את הפונקציה שהוגדרה על ידי המשתמש. - משתמשים בפרמטר
javascriptTextTransformFunctionNameכדי לציין את השם של פונקציית ה-JavaScript שרוצים לקרוא לה כפונקציה בהגדרת המשתמש.
לדוגמה, אפשר להריץ פונקציה בהגדרת המשתמש כדי לשמור רשומות שנמחקו בטבלאות של מערך הנתונים המשוכפל ב-BigQuery. התהליך הזה נקרא "מחיקה זמנית".
כדי לעשות את זה, יוצרים פונקציה שמעתיקה את הערך של העמודה _metadata_deleted לעמודה חדשה בשם is_deleted, ואז מאפסת את הערך של העמודה _metadata_deleted ל-false. כך המשימה ב-Dataflow מתעלמת מאירועי המחיקה ושומרת את הרשומות שנמחקו כשמערך הנתונים של הרפליקה מתעדכן ב-BigQuery.
הנה קוד לדוגמה של פונקציה בהגדרת המשתמש:
/** * This function changes the behavior of the Datastream to * BigQuery template to allow soft deletes. * @param {string} messageString from DatastreamIO data * @return {string} same as an input message with an added property */ function transform(messageString) { // messageString is a JSON object as a string var messageJson = JSON.parse(messageString); // Moving the deleted flag to a new column will cause the pipeline to soft delete data. messageJson['is_deleted'] = messageJson['_metadata_deleted']; messageJson['_metadata_deleted'] = false; return JSON.stringify(messageJson); }
הגדרת תדירות המיזוג
משתמשים בפרמטר mergeFrequencyMinutes של התבנית Datastream to BigQuery כדי להגדיר את תדירות המיזוג. זהו מספר הדקות בין מיזוגים של טבלה נתונה במערך הנתונים של הרפליקה ב-BigQuery. בזמן שמערכת ממלאת מחדש את הנתונים ההיסטוריים, מומלץ להגדיר את תדירות המיזוג לערך נמוך (12 או 24 שעות) כדי לשמור על עלויות נמוכות.
לדוגמה, אם מגדירים את הערך של הפרמטר הזה ל-10 דקות, Dataflow יריץ את המשימה שמשתמשת בתבנית כל 10 דקות. עם זאת, בפעם הראשונה שהעבודה תפעל, יהיה עיכוב של 5 דקות. בדוגמה הזו, אם המשימה פועלת בשעה 9:14, המיזוג הראשון יתרחש בשעה 9:29 (10 דקות למיזוג ו-5 דקות להשהיה). המיזוג השני יתרחש ב-09:39, וכל המיזוגים הבאים יתרחשו במרווחים של 10 דקות (09:49, 09:59, 10:09 וכן הלאה).
אם מגדירים את תדירות המיזוג ל-60 דקות, המשימה תפעל בכל שעה עגולה, אחרי עיכוב של 5 דקות בהפעלה הראשונית של המשימה. אם המשימה מתוזמנת לשעה 10:00, היא תופעל בפועל בשעה 10:05 בגלל העיכוב של 5 דקות. כל המיזוגים הבאים יתרחשו במרווחים של 60 דקות (11:05, 12:05, 13:05 וכן הלאה).
יכול להיות שלא תוכלו לבצע מיזוג בתדירות שמתאימה לצרכים העסקיים שלכם, בגלל עלויות או מסיבות אחרות. יכול להיות שהנתונים לא יהיו הכי עדכניים. כדי לגשת לנתונים העדכניים ביותר, יוצרים תצוגה מעל הטבלאות של קבוצות הנתונים של שלב הביניים והרפליקה ב-BigQuery, שבה התצוגה מחקה את המיזוג. התצוגה הזו נוצרת כטבלה לוגית אחת (גם למערך הנתונים של ה-staging וגם למערך הנתונים של הרפליקה). אם תדירות המיזוג נמוכה ואתם צריכים גישה מהירה יותר לנתונים, כדאי להשתמש בתצוגה המפורטת.