התראות על הפעלת שירות העברת הנתונים ל-BigQuery

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

התראות Pub/Sub

התראות Pub/Sub משמשות לשליחת מידע על הפעלות של העברות לנושא Pub/Sub. התראות Pub/Sub מופעלות על ידי הרצות העברה שהושלמו במצבים הבאים:

  • SUCCEEDED
  • FAILED
  • CANCELLED

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

לפני שמתחילים

לפני שמגדירים התראות על הפעלת העברות ב-Pub/Sub, צריך:

  1. להפעיל את ממשק ה-API של Pub/Sub בשביל הפרויקט שיקבל התראות.

    הפעלת ה-API

  2. לוודא שיש לכם את ההרשאות המתאימות בפרויקט שיקבל התראות:

    • אם אתם הבעלים של הפרויקט שיקבל התראות, סביר להניח שיש לכם את ההרשאה הנדרשת.

    • אם אתם מתכננים ליצור נושאים לקבלת התראות, צריכות להיות לכם ההרשאות pubsub.topics.create.

    • בין שאתם מתכננים להשתמש בנושאים חדשים או בנושאים קיימים, צריכות להיות לכם ההרשאות pubsub.topics.getIamPolicy ו-pubsub.topics.setIamPolicy. אם אתם יוצרים נושא, בדרך כלל כבר יש לכם הרשאה לכך. לתפקיד הבא שמוגדר מראש ב-IAM יש את ההרשאות pubsub.topics.getIamPolicy ו-pubsub.topics.setIamPolicy: pubsub.admin. מידע נוסף זמין במאמר בקרת גישה ב-Pub/Sub.

  3. לוודא שיש לכם נושא Pub/Sub שאליו אתם רוצים לשלוח התראות.

פורמט ההתראות

ההתראות שנשלחות לנושא Pub/Sub כוללות שני חלקים:

  • המאפיינים: קבוצה של צמדי מפתח/ערך שמתארים את האירוע.
  • המטען הייעודי (Payload) : מחרוזת שמכילה את המטא-נתונים של האובייקט שהשתנה.

מאפיינים

המאפיינים הם צמדי מפתח/ערך שכלולים בכל ההתראות שנשלחות משירות העברת הנתונים ל-BigQuery לנושא Pub/Sub. ההתראות תמיד כוללות את הקבוצה הבאה של צמדי מפתח/ערך, בלי קשר למטען הייעודי (Payload) של ההתראה:

שם המאפיין דוגמה תיאור
eventType TRANSFER_RUN_FINISHED סוג האירוע שהתרחש. ‫TRANSFER_RUN_FINISHED הוא הערך האפשרי היחיד.
payloadFormat JSON_API_V1 הפורמט של המטען הייעודי (Payload) של האובייקט. ‫JSON_API_V1 הוא הערך האפשרי היחיד.

Payload

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

סוג המטען הייעודי (Payload) תיאור
JSON_API_V1 המטען הייעודי (Payload) יהיה מחרוזת בתקן UTF-8 שעברה סריאליזציה ל-JSON, שתכיל את ייצוג המשאב של TransferRun.

התראות באימייל

התראות באימייל שולחות הודעות אימייל קריאות לאנשים כשהרצת העברה נכשלת. ההודעות האלה נשלחות לכתובת האימייל של האדמין של ההעברה – החשבון שבו הוגדרה ההעברה. אי אפשר להגדיר את תוכן ההודעה או את הנמען שלה.

אם השתמשתם בחשבון שירות כדי לאמת הגדרת העברה, יכול להיות שאין לכם גישה לאימייל כדי לקבל התראות באימייל על הפעלת העברה. במקרים כאלה, מומלץ להגדיר התראות Pub/Sub כדי לקבל התראות על הפעלת ההעברה.

כדי לשלוח התראות באימייל על הפעלת העברות למשתמשים נוספים, צריך להגדיר כללי העברת אימיילים להפצת ההודעות. אם אתם משתמשים ב-Gmail, אתם יכולים להעביר הודעות מ-Gmail לחשבון אחר באופן אוטומטי.

ההתראה באימייל נשלחת על ידי שירות העברת הנתונים ל-BigQuery, והיא מכילה פרטים על הגדרות ההעברה, על הרצת ההעברה וקישור להיסטוריית ההרצה של ההרצה שנכשלה. לדוגמה:

From: bigquery-data-transfer-service-noreply@google.com
To: TRANSFER_ADMIN
Title: BigQuery Data Transfer Service — Transfer Run Failure —
DISPLAY_NAME

Transfer Configuration
Display Name: DISPLAY_NAME
Source: DATA_SOURCE
Destination: PROJECT_ID

Run Summary
Run: RUN_NAME
Schedule Time: SCHEDULE_TIME
Run Time: RUN_TIME
View Run History


Google LLC 1600 Amphitheatre Parkway, Mountain View, CA 94043

This email was sent because you indicated you are willing to receive Run
Notifications from the BigQuery Data Transfer Service. If you do not wish to
receive such emails in the future, click View Transfer Configuration and
un-check the "Send E-mail Notifications" option.

איך מפעילים או עורכים את ההתראות

כדי להפעיל התראות או לערוך התראה קיימת, בוחרים באחת מהאפשרויות הבאות:

המסוף

  1. נכנסים לדף BigQuery במסוף Google Cloud .

    לדף של BigQuery

  2. בתפריט הניווט, לוחצים על העברות נתונים.

  3. כדי להפעיל התראות על העברה חדשה, לוחצים על Create transfer. כדי לשנות את ההתראות של העברה קיימת, לוחצים על שם ההעברה ואז על Edit.

  4. בקטע Notification options, לוחצים על המתגים לצד סוגי ההתראות שרוצים להפעיל.

    • התראות באימייל: כשמפעילים את האפשרות הזו, האדמין של ההעברה מקבל התראה באימייל אם הרצת ההעברה נכשלת.
    • התראות Pub/Sub: כשמפעילים את האפשרות הזו, בוחרים את שם הנושא או לוחצים על Create a topic. האפשרות הזו מגדירה התראות על הפעלת Pub/Sub להעברה.

Java

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Java במדריך למתחילים של BigQuery באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של BigQuery Java API.

כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

import com.google.api.gax.rpc.ApiException;
import com.google.cloud.bigquery.datatransfer.v1.CreateTransferConfigRequest;
import com.google.cloud.bigquery.datatransfer.v1.DataTransferServiceClient;
import com.google.cloud.bigquery.datatransfer.v1.ProjectName;
import com.google.cloud.bigquery.datatransfer.v1.TransferConfig;
import com.google.protobuf.Struct;
import com.google.protobuf.Value;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

// Sample to get run notification
public class RunNotification {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    final String projectId = "MY_PROJECT_ID";
    final String datasetId = "MY_DATASET_ID";
    final String pubsubTopicName = "MY_TOPIC_NAME";
    final String query =
        "SELECT CURRENT_TIMESTAMP() as current_time, @run_time as intended_run_time, "
            + "@run_date as intended_run_date, 17 as some_integer";
    Map<String, Value> params = new HashMap<>();
    params.put("query", Value.newBuilder().setStringValue(query).build());
    params.put(
        "destination_table_name_template",
        Value.newBuilder().setStringValue("my_destination_table_{run_date}").build());
    params.put("write_disposition", Value.newBuilder().setStringValue("WRITE_TRUNCATE").build());
    params.put("partitioning_field", Value.newBuilder().build());
    TransferConfig transferConfig =
        TransferConfig.newBuilder()
            .setDestinationDatasetId(datasetId)
            .setDisplayName("Your Scheduled Query Name")
            .setDataSourceId("scheduled_query")
            .setParams(Struct.newBuilder().putAllFields(params).build())
            .setSchedule("every 24 hours")
            .setNotificationPubsubTopic(pubsubTopicName)
            .build();
    runNotification(projectId, transferConfig);
  }

  public static void runNotification(String projectId, TransferConfig transferConfig)
      throws IOException {
    try (DataTransferServiceClient dataTransferServiceClient = DataTransferServiceClient.create()) {
      ProjectName parent = ProjectName.of(projectId);
      CreateTransferConfigRequest request =
          CreateTransferConfigRequest.newBuilder()
              .setParent(parent.toString())
              .setTransferConfig(transferConfig)
              .build();
      TransferConfig config = dataTransferServiceClient.createTransferConfig(request);
      System.out.println(
          "\nScheduled query with run notification created successfully :" + config.getName());
    } catch (ApiException ex) {
      System.out.print("\nScheduled query with run notification was not created." + ex.toString());
    }
  }
}

Python

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Python במדריך למתחילים של BigQuery באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של BigQuery Python API.

כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

transfer_config_name = "projects/1234/locations/us/transferConfigs/abcd"
pubsub_topic = "projects/PROJECT-ID/topics/TOPIC-ID"
from google.cloud import bigquery_datatransfer
from google.protobuf import field_mask_pb2

transfer_client = bigquery_datatransfer.DataTransferServiceClient()

transfer_config = bigquery_datatransfer.TransferConfig(name=transfer_config_name)
transfer_config.notification_pubsub_topic = pubsub_topic
update_mask = field_mask_pb2.FieldMask(paths=["notification_pubsub_topic"])

transfer_config = transfer_client.update_transfer_config(
    {"transfer_config": transfer_config, "update_mask": update_mask}
)

print(f"Updated config: '{transfer_config.name}'")
print(f"Notification Pub/Sub topic: '{transfer_config.notification_pubsub_topic}'")

תמחור של התראות על הרצה

אם תגדירו התראות על הרצה של Pub/Sub, תחויבו על השימוש ב-Pub/Sub. מידע נוסף זמין בדף התמחור של Pub/Sub.

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