Datastream BigQuery Migration Toolkit


בדף הזה מתוארים שיטות מומלצות לשימוש ב-Datastream כדי לבצע מיגרציה מהתבנית Dataflow Datastream to BigQuery אל פתרון השכפול המובנה של Datastream ל-BigQuery.

לפני שמתחילים

ההוראות בדף הזה מבוססות על ההנחות הבאות:

  • יש לך ניסיון עם Docker והתקנת אותו.
  • אתם יודעים איך לשכפל מאגרים משירותים כמו GitHub.
  • אתם יודעים איך להריץ מקורות נתונים ב-Datastream.
  • התקנתם את Google Cloud CLI.

סקירה כללית על ערכת הכלים להעברה

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

כדי להעביר את הטבלאות שלכם ב-BigQuery באמצעות ערכת הכלים, אתם צריכים לבצע את השלבים הבאים:

  1. יצירה, הפעלה והשהיה של מקור נתונים ב-Datastream עם יעד BigQuery.
  2. מריצים את ההעברה על כל טבלת BigQuery שצריך להעביר.
  3. המשך השידור.

ערכת הכלים מבצעת את הפעולות הבאות:

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

מידע נוסף על המבנה של ערכת הכלים ועל הארגומנטים שבה זמין בקובץ README.md של ערכת הכלים.

הגדרת ערכת הכלים להעברה

כדי להריץ את ערכת הכלים להעברה באמצעות Docker, מבצעים את השלבים הבאים:

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

    git clone https://github.com/GoogleCloudPlatform/datastream-bigquery-migration-toolkit &&
    cd datastream-bigquery-migration-toolkit
    
  2. יוצרים את התמונה:

    docker build -t migration-service .
    
  3. מאמתים באמצעות פרטי הכניסה של Google Cloud CLI:

    docker run -ti \
    --name gcloud-config migration-service gcloud auth application-default login
    
  4. מגדירים את מאפיין הפרויקט: Google Cloud

    docker run -ti --volumes-from gcloud-config migration-service \
    gcloud config set project PROJECT_ID
    

    מחליפים את PROJECT_ID במזהה של הפרויקט ב- Google Cloud.

העברה מ-Dataflow לפתרון המובנה של Datastream

  1. יצירת stream ב-Datastream עם יעד ב-BigQuery

  2. מתחילים את השידור ומשהים אותו מיד. כך Datastream יכול לתעד את המיקום שממנו הוא מתעד שינויים לפני תחילת ההעברה.

  3. מרוקנים את צינור עיבוד הנתונים של Datastream ו-Dataflow:

    1. משהים את הזרם הקיים של יעד Cloud Storage.
    2. בודקים את מדד ההשהיה הכולל של הזרם וממתינים לפחות למשך ההשהיה הנוכחית כדי לוודא שכל האירועים שנמצאים בתהליך נכתבים ליעד.
    3. הפסקת העיבוד של משימת Dataflow.
  4. מבצעים את ההעברה:

    1. מריצים את ההעברה במצב dry_run. במצב dry_run אפשר ליצור את הצהרת ה-DDL ואת הצהרת ה-SQL להעתקת נתונים, בלי להריץ אותן:CREATE TABLE

      docker run -v output:/output -ti --volumes-from gcloud-config \
      migration-service python3 ./migration/migrate_table.py dry_run \
      --project-id PROJECT_ID \
      --stream-id STREAM_ID \
      --datastream-region STREAM_REGION \
      --source-schema-name SOURCE_SCHEMA_NAME \
      --source-table-name SOURCE_TABLE_NAME \
      --bigquery-source-dataset-name BIGQUERY_SOURCE_DATASET_NAME \
      --bigquery-source-table-name BIGQUERY_SOURCE_TABLE_NAME
      

      מחליפים את מה שכתוב בשדות הבאים:

      • PROJECT_ID: המזהה הייחודי של הפרויקט ב- Google Cloud.
      • STREAM_ID: המזהה הייחודי של יעד הנתונים בסטרימינג ב-BigQuery.
      • STREAM_REGION: המיקום של הזרם, לדוגמה us-central1.
      • SOURCE_SCHEMA_NAME: השם של סכימת המקור.
      • SOURCE_TABLE_NAME: השם של טבלת המקור.
      • BIGQUERY_SOURCE_DATASET_NAME: השם של מערך הנתונים הקיים ב-BigQuery.
      • BIGQUERY_SOURCE_TABLE_NAME: השם של הטבלה הקיימת ב-BigQuery.
    2. בודקים את הקבצים .sql בקטע output/create_target_table ואת הקבצים output/copy_rows. אלה פקודות ה-SQL שיופעלו בפרויקט Google Cloud שלך:

      docker run -v output:/output -ti migration-service find output/create_target_table \
      -type f -print -exec cat {} \;
      
      docker run -v output:/output -ti migration-service find output/copy_rows \
      -type f -print -exec cat {} \;
      
    3. כדי להריץ את פקודות ה-SQL, מריצים את ההעברה במצב full. האפשרות full mode מאפשרת ליצור טבלה ב-BigQuery ולהעתיק את כל השורות מטבלת BigQuery קיימת:

      docker run -v output:/output -ti --volumes-from gcloud-config \
      migration-service python3 ./migration/migrate_table.py full \
      --project-id PROJECT_ID \
      --stream-id STREAM_ID \
      --datastream-region STREAM_REGION \
      --source-schema-name SOURCE_SCHEMA_NAME \
      --source-table-name SOURCE_TABLE_NAME \
      --bigquery-source-dataset-name BIGQUERY_SOURCE_DATASET_NAME \
      --bigquery-source-table-name BIGQUERY_SOURCE_TABLE_NAME
      
  5. ממשיכים את השידור שהושהה.

  6. פותחים את Google Cloud Logs Explorer ומחפשים יומנים של Datastream באמצעות השאילתה הבאה:

    resource.type="datastream.googleapis.com/Stream"
    resource.labels.stream_id=STREAM_ID
    

    מחפשים את היומן הבא, שבו %d הוא מספר:

    Completed writing %d records into..
    

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

העברה מצינורות אחרים

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

  docker run -v output:/output -ti --volumes-from gcloud-config \
  migration-service python3 ./migration/migrate_table.py dry_run \
  --project-id PROJECT_ID \
  --stream-id STREAM_ID \
  --datastream-region STREAM_REGION \
  --source-schema-name SOURCE_SCHEMA_NAME \
  --source-table-name SOURCE_TABLE_NAME \
  --bigquery-source-dataset-name BIGQUERY_SOURCE_DATASET_NAME \
  --bigquery-source-table-name BIGQUERY_SOURCE_TABLE_NAME

יכול להיות שסכימות הטבלאות ב-BigQuery יהיו שונות, ולכן קשה לספק הצהרת SQL אוניברסלית להעתקת שורות. אפשר להשתמש בסכימות בספריית ה-DDL של טבלת המקור (output/source_table_ddl) ובספריית ה-DDL של טבלת היעד (output/create_target_table) כדי ליצור הצהרת SQL עם המרות מתאימות בעמודות המקור.

דוגמה לפורמט של הצהרת SQL שאפשר להשתמש בה:

  INSERT INTO DESTINATION_TABLE (DESTINATION_COLUMN1, DESTINATION_COLUMN2...)
  SELECT SOURCE_COLUMN1, SOURCE_COLUMN2
  FROM SOURCE_TABLE;

מחליפים את מה שכתוב בשדות הבאים:

  • DESTINATION_TABLE: השם של טבלת היעד ב-BigQuery.
  • DESTINATION_COLUMN: שם העמודה בטבלת היעד.
  • SOURCE_COLUMN: שם העמודה בטבלת המקור.
  • SOURCE_TABLE: השם של טבלת המקור.

מגבלות

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

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