תבנית של סנכרון שינויים בזרמי נתונים של Spanner ל-Cloud Storage

תבנית Spanner change streams to Cloud Storage היא צינור להזרמת נתונים (pipeline) שמעביר בסטרימינג רשומות של שינויים בנתוני Spanner וכותב אותן לקטגוריה של Cloud Storage באמצעות Dataflow Portable Runner.

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

שימו לב שאפשר לצמצם את זמן האחזור ברשת ואת עלויות התעבורה ברשת על ידי הפעלת משימת Dataflow מאותו אזור שבו נמצאת מכונת Spanner או קטגוריית Cloud Storage. אם אתם משתמשים במקורות, ביעדים, במיקומים של קבצים זמניים או במיקומים של קבצים להעברה שנמצאים מחוץ לאזור של העבודה, יכול להיות שהנתונים שלכם יישלחו בין אזורים. מידע נוסף על אזורי Dataflow

מידע נוסף על מקורות לשינויים, איך יוצרים צינורות עיבוד נתונים של Dataflow למקורות לשינויים ושיטות מומלצות

הדרישות לגבי צינורות עיבוד נתונים

  • מופע Spanner חייב להתקיים לפני שמריצים את צינור הנתונים.
  • מסד הנתונים של Spanner צריך להתקיים לפני שמריצים את צינור הנתונים.
  • מופע המטא-נתונים של Spanner צריך להתקיים לפני שמריצים את צינור העיבוד.
  • מסד הנתונים של המטא-נתונים של Spanner צריך להתקיים לפני שמריצים את צינור הנתונים.
  • השינוי ב-Spanner צריך להתבצע לפני שמריצים את צינור הנתונים.
  • קטגוריית הפלט של Cloud Storage צריכה להתקיים לפני שמריצים את צינור הנתונים.

פרמטרים של תבניות

פרמטרים נדרשים

  • spannerInstanceId: מזהה מופע Spanner שממנו ייקראו נתונים של מקורות לשינויים.
  • spannerDatabase: מסד הנתונים של Spanner שממנו יקראו נתונים של מקורות נתונים.
  • spannerMetadataInstanceId: מזהה מופע Spanner לשימוש בטבלת המטא-נתונים של מחבר מקורות הנתונים.
  • spannerMetadataDatabase: מסד הנתונים של Spanner שבו יש להשתמש עבור טבלת המטא-נתונים של מחבר הנתונים של שינוי הזרמים.
  • spannerChangeStreamName: השם של Spanner change stream שממנו ייקראו הנתונים.
  • gcsOutputDirectory: הנתיב והקידומת של שם הקובץ לכתיבת קובצי פלט. חייב להסתיים בלוכסן. הפורמט של DateTime משמש לניתוח נתיב הספרייה עבור מעצבי תאריכים ושעות. לדוגמה, gs://your-bucket/your-path.

פרמטרים אופציונליים

  • spannerProjectId: המזהה של פרויקט Google Cloud שמכיל את מסד הנתונים של Spanner שממנו רוצים לקרוא את נתוני ה-Change Streams. בפרויקט הזה נוצר גם טבלת המטא-נתונים של המחבר של זרמי השינויים. ברירת המחדל של הפרמטר הזה היא הפרויקט שבו צינור ה-Dataflow פועל.
  • spannerDatabaseRole: תפקיד מסד הנתונים ב-Spanner שבו יש להשתמש כשמריצים את התבנית. הפרמטר הזה נדרש רק אם משתמש ה-IAM שמריץ את התבנית הוא משתמש עם בקרת גישה פרטנית. לתפקיד במסד הנתונים צריכה להיות הרשאת SELECT בפיד השינויים והרשאת EXECUTE בפונקציית הקריאה של פיד השינויים. מידע נוסף זמין במאמר בנושא בקרת גישה ברמת גרנולריות גבוהה לזרמי שינויים (https://cloud.google.com/spanner/docs/fgac-change-streams).
  • spannerMetadataTableName: השם של טבלת המטא-נתונים של מחבר Spanner change streams שבה רוצים להשתמש. אם לא מספקים את המידע הזה, נוצרת באופן אוטומטי טבלת מטא-נתונים של זרמי שינויים ב-Spanner במהלך הביצוע של צינור הנתונים. כשמעדכנים צינור קיים, צריך לציין ערך לפרמטר הזה. אחרת, אל תשתמשו בפרמטר הזה.
  • startTimestamp: תאריך ושעת ההתחלה, כולל, לשימוש בקריאת נתוני שינויים, בפורמט Ex-2021-10-12T07:20:50.52Z. ברירת המחדל היא חותמת הזמן של תחילת הצינור, כלומר השעה הנוכחית.
  • endTimestamp: תאריך ושעת הסיום, כולל, לשימוש בקריאת שינויים בנתונים. לדוגמה, Ex-2021-10-12T07:20:50.52Z. ברירת המחדל היא זמן אינסופי בעתיד.
  • spannerHost: נקודת הקצה של Cloud Spanner שאליה מתקשרים בתבנית. משמש רק לבדיקה. לדוגמה, https://spanner.googleapis.com. ברירת המחדל היא: https://spanner.googleapis.com.
  • outputFileFormat: הפורמט של קובץ הפלט ב-Cloud Storage. הפורמטים המותרים הם TEXT ו-AVRO. ברירת המחדל היא AVRO.
  • windowDuration: משך החלון הוא המרווח שבו הנתונים נכתבים לספריית הפלט. מגדירים את משך הזמן על סמך קצב העברת הנתונים של צינור עיבוד הנתונים. לדוגמה, כדי להשיג תפוקה גבוהה יותר, יכול להיות שיהיה צורך להקטין את גודל החלון כדי שהנתונים יתאימו לזיכרון. ברירת המחדל היא 5m (חמש דקות), והמינימום הוא 1s (שנייה אחת). הפורמטים המותרים הם: [int]s (לשניות, לדוגמה: 5s),‏ [int]m (לדקות, לדוגמה: 12m),‏ [int]h (לשעות, לדוגמה: 2h). לדוגמה, 5m.
  • rpcPriority: העדיפות של הבקשה לשיחות Spanner. הערך חייב להיות HIGH,‏ MEDIUM או LOW. ברירת המחדל היא HIGH.
  • spannerChangeStreamTvfNameList: רשימה של שמות של Spanner Change Stream TVF, מופרדים באמצעות נקודה-פסיק, שאותם רוצים לשאול ולאחד. ברירת המחדל היא ריק.
  • outputFilenamePrefix: הקידומת שתוצב בכל קובץ עם חלון. לדוגמה, output-. ברירת המחדל היא: output.
  • numShards: המספר המקסימלי של רסיסי פלט שנוצרים במהלך הכתיבה. מספר גבוה יותר של רסיסים פירושו תפוקה גבוהה יותר לכתיבה ב-Cloud Storage, אבל יכול להיות שעלות צבירת הנתונים תהיה גבוהה יותר ברסיסים כשמעבדים קבצים של פלט Cloud Storage. ברירת המחדל היא 20.

הרצת התבנית

המסוף

  1. עוברים לדף Create job from template (יצירת משימה מתבנית) ב-Dataflow.
  2. כניסה לדף Create job from template
  3. בשדה שם המשימה, מזינים שם ייחודי למשימה.
  4. אופציונלי: בשדה Regional endpoint (נקודת קצה אזורית), בוחרים ערך מהתפריט הנפתח. אזור ברירת המחדל הוא us-central1.

    רשימת האזורים שבהם אפשר להריץ משימת Dataflow מופיעה במאמר בנושא מיקומי Dataflow.

  5. בתפריט הנפתח Dataflow template (תבנית Dataflow), בוחרים בתבנית Cloud Spanner change streams to Google Cloud Storage (העברת נתוני שינויים מ-Cloud Spanner אל Google Cloud Storage).
  6. בשדות הפרמטרים שמופיעים, מזינים את ערכי הפרמטרים.
  7. לוחצים על הפעלת העבודה.

gcloud

במעטפת או בטרמינל, מריצים את התבנית:

gcloud dataflow flex-template run JOB_NAME \
    --template-file-gcs-location=gs://dataflow-templates-REGION_NAME/VERSION/flex/ \
    --region REGION_NAME \
    --parameters \
spannerInstanceId=SPANNER_INSTANCE_ID,\
spannerDatabase=SPANNER_DATABASE,\
spannerMetadataInstanceId=SPANNER_METADATA_INSTANCE_ID,\
spannerMetadataDatabase=SPANNER_METADATA_DATABASE,\
spannerChangeStreamName=SPANNER_CHANGE_STREAM,\
gcsOutputDirectory=GCS_OUTPUT_DIRECTORY

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

  • JOB_NAME: שם ייחודי של המשימה לפי בחירתכם
  • VERSION: הגרסה של התבנית שרוצים להשתמש בה

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

    • latest כדי להשתמש בגרסה העדכנית של התבנית, שזמינה בתיקיית ההורה ללא תאריך בדלי – gs://dataflow-templates-REGION_NAME/latest/‎
    • שם הגרסה, כמו 2023-09-12-00_RC00, כדי להשתמש בגרסה ספציפית של התבנית, שאפשר למצוא אותה בתיקיית האב המתאימה עם התאריך בדלי – gs://dataflow-templates-REGION_NAME/
  • REGION_NAME: האזור שבו רוצים לפרוס את עבודת Dataflow, לדוגמה: us-central1
  • SPANNER_INSTANCE_ID: מזהה המכונה של Cloud Spanner
  • SPANNER_DATABASE: מסד נתונים של Cloud Spanner
  • SPANNER_METADATA_INSTANCE_ID: מזהה מופע של מטא נתונים ב-Cloud Spanner
  • SPANNER_METADATA_DATABASE: מסד נתונים של מטא נתונים ב-Cloud Spanner
  • SPANNER_CHANGE_STREAM: Cloud Spanner change stream
  • GCS_OUTPUT_DIRECTORY: מיקום הקובץ של פלט נתוני השינויים

API

כדי להריץ את התבנית באמצעות REST API, שולחים בקשת HTTP POST. מידע נוסף על ה-API ועל היקפי ההרשאות שלו זמין במאמר projects.templates.launch.

POST https://dataflow.googleapis.com/v1b3/projects/PROJECT_ID/locations/LOCATION/flexTemplates:launch
{
   "launch_parameter": {
      "jobName": "JOB_NAME",
      "parameters": {
          "spannerInstanceId": "SPANNER_INSTANCE_ID",
          "spannerDatabase": "SPANNER_DATABASE",
          "spannerMetadataInstanceId": "SPANNER_METADATA_INSTANCE_ID",
          "spannerMetadataDatabase": "SPANNER_METADATA_DATABASE",
          "spannerChangeStreamName": "SPANNER_CHANGE_STREAM",
          "gcsOutputDirectory": "GCS_OUTPUT_DIRECTORY"
      },
      "containerSpecGcsPath": "gs://dataflow-templates-LOCATION/VERSION/flex/",
   }
}

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

  • PROJECT_ID: מזהה הפרויקט שבו רוצים להריץ את משימת Dataflow Google Cloud
  • JOB_NAME: שם ייחודי של המשימה לפי בחירתכם
  • VERSION: הגרסה של התבנית שרוצים להשתמש בה

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

    • latest כדי להשתמש בגרסה העדכנית של התבנית, שזמינה בתיקיית ההורה ללא תאריך בדלי – gs://dataflow-templates-REGION_NAME/latest/‎
    • שם הגרסה, כמו 2023-09-12-00_RC00, כדי להשתמש בגרסה ספציפית של התבנית, שאפשר למצוא אותה בתיקיית האב המתאימה עם התאריך בדלי – gs://dataflow-templates-REGION_NAME/
  • LOCATION: האזור שבו רוצים לפרוס את עבודת Dataflow, לדוגמה: us-central1
  • SPANNER_INSTANCE_ID: מזהה המכונה של Cloud Spanner
  • SPANNER_DATABASE: מסד נתונים של Cloud Spanner
  • SPANNER_METADATA_INSTANCE_ID: מזהה מופע של מטא נתונים ב-Cloud Spanner
  • SPANNER_METADATA_DATABASE: מסד נתונים של מטא נתונים ב-Cloud Spanner
  • SPANNER_CHANGE_STREAM: Cloud Spanner change stream
  • GCS_OUTPUT_DIRECTORY: מיקום הקובץ של פלט נתוני השינויים

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