שימוש ב-Datastream וב-Dataflow כדי להזרים נתונים ל-BigQuery

בדף הזה מפורטות שיטות מומלצות לשימוש ב-Datastream וב-Dataflow להזרמת נתונים ל-BigQuery.

חלוקת מערכי נתונים של רפליקות לפי מפתחות שהוגדרו על ידי המשתמש

מערך הנתונים הזמני ב-BigQuery מחולק למחיצות באופן אוטומטי. עם זאת, כברירת מחדל, מערך הנתונים המשוכפל לא מחולק למחיצות, כי מפתחות המחיצות בטבלאות המשוכפלות צריכים להיות מוגדרים על סמך לוגיקה עסקית ספציפית, במקום להיות נאכפים על ידי Datastream ו-Dataflow.

לכל טבלה במערך הנתונים של העותק שצריך לחלק למחיצות:

  1. הפסקה וניקוי של משימת Dataflow

  2. משתמשים בעורך ה-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'
  3. משתמשים בתבנית Datastream to BigQuery כדי ליצור מחדש משימת Dataflow.

הרצת פונקציות בהגדרת המשתמש כדי לבצע שינויים בנתוני אירועים

אתם יכולים להשתמש בתבנית 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 דקות לעיכוב). המיזוג השני יתרחש בשעה 9:39, וכל המיזוגים הבאים יתרחשו במרווחי זמן של 10 דקות (9:49, 9:59, 10:09 וכן הלאה).

אם מגדירים את תדירות המיזוג ל-60 דקות, העבודה תופעל בכל שעה, אחרי עיכוב של 5 דקות להפעלה הראשונית של העבודה. אם המשימה מתוזמנת להפעלה בשעה 10:00, היא תופעל בפועל בשעה 10:05 בגלל העיכוב של 5 דקות. כל המיזוגים הבאים יתרחשו במרווחי זמן של 60 דקות (11:05,‏ 12:05,‏ 13:05 וכן הלאה).

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