תבנית לאימות נתונים מ-Cloud Storage בפורמט Avro ל-Spanner

התבנית Cloud Storage Avro files to Spanner Data Validation (קובצי Avro ב-Cloud Storage לאימות נתונים ב-Spanner) היא צינור נתונים באצווה שקורא נתונים מ-Cloud Storage ומ-Spanner ומשווה אותם כדי לאמת את נכונות ההעברה.

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

  • הספרייה ב-Cloud Storage לקובצי Avro צריכה להתקיים לפני הפעלת צינור הנתונים. כדי ליצור את קובצי ה-Avro האלה, מריצים את צינור הנתונים SourceDB to Cloud Spanner עם הפרמטר gcsOutputDirectory.
  • מערך הנתונים ב-BigQuery שאליו מיועדים תוצאות האימות צריך להתקיים לפני הפעלת צינור הנתונים.
  • הטבלאות ב-Spanner צריכות להתקיים לפני הפעלת צינור הנתונים.
  • לכל הטבלאות ב-Spanner צריכה להיות סכימה תואמת (ישירות או באמצעות מיפוי סכימה).
  • כדי לאמת את המיגרציה שבוצעה על ידי הצינור SourceDB ל-Cloud Spanner, צריך להעביר ערכים זהים לכל ההגדרות המשותפות (כמו sessionFilePath,‏ schemaOverridesFilePath ו-transformationJarPath).

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

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

  • ‫gcsInputDirectory: הספרייה הזו משמשת לקריאת קובצי ה-AVRO של הרשומות שנקראו מהמקור. לדוגמה, gs://your-bucket/your-path.
  • ‫projectId: השם של פרויקט Cloud Spanner.
  • ‫instanceId: מכונת היעד של Cloud Spanner.
  • ‫databaseId: מסד הנתונים של Cloud Spanner ביעד.
  • ‫bigQueryDataset: מזהה קבוצת הנתונים ב-BigQuery שבה יאוחסנו תוצאות האימות. לדוגמה, validation_report_dataset.

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

  • ‫spannerHost: נקודת הקצה של Cloud Spanner שאליה מתקשרים בתבנית. לדוגמה, https://batch-spanner.googleapis.com. ערך ברירת המחדל הוא: https://batch-spanner.googleapis.com.
  • ‫spannerPriority: העדיפות של הבקשה לקריאות ל-Cloud Spanner. הערך צריך להיות אחד מהערכים הבאים: [HIGH,MEDIUM,LOW]. ברירת המחדל היא HIGH.
  • ‫sessionFilePath: נתיב קובץ הסשן ב-Cloud Storage שמכיל מידע על מיפוי מכלי ההעברה של Spanner. ברירת המחדל היא ריקה.
  • ‫schemaOverridesFilePath: קובץ שבו מצוינים השינויים בשם הטבלה ובשם העמודה ממקור ל-Spanner. ברירת המחדל היא ריקה.
  • ‫tableOverrides: אלה החלפות של שמות טבלאות מהמקור ל-Spanner. הם נכתבים בפורמט הבא: [{SourceTableName1, SpannerTableName1}, {SourceTableName2, SpannerTableName2}] בדוגמה הזו, הטבלה Singers ממופה ל-Vocalists והטבלה Albums ממופה ל-Records. לדוגמה, [{Singers, Vocalists}, {Albums, Records}]. ברירת המחדל היא ריקה.
  • ‫columnOverrides: אלה הם שינויים בשמות העמודות ממקור ל-Spanner. הם נכתבים בפורמט הבא: [{SourceTableName1.SourceColumnName1, SourceTableName1.SpannerColumnName1}, {SourceTableName2.SourceColumnName1, SourceTableName2.SpannerColumnName1}]. שימו לב שהערך של SourceTableName צריך להיות זהה גם במקור וגם בצמד Spanner. כדי לשנות את שמות הטבלאות, משתמשים ב-tableOverrides.בדוגמה מוצג מיפוי של SingerName ל-TalentName ושל AlbumName ל-RecordName בטבלאות Singers ו-Albums בהתאמה. לדוגמה, [{Singers.SingerName, Singers.TalentName}, {Albums.AlbumName, Albums.RecordName}]. ברירת המחדל היא ריקה.
  • ‫runId: מזהה ייחודי של הרצת האימות. אם לא תציינו שם, המערכת תשתמש בשם של משימת Dataflow. לדוגמה, run_20230101_120000.
  • ‫transformationJarPath: מיקום של קובץ jar בהתאמה אישית ב-Cloud Storage שמכיל את לוגיקת ההמרה בהתאמה אישית לעיבוד רשומות. ברירת המחדל היא ריקה.
  • ‫transformationClassName: שם המחלקה שמוגדר במלואו עם לוגיקת ההמרה המותאמת אישית. זהו שדה חובה אם מציינים את transformationJarPath. ברירת המחדל היא ריקה.
  • ‫transformationCustomParameters: מחרוזת שמכילה פרמטרים מותאמים אישית שיועברו למחלקת ההמרה המותאמת אישית. ברירת המחדל היא ריקה.
  • ‫tables: רשימה מופרדת בפסיקים של טבלאות מקור שרוצים לכלול בהרצת האימות. ברירת המחדל היא ריקה.
  • ‫tableConfigurationFilePath: נתיב קובץ ב-GCS שמכיל רשימת JSON של טבלאות מקור לאימות. זה חייב להיות קובץ JSON עם המבנה {"tableNames": ["table1", "table2"]}. אופציונלי, optionalConfigurations.<sourceTable>.spannerQuery מגדיר את שאילתת Spanner שמשמשת לקריאת הטבלה הזו, למשל כדי להגביל אותה ל-shardIds שנבחר. מזינים מפתח של טבלה ב-Spanner לפי השם שלה ב-Spanner. כללי השאילתות מפורטים בקטע 'אימות של קבוצת משנה של רסיסים' בקובץ README.md של המודול. ברירת המחדל היא ריקה.
  • ‫shardIds: רשימה מופרדת בפסיקים של מזהי שברים לוגיים (המזהים שמשמשים את התבנית sourcedb-to-spanner, שמופיעים כספרייה <table>/<shardId>/ בפלט של Avro). אם מגדירים את המאפיין הזה, רק הרסיסים האלה מאומתים. טבלאות עם קובץ סשן ShardIdColumn מסוננות לפי העמודה הזו. כל טבלה אחרת בהיקף צריכה להכיל spannerQuery ב-tableConfigurationFilePath, אחרת העבודה תיכשל. לדוגמה, shard_001,shard_007. ברירת המחדל היא ריקה.

הרצת התבנית

המסוף

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

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

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

‫CLI של gcloud

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

gcloud dataflow flex-template run JOB_NAME \
    --template-file-gcs-location=gs://dataflow-templates/VERSION/flex/Avro_to_Spanner_Data_Validator \
    --region=REGION_NAME \
    --parameters \
       gcsInputDirectory=PATH_TO_AVRO_FILES,\
       projectId=PROJECT_ID,\
       instanceId=INSTANCE_ID,\
       databaseId=DATABASE_ID,\
       bigQueryDataset=BIGQUERY_DATASET

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

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

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

    • latest כדי להשתמש בגרסה העדכנית של התבנית, שזמינה בתיקיית ההורה ללא תאריך בדלי – gs://dataflow-templates/latest/
    • שם הגרסה, כמו 2023-09-12-00_RC00, כדי להשתמש בגרסה ספציפית של התבנית, שאפשר למצוא מקוננת בתיקיית נתונים מתאריך ספציפי המתאימה בדלי – gs://dataflow-templates/
  • ‫REGION_NAME: האזור שבו רוצים לפרוס את משימת Dataflow, לדוגמה: us-central1
  • ‫PATH_TO_AVRO_FILES: הנתיב ב-Cloud Storage לקובצי Avro.
  • ‫PROJECT_ID: מזהה הפרויקט ב-Spanner.
  • ‫INSTANCE_ID: מזהה מכונת היעד של Spanner.
  • ‫DATABASE_ID: מזהה מסד הנתונים של Spanner ביעד.
  • ‫BIGQUERY_DATASET: מזהה מערך הנתונים ב-BigQuery של תוצאות האימות.

API

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

POST https://dataflow.googleapis.com/v1b3/projects/PROJECT_ID/locations/LOCATION/flexTemplates:launch
{
   "launchParameter": {
     "jobName": "JOB_NAME",
     "parameters": {
       "gcsInputDirectory": "PATH_TO_AVRO_FILES",
       "projectId": "PROJECT_ID",
       "instanceId": "INSTANCE_ID",
       "databaseId": "DATABASE_ID",
       "bigQueryDataset": "BIGQUERY_DATASET"
     },
     "containerSpecGcsPath": "gs://dataflow-templates/VERSION/flex/Avro_to_Spanner_Data_Validator"
  }
}

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

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

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

    • latest כדי להשתמש בגרסה העדכנית של התבנית, שזמינה בתיקיית ההורה ללא תאריך בדלי – gs://dataflow-templates/latest/
    • שם הגרסה, כמו 2023-09-12-00_RC00, כדי להשתמש בגרסה ספציפית של התבנית, שאפשר למצוא מקוננת בתיקיית נתונים מתאריך ספציפי המתאימה בדלי – gs://dataflow-templates/
  • ‫LOCATION: האזור שבו רוצים לפרוס את משימת Dataflow, לדוגמה: us-central1
  • ‫PATH_TO_AVRO_FILES: הנתיב ב-Cloud Storage לקובצי Avro.
  • ‫PROJECT_ID: מזהה הפרויקט ב-Spanner.
  • ‫INSTANCE_ID: מזהה מכונת היעד של Spanner.
  • ‫DATABASE_ID: מזהה מסד הנתונים של Spanner ביעד.
  • ‫BIGQUERY_DATASET: מזהה מערך הנתונים ב-BigQuery של תוצאות האימות.