תבנית BigQuery ל-Bigtable

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

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

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

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

  • readIdColumn: השם של העמודה ב-BigQuery שבה מאוחסן המזהה הייחודי של השורה.
  • bigtableWriteInstanceId: המזהה של מכונת Bigtable שמכילה את הטבלה.
  • bigtableWriteTableId: המזהה של טבלת Bigtable שאליה רוצים לכתוב.
  • bigtableWriteColumnFamily: השם של קבוצת העמודות בטבלת Bigtable שאליה ייכתבו הנתונים.

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

  • timestampColumn: השם של העמודה ב-BigQuery שתשמש כחותמת הזמן של התא בעמודה ב-Bigtable. הערך חייב להיות מדויק עד אלפית השנייה, למשל INT64 / Long. אם שורה לא מכילה את השדה, המערכת תשתמש בחותמת הזמן של הכתיבה שמוגדרת כברירת מחדל. העמודה שצוינה לא תיכלל כחלק מהשורה ב-Bigtable כעמודה נפרדת.
  • skipNullValues: דגל שמציין אם ערכי null יכולים להתפשט כערך ריק או שהעמודה תדלג לחלוטין כדי להתאים לפורמט של טבלה דלילה ב-Bigtable. במקרים שבהם הפעולה הזו מובילה לשורה ריקה, למשל rowkey תקין אבל ללא עמודות, אי אפשר לכתוב את השורה ב-Bigtable והמערכת תדלג עליה. ברירת המחדל היא: false.
  • inputTableSpec: הטבלה ב-BigQuery שממנה קוראים. אם מציינים את inputTableSpec, התבנית קוראת את הנתונים ישירות מאחסון BigQuery באמצעות BigQuery Storage Read API‏ (https://cloud.google.com/bigquery/docs/reference/storage). מידע על מגבלות ב-Storage Read API זמין בכתובת https://cloud.google.com/bigquery/docs/reference/storage#limitations. חובה לציין inputTableSpec או query. אם מגדירים את שני הפרמטרים, התבנית משתמשת בפרמטר query. לדוגמה, <BIGQUERY_PROJECT>:<DATASET_NAME>.<INPUT_TABLE>.
  • outputDeadletterTable: הטבלה ב-BigQuery להודעות שלא הצליחו להגיע לטבלת הפלט. אם טבלה לא קיימת, היא נוצרת במהלך הפעלת צינור הנתונים. אם לא מציינים ערך, המערכת משתמשת בערך <outputTableSpec>_error_records. לדוגמה, <PROJECT_ID>:<DATASET_NAME>.<DEADLETTER_TABLE>.
  • query: שאילתת ה-SQL שמשמשת לקריאת נתונים מ-BigQuery. אם מערך הנתונים ב-BigQuery נמצא בפרויקט אחר ממשימת Dataflow, צריך לציין את השם המלא של מערך הנתונים בשאילתת ה-SQL, למשל: <PROJECT_ID>.<DATASET_NAME>.<TABLE_NAME>. כברירת מחדל, הפרמטר query משתמש ב-GoogleSQL (https://cloud.google.com/bigquery/docs/introduction-sql), אלא אם useLegacySql הוא true. חובה לציין inputTableSpec או query. אם מגדירים את שני הפרמטרים, התבנית משתמשת בפרמטר query. לדוגמה, select * from sampledb.sample_table.
  • useLegacySql: מגדירים את הערך ל-true כדי להשתמש ב-SQL מדור קודם. הפרמטר הזה רלוונטי רק כשמשתמשים בפרמטר query. ברירת המחדל היא false.
  • queryLocation: נדרש כשקוראים מתצוגה מורשית ללא הרשאה לטבלה הבסיסית. לדוגמה, US.
  • queryTempDataset: באמצעות האפשרות הזו, אפשר להגדיר מערך נתונים קיים כדי ליצור את הטבלה הזמנית לאחסון תוצאות השאילתה. לדוגמה, temp_dataset.
  • KMSEncryptionKey: אם קוראים מ-BigQuery באמצעות מקור שאילתה, משתמשים במפתח Cloud KMS הזה כדי להצפין טבלאות זמניות שנוצרו. לדוגמה, projects/your-project/locations/global/keyRings/your-keyring/cryptoKeys/your-key.
  • bigtableRpcAttemptTimeoutMs: הזמן הקצוב לתפוגה של כל ניסיון RPC ב-Bigtable, באלפיות השנייה.
  • bigtableRpcTimeoutMs: הזמן הקצוב הכולל לתפוגת פעולת Bigtable RPC באלפיות השנייה.
  • bigtableAdditionalRetryCodes: קודי הניסיון החוזר הנוספים. לדוגמה, RESOURCE_EXHAUSTED,DEADLINE_EXCEEDED.
  • bigtableWriteAppProfile: המזהה של פרופיל האפליקציה ב-Bigtable שבו רוצים להשתמש לייצוא. אם לא מציינים פרופיל אפליקציה, Bigtable משתמש בפרופיל האפליקציה שמוגדר כברירת מחדל (https://cloud.google.com/bigtable/docs/app-profiles#default-app-profile) של המופע.
  • bigtableWriteProjectId: המזהה של פרויקט הענן ב-Google Cloud שמכיל את מופע Bigtable שאליו ייכתבו הנתונים.
  • bigtableBulkWriteLatencyTargetMs: יעד זמן האחזור של Bigtable באלפיות השנייה לצורך הגבלת קצב העברת הנתונים על סמך זמן האחזור.
  • bigtableBulkWriteMaxRowKeyCount: המספר המקסימלי של מפתחות שורות בפעולת כתיבה של קבוצת נתונים ב-Bigtable.
  • bigtableBulkWriteMaxRequestSizeBytes: מספר הבייטים המקסימלי שייכלל בכל פעולת כתיבה באצווה ב-Bigtable.
  • bigtableBulkWriteFlowControl: אם המאפיין מוגדר כ-true, מופעלת בקרה על זרימת נתונים של כתיבה בכמות גדולה, שמשתמשת באות של השרת כדי לווסת נתונים (throttle) את הכתיבות. ברירת המחדל היא: false.

הרצת התבנית

המסוף

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

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

  5. בתפריט הנפתח Dataflow template (תבנית Dataflow), בוחרים את התבנית BigQuery to Bigtable (מ-BigQuery ל-Bigtable).
  6. בשדות הפרמטרים שמופיעים, מזינים את ערכי הפרמטרים.
  7. לוחצים על הפעלת העבודה.

gcloud

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

gcloud dataflow flex-template run JOB_NAME \
    --project=PROJECT_ID \
    --region=REGION_NAME \
    --template-file-gcs-location=gs://dataflow-templates-REGION_NAME/VERSION/flex/ \
    --parameters \
readIdColumn=READ_COLUMN_ID,\
inputTableSpec=INPUT_TABLE_SPEC,\
bigtableWriteInstanceId=BIGTABLE_INSTANCE_ID,\
bigtableWriteTableId=BIGTABLE_TABLE_ID,\
bigtableWriteColumnFamily=BIGTABLE_COLUMN_FAMILY

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

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

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

    • latest כדי להשתמש בגרסה העדכנית של התבנית, שזמינה בתיקיית האב ללא תאריך בדלי – gs://dataflow-templates-REGION_NAME/latest/
    • שם הגרסה, כמו 2023-09-12-00_RC00, כדי להשתמש בגרסה ספציפית של התבנית, שאפשר למצוא אותה בתיקיית האב המתאימה עם התאריך בדלי – gs://dataflow-templates-REGION_NAME/
  • READ_COLUMN_ID: עמודת המזהה הייחודי ב-BigQuery.
  • INPUT_TABLE_SPEC: שם הטבלה ב-BigQuery.
  • BIGTABLE_INSTANCE_ID: מזהה מופע Bigtable.
  • BIGTABLE_TABLE_ID: מזהה הטבלה ב-Bigtable.
  • BIGTABLE_COLUMN_FAMILY: קבוצת העמודות בטבלת Bigtable.

API

כדי להריץ את התבנית באמצעות API בארכיטקטורת REST, שולחים בקשת 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": {
          "readIdColumn": "READ_COLUMN_ID",
          "inputTableSpec": "INPUT_TABLE_SPEC",
          "bigtableWriteInstanceId": "BIGTABLE_INSTANCE_ID",
          "bigtableWriteTableId": "BIGTABLE_TABLE_ID",
          "bigtableWriteColumnFamily": "BIGTABLE_COLUMN_FAMILY"
      },
      "containerSpecGcsPath": "gs://dataflow-templates-LOCATION/VERSION/flex/",
   }
}

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

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

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

    • latest כדי להשתמש בגרסה העדכנית של התבנית, שזמינה בתיקיית האב ללא תאריך בדלי – gs://dataflow-templates-REGION_NAME/latest/
    • שם הגרסה, כמו 2023-09-12-00_RC00, כדי להשתמש בגרסה ספציפית של התבנית, שאפשר למצוא אותה בתיקיית האב המתאימה עם התאריך בדלי – gs://dataflow-templates-REGION_NAME/
  • READ_COLUMN_ID: עמודת המזהה הייחודי ב-BigQuery.
  • INPUT_TABLE_SPEC: שם הטבלה ב-BigQuery.
  • BIGTABLE_INSTANCE_ID: מזהה מופע Bigtable.
  • BIGTABLE_TABLE_ID: מזהה הטבלה ב-Bigtable.
  • BIGTABLE_COLUMN_FAMILY: קבוצת העמודות בטבלת Bigtable.

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