אירועים ושידורים

היררכיית הנתונים ב-Datastream היא:

  • מקור נתונים, שמורכב ממקור נתונים וממיקום יעד.
  • אובייקט, שהוא חלק ממקור נתונים, כמו טבלה ממסד נתונים ספציפי.
  • אירוע, שהוא שינוי יחיד שנוצר על ידי אובייקט ספציפי, כמו הוספה למסד נתונים.

לזרמים, לאובייקטים ולאירועים משויכים נתונים ומטא-נתונים. אפשר להשתמש בנתונים ובמטא-נתונים האלה למטרות שונות.

מידע על אירועים

כל אירוע מורכב משלושה סוגי נתונים:

  • נתוני אירועים: מייצגים את השינוי בנתונים עצמם מהאובייקט שמקורו במקור הנתונים. כל אירוע מכיל את כל השורה שהשתנתה.
  • מטא-נתונים כלליים: המטא-נתונים האלה מופיעים בכל אירוע שנוצר על ידי Datastream, ומשמשים לפעולות כמו הסרת נתונים כפולים ביעד.
  • מטא-נתונים ספציפיים למקור: המטא-נתונים האלה מופיעים בכל אירוע שנוצר על ידי מקור ספציפי של נתונים. המטא-נתונים האלה משתנים בהתאם למקור.

נתוני האירוע

נתוני האירועים הם המטען הייעודי (payload) של כל שינוי מאובייקט נתון שמקורו במקור נתונים.

האירועים הם בפורמט Avro או JSON.

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

כשעובדים עם פורמט JSON, לכל עמודה, האירוע מכיל את שם העמודה והערך שלה.

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

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

מטא-נתונים כלליים

הנתונים האלה זהים בכל סוגי מקורות הנתונים.

שדה סוג Avro סוג JSON תיאור
stream_name מחרוזת מחרוזת השם הייחודי של מקור הנתונים, כפי שהוגדר בזמן היצירה.
read_method מחרוזת מחרוזת

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

הערכים האפשריים כוללים:

  • oracle-cdc-logminer
  • oracle-backfill
  • oracle-supplementation
  • mysql-cdc-binlog
  • mysql-backfill-incremental
  • mysql-backfill-fulldump
  • postgres-cdc-wal
  • postgresql-backfill
  • salesforce-cdc
  • salesforce-backfill
object מחרוזת מחרוזת השם שמשמש לקיבוץ סוגים שונים של אירועים, בדרך כלל השם של הטבלה או האובייקט במקור.
schema_key מחרוזת מחרוזת מזהה ייחודי של הסכימה המאוחדת של האירוע.
uuid מחרוזת מחרוזת מזהה ייחודי של האירוע שנוצר על ידי Datastream.
read_timestamp timestamp-millis מחרוזת חותמת הזמן (UTC) שבה הרשומה נקראה על ידי Datastream (חותמת הזמן של מערכת Unix באלפיות השנייה).
source_timestamp timestamp-millis מחרוזת חותמת הזמן (UTC) שבה הרשומה השתנתה במקור (חותמת הזמן של מערכת Unix באלפיות השנייה).
sort_keys {"type": "array", "items": ["string", "long"]} מערך מערך של ערכים שאפשר להשתמש בהם כדי למיין אירועים לפי הסדר שבו הם התרחשו.

מטא-נתונים ספציפיים למקור

המטא-נתונים האלה משויכים לאירועי CDC ולמילוי חוזר של נתונים ממסד נתונים של מקור. כדי לראות את המטא-נתונים האלה, בוחרים מקור מהתפריט הנפתח שמופיע בהמשך.

מקור שדה סוג Avro סוג JSON תיאור
MySQL log_file מחרוזת מחרוזת קובץ היומן שממנו Datastream שולף אירועים בשכפול CDC.
MySQL log_position ארוך ארוך המיקום ביומן (ההיסט) ביומן הבינארי של MySQL.
MySQL primary_keys מערך מחרוזות מערך מחרוזות רשימה של שמות עמודות (אחת או יותר) שמרכיבות את המפתח הראשי של הטבלה. אם לטבלה אין מפתח ראשי, השדה הזה ריק.
MySQL is_deleted בוליאני בוליאני
  • הערך true מציין שהשורה נמחקה במקור.
  • הערך false מציין שהשורה לא נמחקה.
MySQL database מחרוזת מחרוזת מסד הנתונים שמשויך לאירוע.
MySQL table מחרוזת מחרוזת הטבלה שמשויכת לאירוע.
MySQL change_type מחרוזת מחרוזת

סוג השינוי (INSERT,‏ UPDATE-INSERT,‏ UPDATE-DELETE ו-DELETE) שהאירוע מייצג.

Oracle log_file מחרוזת מחרוזת קובץ היומן שממנו Datastream שולף אירועים בשכפול CDC.
Oracle scn ארוך ארוך המיקום ביומן (ההיסט) ביומן הטרנזקציות של Oracle.
Oracle row_id מחרוזת מחרוזת row_id של Oracle.
Oracle is_deleted בוליאני בוליאני
  • הערך true מציין שהשורה נמחקה במקור.
  • הערך false מציין שהשורה לא נמחקה.
Oracle database מחרוזת מחרוזת מסד הנתונים שמשויך לאירוע.
Oracle schema מחרוזת מחרוזת הסכימה שמשויכת לטבלה מהאירוע.
Oracle table מחרוזת מחרוזת הטבלה שמשויכת לאירוע.
Oracle change_type מחרוזת מחרוזת

סוג השינוי (INSERT,‏ UPDATE-INSERT,‏ UPDATE-DELETE ו-DELETE) שהאירוע מייצג.

Oracle tx_id מחרוזת מחרוזת מזהה הטרנזקציה שאליה שייך האירוע.
Oracle rs_id מחרוזת מחרוזת המזהה של קבוצת הרשומות. השילוב של rs_id ו-ssn מזהה באופן ייחודי שורה ב-V$LOGMNR_CONTENTS. rs_id מזהה באופן ייחודי את רשומת ה-redo שיצרה את השורה.
Oracle ssn ארוך ארוך מספר סידורי של SQL. המספר הזה משמש עם rs_id ומזהה באופן ייחודי שורה ב-V$LOGMNR_CONTENTS.
PostgreSQL schema מחרוזת מחרוזת הסכימה שמשויכת לטבלה מהאירוע.
PostgreSQL table מחרוזת מחרוזת הטבלה שמשויכת לאירוע.
PostgreSQL is_deleted בוליאני בוליאני
  • הערך true מציין שהשורה נמחקה במקור.
  • הערך false מציין שהשורה לא נמחקה.
PostgreSQL change_type מחרוזת מחרוזת סוג השינוי (INSERT, ‏ UPDATE, ‏ DELETE) שהאירוע מייצג.
PostgreSQL tx_id מחרוזת מחרוזת מזהה הטרנזקציה שאליה שייך האירוע.
PostgreSQL lsn מחרוזת מחרוזת מספר הרצף ביומן של הרשומה הנוכחית.
PostgreSQL primary_keys מערך מחרוזות מערך מחרוזות רשימה של שמות עמודות (אחת או יותר) שמרכיבות את המפתח הראשי של הטבלה. אם לטבלה אין מפתח ראשי, השדה הזה ריק.
שרת SQL table מחרוזת מחרוזת הטבלה שמשויכת לאירוע.
שרת SQL database ארוך ארוך מסד הנתונים שמשויך לאירוע.
שרת SQL schema מערך מחרוזות מערך מחרוזות הסכימה שמשויכת לטבלה מהאירוע.
שרת SQL is_deleted בוליאני בוליאני
  • הערך true מציין שהשורה נמחקה במקור.
  • הערך false מציין שהשורה לא נמחקה.
שרת SQL lsn מחרוזת מחרוזת מספר הרצף ביומן של האירוע.
שרת SQL tx_id מחרוזת מחרוזת מזהה הטרנזקציה שאליה שייך האירוע.
שרת SQL physical_location מערך של מספרים שלמים מערך של מספרים שלמים המיקום הפיזי של רשומת היומן, שמתואר על ידי שלושה מספרים שלמים: מזהה הקובץ, מזהה הדף ומזהה המשבצת של הרשומה.
שרת SQL replication_index מערך מחרוזות מערך מחרוזות רשימת שמות העמודות של אינדקס שיכול לזהות באופן ייחודי שורה בטבלה.
שרת SQL change_type מחרוזת מחרוזת

סוג השינוי (INSERT, ‏ UPDATE, ‏ DELETE) שהאירוע מייצג.

Spanner commit_timestamp מחרוזת מחרוזת חותמת הזמן של האירוע ב-commit.
Spanner snapshot בוליאני בוליאני האם האירוע הוא אירוע של תמונת מצב של מילוי חוסרים.
Spanner project_id מחרוזת מחרוזת מזהה הפרויקט ב-Spanner.
Spanner instance_id מחרוזת מחרוזת מזהה מכונת Spanner.
Spanner database_id מחרוזת מחרוזת מזהה מסד הנתונים של Spanner.
Spanner change_stream_name מחרוזת מחרוזת השינוי בשידור הנתונים ב-Spanner.
Spanner table מחרוזת מחרוזת טבלת Spanner.
Spanner server_transaction_id מחרוזת מחרוזת מזהה העסקה שמשויך לאירוע.
Spanner record_sequence מחרוזת מחרוזת רצף הרשומות שמשויך לאירוע.
Spanner mod_index מחרוזת מחרוזת מספר השינוי שמשויך לאירוע.
Spanner transaction_tag מחרוזת מחרוזת התג של העסקה המשויכת.
Spanner system_transaction מחרוזת מחרוזת אם העסקה היא עסקה של המערכת.
Spanner number_of_records_in_transaction ארוך ארוך מספר הרשומות בעסקה המשויכת.
Spanner value_capture_type enum enum סוג לכידת הערך של נתוני השינוי.
Spanner mod_type enum enum אם הרשומה הייתה INSERT,‏ UPDATE או DELETE.
Spanner primary_keys מערך מערך רשימת העמודות של המפתח הראשי בטבלה.
Spanner is_deleted בוליאני בוליאני האם השינוי מייצג אירוע DELETE.
Salesforce object_name מחרוזת מחרוזת

השם של אובייקט Salesforce שמשויך לאירוע.

Salesforce domain מחרוזת מחרוזת

שם הדומיין שמשויך לאירוע.

Salesforce is_deleted בוליאני בוליאני
  • הערך true מציין שהשורה נמחקה במקור.
  • הערך false מציין שהשורה לא נמחקה.
Salesforce change_type מחרוזת מחרוזת

סוג השינוי (INSERT, ‏ UPDATE, ‏ DELETE) שהאירוע מייצג.

Salesforce primary_keys מערך מחרוזות מערך מחרוזות רשימת שמות העמודות שמרכיבות את המפתח הראשי של הטבלה. אם לטבלה אין מפתח ראשי, השדה הזה ריק.
MongoDB database מחרוזת מחרוזת מסד הנתונים שמשויך לאירוע.
MongoDB collection מחרוזת מחרוזת האוסף שמשויך לאירוע. אוספים מקבילים לטבלאות במסדי נתונים רלציוניים.
MongoDB change_type מחרוזת מחרוזת סוג השינוי (CREATE,‏ UPDATE וDELETE) שהאירוע מייצג.
MongoDB is_deleted בוליאני בוליאני
  • הערך true מציין שהשורה נמחקה במקור.
  • הערך false מציין שהשורה לא נמחקה.
MongoDB primary_keys מערך מחרוזות מערך מחרוזות השדה _id שמשמש כמפתח הראשי לכל מסמך באוסף.

דוגמה לזרימת אירועים

בתרשים הזה מוצגים האירועים שנוצרים משלוש פעולות רצופות: INSERT, UPDATE ו-DELETE, בשורה אחת בטבלת SAMPLE של מסד נתונים מקור.

שעות THIS_IS_MY_PK (int) FIELD1 (nchar nullable) FIELD2 (nchar non-null)>
0 1231535353 foo TLV
1 1231535353 NULL TLV

INSERT (T0)

המטען הייעודי (payload) של ההודעה כולל את כל השורה החדשה.

{
  "stream_name": "projects/myProj/locations/myLoc/streams/Oracle-to-Source",
  "read_method": "oracle-cdc-logminer",
  "object": "SAMPLE.TBL",
  "uuid": "d7989206-380f-0e81-8056-240501101100",
  "read_timestamp": "2019-11-07T07:37:16.808Z",
  "source_timestamp": "2019-11-07T02:15:39",  
  "source_metadata": {
    "log_file": ""
    "scn": 15869116216871,
    "row_id": "AAAPwRAALAAMzMBABD",
    "is_deleted": false,
    "database": "DB1",
    "schema": "ROOT",
    "table": "SAMPLE"
    "change_type": "INSERT",
    "tx_id": 
    "rs_id": "0x0073c9.000a4e4c.01d0",
    "ssn": 67,
  },
  "payload": {
    "THIS_IS_MY_PK": "1231535353",
    "FIELD1": "foo",
    "FIELD2": "TLV",
  }
}

עדכון (T1)

המטען הייעודי (payload) של ההודעה כולל את כל השורה החדשה. הוא לא כולל ערכים קודמים.

{
  "stream_name": "projects/myProj/locations/myLoc/streams/Oracle-to-Source",
  "read_method": "oracle-cdc-logminer",
  "object": "SAMPLE.TBL",
  "uuid": "e6067366-1efc-0a10-a084-0d8701101101",
  "read_timestamp": "2019-11-07T07:37:18.808Z",
  "source_timestamp": "2019-11-07T02:17:39",  
  "source_metadata": {
    "log_file": 
    "scn": 15869150473224,
    "row_id": "AAAGYPAATAAPIC5AAB",
    "is_deleted": false,
    "database":
    "schema": "ROOT",
    "table": "SAMPLE"
    "change_type": "UPDATE",
    "tx_id":
    "rs_id": "0x006cf4.00056b26.0010",
    "ssn": 0,
  },
  "payload": {
    "THIS_IS_MY_PK": "1231535353",
    "FIELD1": null,
    "FIELD2": "TLV",
  }
}

DELETE (T2)

המטען הייעודי (payload) של ההודעה כולל את כל השורה החדשה.

{
  "stream_name": "projects/myProj/locations/myLoc/streams/Oracle-to-Source",
  "read_method": "oracle-cdc-logminer",
  "object": "SAMPLE.TBL",
  "uuid": "c504f4bc-0ffc-4a1a-84df-6aba382fa651",
  "read_timestamp": "2019-11-07T07:37:20.808Z",
  "source_timestamp": "2019-11-07T02:19:39",
  "source_metadata": {
    "log_file": 
    "scn": 158691504732555,
    "row_id": "AAAGYPAATAAPIC5AAC",
    "is_deleted": true,
    "database":
    "schema": "ROOT",
    "table": "SAMPLE"
    "change_type": "DELETE",
    "tx_id":
    "rs_id": "0x006cf4.00056b26.0011",
    "ssn": 0,
  },
  "payload": {
    "THIS_IS_MY_PK": "1231535353",
    "FIELD1": null,
    "FIELD2": "TLV",
  }
}

סדר ועקביות

בקטע הזה מוסבר איך Datastream מטפל בסדר ובעקביות.

סידור הסרטונים

‫Datastream לא מבטיח סדר, אבל כל אירוע מכיל את שורת הנתונים המלאה ואת חותמת הזמן של מועד כתיבת הנתונים במקור. ב-BigQuery, אירועים לא מסודרים משולבים ברצף הנכון באופן אוטומטי. מערכת BigQuery משתמשת במטא-נתונים של האירועים ובמספר רצף שינויים (CSN) פנימי כדי להחיל את האירועים על הטבלה בסדר הנכון. ב-Cloud Storage, אירועים מאותו זמן יכולים להתפרס על פני יותר מקובץ אחד.

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

אפשר להסיק את הסדר מכל מקור בנפרד.

מקור תיאור
MySQL

השדה read_method של אירועים שכלולים במילוי החוסרים הראשוני מתחיל ב-mysql-backfill. אין משמעות לסדר שבו מתקבלים אירועים בבקפיל, כי אפשר להשתמש בהם בכל סדר.

האירועים שמשתתפים בשכפול המתמשך כוללים את השדה read_method עם הערך mysql-cdc-binlog.

אפשר להסיק את הסדר מהשילוב של השדה log_file והשדה log_position שמוסט מקובץ היומן. השילוב הזה מספק מספר ייחודי שגדל בהדרגה ומזהה את סדר הפעולות במסד הנתונים.

Oracle

השדה read_method של אירועים שכלולים במילוי החוסרים הראשוני מתחיל ב-oracle-backfill. אין משמעות לסדר שבו מתקבלים אירועים בבקפיל, כי אפשר להשתמש בהם בכל סדר.

האירועים שמשתתפים בשכפול המתמשך כוללים את השדה read_method עם הערך oracle-cdc-logminer.

אפשר להסיק את הסדר מהשילוב של השדה rs_id (מזהה קבוצת הרשומות) והשדה ssn (מספר רצף של SQL). השילוב הזה מספק מספר ייחודי שגדל בהדרגה ומזהה את סדר הפעולות במסד הנתונים.

PostgreSQL

השדה read_method של אירועים שכלולים במילוי החוסרים הראשוני מתחיל ב-postgresql-backfill. אין משמעות לסדר שבו מתקבלים אירועים בבקפיל, כי אפשר להשתמש בהם בכל סדר.

האירועים שמשתתפים בשכפול המתמשך כוללים את השדה read_method עם הערך postgres-cdc-wal.

אפשר להסיק את הסדר מהשילוב של השדה source_timestamp והשדה lsn (מספר רצף ביומן). השילוב הזה מספק מספר ייחודי שגדל בהדרגה ומזהה את סדר הפעולות במסד הנתונים.

שרת SQL

השדה read_method של אירועים שכלולים במילוי החוסרים הראשוני מתחיל ב-sqlserver-backfill. אין משמעות לסדר שבו מתקבלים אירועים בבקפיל, כי אפשר להשתמש בהם בכל סדר.

האירועים שמשתתפים בשכפול המתמשך כוללים את השדה read_method עם הערך sqlserver-cdc.

אפשר להסיק את הסדר מהשילוב של השדה source_timestamp והשדה lsn (מספר רצף ביומן). השילוב הזה מספק מספר ייחודי שגדל בהדרגה ומזהה את סדר הפעולות במסד הנתונים.

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

Salesforce

אפשר לקבוע את הסדר באמצעות source_timestamp של הרשומה כמפתח המיון. חותמת הזמן ב-Salesforce היא ברזולוציה של שנייה אחת, אבל לא יכולים להיות שני אירועי שינוי לאותה רשומה שמתרחשים באותה שנייה.

MongoDB

אפשר לקבוע את הסדר באמצעות השדה ts ביומן הפעולות או השדה clusterTime בזרם השינויים של הרשומה. השדות ייחודיים לכל רשומה.

Spanner

אפשר לקבוע את הסדר באמצעות שילוב של השדות commit_timestamp, record_sequence ו-mod_index. השילוב הזה מספק ערך ייחודי שגדל בהדרגה ומזהה את סדר הפעולות במסד הנתונים.

עקביות

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

כשקובצי יומן של מסד נתונים מכילים עסקאות שלא אושרו, אם מתבצעת החזרה של עסקאות, מסד הנתונים משקף זאת בקובצי היומן כפעולות של שפת מניפולציה של נתונים (DML) מסוג 'הפוך'. לדוגמה, לפעולה INSERT שהוחזרה למצב קודם תהיה פעולה תואמת DELETE. הפעולות האלה נקראות על ידי Datastream מקובצי היומן.

מידע על מקורות נתונים

לכל מקור נתונים יש מטא-נתונים שמתארים גם את מקור הנתונים וגם את המקור שממנו הוא שולף נתונים. המטא-נתונים האלה כוללים מידע כמו שם הזרם, פרופילי החיבור של המקור והיעד.

הגדרה מלאה של אובייקט הזרם מופיעה במסמכי הפניית ה-API.

מצב וסטטוס השידור

סטרימינג יכול להיות באחד מהמצבים הבאים:

  • Not started
  • Starting
  • Running
  • Draining
  • Paused
  • Failed
  • Failed permanently

אפשר להשתמש ביומנים כדי למצוא מידע נוסף על הסטטוס, כמו מילוי חוזר של הטבלאות או מספר השורות שעברו עיבוד. אפשר גם להשתמש ב-API של FetchStreamErrors כדי לאחזר שגיאות.

מטא-נתונים של אובייקטים שזמינים באמצעות ה-API של Discover

ה-API של גילוי מחזיר אובייקטים שמייצגים את המבנה של האובייקטים שמוגדרים במקור הנתונים או ביעד שמיוצגים על ידי פרופיל החיבור. לכל אובייקט יש מטא-נתונים על האובייקט עצמו, וגם על כל שדה נתונים שהוא מאחזר. המטא-נתונים האלה זמינים באמצעות Discover API.

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