אם מילוי חוסרים רגיל ב-Datastream נמשך יותר מדי זמן או שיש לו מגבלות מוצר, אתם יכולים להעתיק את הנתונים הראשוניים לטבלה קיימת ב-BigQuery בנפרד. כשמעבירים עדכונים של סימון נתונים שהשתנו (CDC) בסטרימינג ל-BigQuery ממיקום ספציפי ביומן, אפשר לסנכרן את הטבלה בלי להפעיל מילוי חוסרים מובנה.
בעיה
בטבלה ב-BigQuery שמאוכלסת באמצעות BigQuery Storage Write API אי אפשר לבצע פעולות רגילות של שפת טיפול בנתונים (DML). כלומר, אחרי שזרם CDC מתחיל לכתוב לטבלה ב-BigQuery, אין דרך להוסיף נתונים היסטוריים שלא אוכלסו מראש בטבלה.
למשל, נבחן את התרחיש הבא:
- TIMESTAMP 1: הפעולה של העתקת הטבלה מופעלת.
- TIMESTAMP 2: בזמן שהטבלה מועתקת, פעולות DML במקור גורמות לשינויים בנתונים (שורות מתווספות, מתעדכנות או מוסרות).
- TIMESTAMP 3: מתחיל תהליך CDC, אבל שינויים שהתרחשו במהלך TIMESTAMP 2 לא נרשמים, ולכן יש אי התאמה בנתונים.
פתרון
כדי לשמור על תקינות הנתונים, תהליך ה-CDC צריך לתעד את כל השינויים במקור שהתרחשו מהרגע שאחרי העדכון האחרון שהועתק לטבלה ב-BigQuery.
הפתרון הבא מאפשר לוודא שתהליך ה-CDC מתעד את כל השינויים מ-TIMESTAMP 2, בלי לחסום את פעולת ההעתקה מכתיבת נתונים לטבלה ב-BigQuery.
דרישות מוקדמות
- לטבלת היעד ב-BigQuery צריכה להיות בדיוק אותה סכימה ואותה הגדרה כאילו הטבלה נוצרה על ידי Datastream. אפשר להשתמש בערכת הכלים להעברה של Datastream BigQuery כדי לעשות את זה.
- במקורות MySQL ו-Oracle, אתם צריכים להיות מסוגלים לזהות את מיקום היומן בזמן שבו פעולת ההעתקה מתחילה.
- במסד הנתונים צריך להיות מספיק נפח אחסון ומדיניות מתאימה לשמירת יומנים כדי לאפשר את השלמת תהליך העתקת הטבלה.
מקורות MySQL ו-Oracle
- יוצרים את ה-stream שבו רוצים להשתמש לרפליקציית ה-CDC המתמשכת, אבל לא מפעילים אותו. השידור צריך להיות במצב CREATED.
- כשתהיו מוכנים להתחיל את פעולת העתקת הטבלה, זהו את מיקום היומן הנוכחי של מסד הנתונים:
- ב-MySQL, עיינו במסמכי התיעוד של MySQL כדי ללמוד איך לקבל את הקואורדינטות של היומן הבינארי של הרפליקציה. אחרי שמזהים את המיקום ביומן, סוגרים את הסשן כדי לבטל את הנעילות במסד הנתונים.
- ב-Oracle, מריצים את השאילתה הבאה:
SELECT current_scn FROM V$DATABASE.
- מעתיקים את הטבלה ממסד הנתונים של המקור ל-BigQuery.
- אחרי שהעתקה מסתיימת, פועלים לפי השלבים שמתוארים בדף ניהול זרמים כדי להתחיל את הזרם ממיקום היומן שזיהיתם קודם.
מקורות PostgreSQL
- כשמוכנים להתחיל להעתיק את הטבלה, יוצרים את משבצת השכפול. מידע נוסף זמין במאמר בנושא הגדרת מסד נתונים של PostgreSQL כמקור.
- מעתיקים את הטבלה ממסד הנתונים של המקור ל-BigQuery.
- אחרי שפעולת ההעתקה מסתיימת, יוצרים את ה-stream ומפעילים אותו.