תבנית 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, מופעלת בקרה על זרימת נתונים של כתיבה בכמות גדולה, שתשתמש באות של השרת כדי לווסת את הכתיבות. ברירת המחדל היא: false.

הפעלת התבנית

המסוף

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

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

  5. בתפריט הנפתח Dataflow template (תבנית של העברת נתונים), בוחרים באפשרות the BigQuery to Bigtable template.
  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/BigQuery_to_Bigtable \
    --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/BigQuery_to_Bigtable",
   }
}

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

  • 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.

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