Pub/Sub to BigQuery with Python UDF template

התבנית Pub/Sub to BigQuery with Python UDF היא פייפליין זורם שקורא הודעות בפורמט JSON מ-Pub/Sub וכותב אותן בטבלה ב-BigQuery. אפשר גם לספק פונקציה בהגדרת המשתמש (UDF) שכתובה ב-Python כדי לעבד את ההודעות הנכנסות.

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

  • הטבלה ב-BigQuery צריכה להיות קיימת ולהכיל סכימה.
  • נתוני ההודעה ב-Pub/Sub צריכים להיות בפורמט JSON, או שצריך לספק פונקציה מוגדרת-משתמש (UDF) שממירה את נתוני ההודעה ל-JSON. נתוני ה-JSON צריכים להתאים לסכימת הטבלה ב-BigQuery. לדוגמה, אם המטענים הייעודיים (payloads) של JSON בפורמט {"k1":"v1", "k2":"v2"}, הטבלה ב-BigQuery צריכה להכיל שתי עמודות של מחרוזות בשמות k1 ו-k2.
  • מציינים את הפרמטר inputSubscription או inputTopic, אבל לא את שניהם.

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

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

  • ‫outputTableSpec: הטבלה ב-BigQuery שאליה רוצים לכתוב, בפורמט PROJECT_ID:DATASET_NAME.TABLE_NAME.

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

  • ‫inputTopic: נושא Pub/Sub לקריאה, בפורמט projects/<PROJECT_ID>/topics/<TOPIC_NAME>.
  • <!-- empty -->inputSubscription: המינוי ל-Pub/Sub שממנו קוראים, בפורמט projects/<PROJECT_ID>/subscriptions/<SUBCRIPTION_NAME>.
  • ‫outputDeadletterTable: הטבלה ב-BigQuery שבה משתמשים להודעות שלא הגיעו לטבלת הפלט, בפורמט PROJECT_ID:DATASET_NAME.TABLE_NAME. אם הטבלה לא קיימת, היא נוצרת כשהצינור פועל. אם הפרמטר הזה לא צוין, המערכת תשתמש בערך OUTPUT_TABLE_SPEC_error_records.
  • ‫useStorageWriteApiAtLeastOnce: כשמשתמשים ב-Storage Write API, מציין את הסמנטיקה של הכתיבה. כדי להשתמש בסמנטיקה של לפחות פעם אחת (https://beam.apache.org/documentation/io/built-in/google-bigquery/#at-least-once-semantics), צריך להגדיר את הפרמטר הזה כ-true. כדי להשתמש בסמנטיקה של פעם אחת בדיוק, מגדירים את הפרמטר לערך false. הפרמטר הזה רלוונטי רק כש-useStorageWriteApi הוא true. ערך ברירת המחדל הוא false.
  • ‫useStorageWriteApi: אם הערך הוא true, צינור עיבוד הנתונים משתמש ב-BigQuery Storage Write API‏ (https://cloud.google.com/bigquery/docs/write-api). ערך ברירת המחדל הוא false. מידע נוסף זמין במאמר "שימוש ב-Storage Write API"‏ (https://beam.apache.org/documentation/io/built-in/google-bigquery/#storage-write-api).
  • ‫numStorageWriteApiStreams: כשמשתמשים ב-Storage Write API, מציין את מספר הסטרימינג לכתיבה. אם הערך של useStorageWriteApi הוא true והערך של useStorageWriteApiAtLeastOnce הוא false, חובה להגדיר את הפרמטר הזה. ברירת המחדל: 0.
  • ‫storageWriteApiTriggeringFrequencySec: כשמשתמשים ב-Storage Write API, מציין את תדירות ההפעלה בשניות. אם הערך של useStorageWriteApi הוא true והערך של useStorageWriteApiAtLeastOnce הוא false, חובה להגדיר את הפרמטר הזה.
  • ‫pythonExternalTextTransformGcsPath: תבנית הנתיב ב-Cloud Storage לקוד Python שמכיל את הפונקציות בהגדרת המשתמש. לדוגמה, gs://your-bucket/your-function.py.
  • ‫pythonExternalTextTransformFunctionName: שם הפונקציה שצריך לקרוא לה מקובץ ה-Python. אפשר להשתמש רק באותיות, בספרות ובקווים תחתונים. לדוגמה, 'transform' or 'transform_udf1'.

פונקציה בהגדרת המשתמש (UDF)

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

מפרט הפונקציה

המפרט של ה-UDF הוא:

  • קלט: שדה הנתונים של הודעת Pub/Sub, שעבר סריאליזציה כמחרוזת JSON.
  • פלט: מחרוזת JSON שתואמת לסכימה של טבלת היעד ב-BigQuery.
  • הפעלת התבנית

    המסוף

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

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

    5. בתפריט הנפתח Dataflow template, בוחרים את התבנית Pub/Sub to BigQuery with Python UDF.
    6. בשדות הפרמטרים שמופיעים, מזינים את ערכי הפרמטרים.
    7. אופציונלי: כדי לעבור מעיבוד של פעם אחת בדיוק למצב סטרימינג של פעם אחת לפחות, בוחרים באפשרות At Least Once.
    8. לוחצים על Run job.

    gcloud

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

    gcloud dataflow flex-template run JOB_NAME \
        --template-file-gcs-location gs://dataflow-templates/VERSION/flex/PubSub_to_BigQuery_Xlang \
        --region REGION_NAME \
        --staging-location STAGING_LOCATION \
        --parameters \
    inputTopic=projects/PROJECT_ID/topics/TOPIC_NAME,\
    outputTableSpec=PROJECT_ID:DATASET.TABLE_NAME

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

    • ‫JOB_NAME: שם ייחודי למשימה, לפי בחירתכם
    • ‫REGION_NAME: האזור שבו רוצים לפרוס את משימת Dataflow, לדוגמה us-central1
    • ‫VERSION: גרסת התבנית שבה רוצים להשתמש

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

      • latest כדי להשתמש בגרסה העדכנית של התבנית, שזמינה בתיקיית ההורה ללא תאריך בקטגוריה – gs://dataflow-templates/latest/
      • שם הגרסה, כמו 2023-09-12-00_RC00, כדי להשתמש בגרסה ספציפית של התבנית, שנמצאת בתיקיית הנתונים מתאריך ספציפי בקטגוריה – gs://dataflow-templates/
    • ‫STAGING_LOCATION: המיקום להכנת קבצים מקומיים (לדוגמה, gs://your-bucket/staging)
    • ‫TOPIC_NAME: השם של נושא Pub/Sub
    • ‫DATASET: מערך הנתונים ב-BigQuery
    • ‫TABLE_NAME: שם הטבלה ב-BigQuery

    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": {
           "inputTopic": "projects/PROJECT_ID/subscriptions/SUBSCRIPTION_NAME",
           "outputTableSpec": "PROJECT_ID:DATASET.TABLE_NAME"
          },
          "containerSpecGcsPath": "gs://dataflow-templates/VERSION/flex/PubSub_to_BigQuery_Xlang",
       }
    }

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

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

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

      • latest כדי להשתמש בגרסה העדכנית של התבנית, שזמינה בתיקיית ההורה ללא תאריך בקטגוריה – gs://dataflow-templates/latest/
      • שם הגרסה, כמו 2023-09-12-00_RC00, כדי להשתמש בגרסה ספציפית של התבנית, שנמצאת בתיקיית הנתונים מתאריך ספציפי בקטגוריה – gs://dataflow-templates/
    • ‫STAGING_LOCATION: המיקום להכנת קבצים מקומיים (לדוגמה, gs://your-bucket/staging)
    • ‫TOPIC_NAME: השם של נושא Pub/Sub
    • ‫DATASET: מערך הנתונים ב-BigQuery
    • ‫TABLE_NAME: שם הטבלה ב-BigQuery

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