תזמון שאילתות

בדף הזה מוסבר איך לתזמן שאילתות חוזרות ב-BigQuery.

אפשר לתזמן את הפעלת השאילתות על בסיס חוזר. שאילתות מתוזמנות צריכות להיכתב ב-GoogleSQL, שיכול לכלול הצהרות של שפת הגדרת נתונים (DDL) ושל שפת טיפול בנתונים (DML). אפשר לארגן את תוצאות השאילתה לפי תאריך ושעה באמצעות הגדרת פרמטרים למחרוזת השאילתה ולטבלת היעד.

כשיוצרים או מעדכנים את לוח הזמנים של שאילתה, השעה המתוזמנת של השאילתה מומרת מהשעון המקומי לשעון UTC. שעון UTC לא מושפע משעון קיץ.

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

מגבלות

  • שאילתות מתוזמנות שמופעלות בדיוק בתחילת השעה (לדוגמה, בשעה 09:00) עשויות להפעיל את עצמן כמה פעמים, מה שעלול לגרום לתוצאות לא רצויות כמו שכפול נתונים מפעולות של INSERT. כדי למנוע תוצאות לא רצויות כאלה, כדאי להשתמש בלוח זמנים שאינו עגול (לדוגמה, 08:58 או 09:03).

ההרשאות הנדרשות

כדי לתזמן שאילתה, אתם צריכים את הרשאות ה-IAM הבאות:

  • כדי ליצור את ההעברה, צריך לקבל את ההרשאות bigquery.transfers.update ו-bigquery.datasets.get, או את ההרשאות bigquery.jobs.create,‏ bigquery.transfers.get ו-bigquery.datasets.get.

  • כדי להריץ שאילתה מתוזמנת, אתם צריכים:

    • הרשאות bigquery.datasets.get במערך הנתונים של היעד
    • bigquery.jobs.create

כדי לשנות או למחוק שאילתה מתוזמנת, צריך להיות בעלים של השאילתה המתוזמנת עם ההרשאה bigquery.transfers.update וbigquery.transfers.get, או עם ההרשאה bigquery.jobs.create.

תפקיד ה-IAM המוגדר מראש אדמין של BigQuery ‏ (roles/bigquery.admin) כולל את ההרשאות שדרושות לכם כדי לתזמן או לשנות שאילתה.

מידע נוסף על תפקידי IAM ב-BigQuery זמין במאמר תפקידים והרשאות מוגדרים מראש.

כדי ליצור או לעדכן שאילתות מתוזמנות שמופעלות על ידי חשבון שירות, צריך להיות לכם גישה לחשבון השירות הזה. מידע נוסף על מתן תפקיד בחשבון שירות למשתמשים זמין במאמר תפקיד משתמש בחשבון שירות. כדי לבחור חשבון שירות בממשק המשתמש של שאילתות מתוזמנות במסוףCloud de Confiance , צריך את הרשאות ה-IAM הבאות:

  • iam.serviceAccounts.list כדי להציג רשימה של חשבונות השירות.
  • iam.serviceAccountUser כדי להקצות חשבון שירות לשאילתה מתוזמנת.

אפשרויות להגדרות אישיות

בקטעים הבאים מתוארות אפשרויות ההגדרה.

מחרוזת שאילתה

מחרוזת השאילתה צריכה להיות תקינה ולכלול GoogleSQL. כל הרצה של שאילתה מתוזמנת יכולה לקבל את הפרמטרים הבאים של השאילתה.

כדי לבדוק באופן ידני מחרוזת שאילתה עם הפרמטרים @run_time ו-@run_date לפני תזמון שאילתה, משתמשים בכלי שורת הפקודה של BigQuery.

פרמטרים זמינים

פרמטר סוג GoogleSQL ערך
@run_time TIMESTAMP מיוצג לפי זמן UTC. בשביל שאילתות שמתוזמנות באופן קבוע, run_time מייצג את שעת ההפעלה המיועדת. לדוגמה, אם השאילתה המתוזמנת מוגדרת ל'כל 24 שעות', ההפרש run_time בין שתי שאילתות עוקבות הוא בדיוק 24 שעות, למרות שזמן הביצוע בפועל עשוי להשתנות מעט.
@run_date DATE מייצג תאריך לוגי ביומן.

דוגמה

הפרמטר @run_time הוא חלק ממחרוזת השאילתה בדוגמה הזו, ששולחת שאילתה למערך נתונים ציבורי בשם hacker_news.stories.

SELECT @run_time AS time,
  title,
  author,
  text
FROM `bigquery-public-data.hacker_news.stories`
LIMIT
  1000

טבלת היעד

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

אם אתם משתמשים בשאילתת DDL או DML, במסוף Cloud de Confiance , בוחרים את מיקום העיבוד או האזור. צריך לציין מיקום עיבוד עבור שאילתות DDL או DML שיוצרות את טבלת היעד.

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

שאילתות יכולות להפנות לטבלאות מפרויקטים שונים וממערכי נתונים שונים. כשמגדירים שאילתה מתוזמנת, לא צריך לכלול את מערך הנתונים של היעד בשם הטבלה. מציינים את מערך נתוני היעד בנפרד.

מערך הנתונים והטבלה של היעד בשאילתה מתוזמנת צריכים להיות באותו פרויקט כמו השאילתה המתוזמנת.

העדפות כתיבה

העדפת הכתיבה שבוחרים קובעת איך תוצאות השאילתה ייכתבו לטבלת יעד קיימת.

  • WRITE_TRUNCATE: אם הטבלה קיימת, BigQuery מחליף את נתוני הטבלה.
  • WRITE_APPEND: אם הטבלה קיימת, אפליקציית BigQuery מוסיפה את הנתונים לטבלה.

אם משתמשים בשאילתת DDL או DML, אי אפשר להשתמש באפשרות של העדפת כתיבה.

יצירה, חיתוך או הוספה של טבלת יעד מתבצעים רק אם מערכת BigQuery מצליחה להשלים את השאילתה. פעולות של יצירה, חיתוך או הוספה מתרחשות כעדכון אטומי אחד בסיום העבודה.

סידור באשכולות

שאילתות מתוזמנות יכולות ליצור אשכולות רק בטבלאות חדשות, כשהטבלה נוצרת באמצעות הצהרת DDL CREATE TABLE AS SELECT. אפשר לעיין במאמר יצירת טבלה מסודרת באשכולות מתוצאת שאילתה בדף שימוש בהצהרות של שפת הגדרת נתונים.

אפשרויות חלוקה למחיצות

שאילתות מתוזמנות יכולות ליצור טבלאות יעד עם מחיצות או בלי מחיצות. אפשר להשתמש בחלוקה למחיצות במסוף Cloud de Confiance , בכלי שורת הפקודה של BigQuery ובשיטות ההגדרה של ה-API. אם משתמשים בשאילתת DDL או DML עם חלוקה למחיצות, משאירים את השדה 'חלוקה למחיצות של טבלת היעד' ריק.

אפשר להשתמש בסוגים הבאים של חלוקת טבלאות למחיצות ב-BigQuery:

כדי ליצור טבלה עם מחיצות באמצעות שאילתה מתוזמנת במסוףCloud de Confiance , משתמשים באפשרויות הבאות:

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

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

  • כדי להשתמש בחלוקה למחיצות בזמן ההטמעה, משאירים את השדה של חלוקת טבלת היעד למחיצות ריק ומציינים את חלוקת התאריכים למחיצות בשם של טבלת היעד. לדוגמה, mytable${run_date}. מידע נוסף זמין במאמר בנושא תחביר של תבניות פרמטרים.

פרמטרים זמינים

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

פרמטר סוג התבנית ערך
run_time חותמת זמן בפורמט לפי שעון UTC, בהתאם ללוח הזמנים. בשביל שאילתות שמתוזמנות באופן קבוע, run_time מייצג את שעת ההפעלה המיועדת. לדוגמה, אם השאילתה המתוזמנת מוגדרת ל'כל 24 שעות', run_timeההפרש בין שתי שאילתות עוקבות הוא בדיוק 24 שעות, למרות שזמן הביצוע בפועל עשוי להשתנות מעט

.מידע נוסף זמין במאמר TransferRun.runTime.
run_date מחרוזת תאריך התאריך של הפרמטר run_time בפורמט הבא: %Y-%m-%d. לדוגמה: 2018-01-01. הפורמט הזה תואם לטבלאות מחולקות למחיצות (Partitions) לפי זמני כתיבת הנתונים.

מערכת תבניות

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

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

תחביר התבניות תומך בתבניות מחרוזות בסיסיות ובהזזת זמן. הפרמטרים מוזכרים בפורמטים הבאים:

  • {run_date}
  • {run_time[+\-offset]|"time_format"}
פרמטר מטרה
run_date הפרמטר הזה מוחלף בתאריך בפורמט YYYYMMDD.
run_time הפרמטר הזה תומך במאפיינים הבאים:


offset
הזמן שחלף, המבוטא בשעות (h), דקות (m) ושניות (s), לפי הסדר הזה. אין תמיכה בערך
ימים (d).
מותר להשתמש במספרים עשרוניים, לדוגמה: 1.5h.

time_format
מחרוזת פורמט. הפרמטרים הנפוצים ביותר לעיצוב הם שנים (%Y), חודשים (%m) וימים (%d). ‫
בטבלאות עם חלוקה למחיצות, הסיומת הנדרשת היא YYYYMMDD – זה שווה ל-‎%Y%m%d.

מידע נוסף על עיצוב רכיבי תאריך ושעה

הערות לגבי השימוש:
  • אסור להוסיף רווח לבן בין run_time,‏ offset ו-time format.
  • כדי לכלול בספרייה סוגריים מסולסלים, אפשר להשתמש בתו בריחה (escape) '\{' and '\}'.
  • כדי לכלול מירכאות או קו אנכי ב-time_format, כמו "YYYY|MM|DD", אפשר להשתמש בתו בריחה במחרוזת הפורמט כך: '\"' או '\|'.

דוגמאות ליצירת תבניות של פרמטרים

בדוגמאות האלה אפשר לראות איך מציינים שמות של טבלאות יעד עם פורמטים שונים של זמן, ואיך משנים את זמן הריצה.
run_time (UTC) פרמטר מבוסס-תבנית שם טבלת היעד של הפלט
2018-02-15 00:00:00 mytable mytable
2018-02-15 00:00:00 mytable_{run_time|"%Y%m%d"} mytable_20180215
2018-02-15 00:00:00 mytable_{run_time+25h|"%Y%m%d"} mytable_20180216
2018-02-15 00:00:00 mytable_{run_time-1h|"%Y%m%d"} mytable_20180214
2018-02-15 00:00:00 mytable_{run_time+1.5h|"%Y%m%d%H"}
או
mytable_{run_time+90m|"%Y%m%d%H"}
mytable_2018021501
2018-02-15 00:00:00 {run_time+97s|"%Y%m%d"}_mytable_{run_time+97s|"%H%M%S"} 20180215_mytable_000137

שימוש בחשבון שירות

אפשר להגדיר שאילתה מתוזמנת שתאומת כחשבון שירות. חשבון שירות הוא חשבון מיוחד שמשויך לפרויקט שלכם ב- Cloud de Confiance by S3NS . חשבון השירות יכול להריץ משימות, כמו שאילתות מתוזמנות או צינורות לעיבוד ברצף (batch processing), באמצעות פרטי הכניסה שלו לשירות ולא באמצעות פרטי הכניסה של משתמש קצה.

מידע נוסף על אימות באמצעות חשבונות שירות זמין במאמר מבוא לאימות.

ציון מפתח הצפנה בשאילתות מתוזמנות

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

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

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

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

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

הגדרה של שאילתות מתוזמנות באמצעות חשבון שירות

Java

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

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

לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.

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 create a scheduled query with service account
public class CreateScheduledQueryWithServiceAccount {

  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 serviceAccount = "MY_SERVICE_ACCOUNT";
    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")
            .build();
    createScheduledQueryWithServiceAccount(projectId, transferConfig, serviceAccount);
  }

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

Python

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

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

לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.

from google.cloud import bigquery_datatransfer

transfer_client = bigquery_datatransfer.DataTransferServiceClient()

# The project where the query job runs is the same as the project
# containing the destination dataset.
project_id = "your-project-id"
dataset_id = "your_dataset_id"

# This service account will be used to execute the scheduled queries. Omit
# this request parameter to run the query as the user with the credentials
# associated with this client.
service_account_name = "abcdef-test-sa@abcdef-test.iam.gserviceaccount.com"

# Use standard SQL syntax for the query.
query_string = """
SELECT
  CURRENT_TIMESTAMP() as current_time,
  @run_time as intended_run_time,
  @run_date as intended_run_date,
  17 as some_integer
"""

parent = transfer_client.common_project_path(project_id)

transfer_config = bigquery_datatransfer.TransferConfig(
    destination_dataset_id=dataset_id,
    display_name="Your Scheduled Query Name",
    data_source_id="scheduled_query",
    params={
        "query": query_string,
        "destination_table_name_template": "your_table_{run_date}",
        "write_disposition": "WRITE_TRUNCATE",
        "partitioning_field": "",
    },
    schedule="every 24 hours",
)

transfer_config = transfer_client.create_transfer_config(
    bigquery_datatransfer.CreateTransferConfigRequest(
        parent=parent,
        transfer_config=transfer_config,
        service_account_name=service_account_name,
    )
)

print("Created scheduled query '{}'".format(transfer_config.name))

הצגת הסטטוס של שאילתה מתוזמנת

המסוף

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

BQ

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

מזינים את הפקודה bq ls ומספקים את דגל ההעברה --transfer_config. נדרשים גם הדגלים הבאים:

  • --transfer_location

לדוגמה:

bq ls \
--transfer_config \
--transfer_location=us

כדי להציג את הפרטים של שאילתה מתוזמנת אחת, מזינים את הפקודה bq show ומספקים את transfer_path של אותה שאילתה מתוזמנת או של הגדרת ההעברה.

לדוגמה:

bq show \
--transfer_config \
projects/862514376110/locations/us/transferConfigs/5dd12f26-0000-262f-bc38-089e0820fe38

API

משתמשים בשיטה projects.locations.transferConfigs.list ומספקים מופע של המשאב TransferConfig.

Java

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

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

לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.

import com.google.api.gax.rpc.ApiException;
import com.google.cloud.bigquery.datatransfer.v1.DataTransferServiceClient;
import com.google.cloud.bigquery.datatransfer.v1.ListTransferConfigsRequest;
import com.google.cloud.bigquery.datatransfer.v1.ProjectName;
import java.io.IOException;

// Sample to get list of transfer config
public class ListTransferConfigs {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    final String projectId = "MY_PROJECT_ID";
    listTransferConfigs(projectId);
  }

  public static void listTransferConfigs(String projectId) throws IOException {
    try (DataTransferServiceClient dataTransferServiceClient = DataTransferServiceClient.create()) {
      ProjectName parent = ProjectName.of(projectId);
      ListTransferConfigsRequest request =
          ListTransferConfigsRequest.newBuilder().setParent(parent.toString()).build();
      dataTransferServiceClient
          .listTransferConfigs(request)
          .iterateAll()
          .forEach(config -> System.out.print("Success! Config ID :" + config.getName() + "\n"));
    } catch (ApiException ex) {
      System.out.println("Config list not found due to error." + ex.toString());
    }
  }
}

Python

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

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

לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.

import google.api_core.exceptions
from google.cloud import bigquery_datatransfer_v1

client = bigquery_datatransfer_v1.DataTransferServiceClient()


def list_transfer_configs(project_id: str, location: str) -> None:
    """Lists transfer configurations in a given project.

    This sample demonstrates how to list all transfer configurations in a project.

    Args:
        project_id: The Google Cloud project ID.
        location: The geographic location of the transfer config, for example "us-central1"
    """

    parent = client.common_location_path(project_id, location)

    try:
        for config in client.list_transfer_configs(parent=parent):
            print(f"Name: {config.name}")
            print(f"Display Name: {config.display_name}")
            print(f"Data source: {config.data_source_id}")
            print(f"Destination dataset: {config.destination_dataset_id}")
            if "time_based_schedule" in config.schedule_options_v2:
                print(
                    f"Schedule: {config.schedule_options_v2.time_based_schedule.schedule}"
                )
            else:
                print("Schedule: None")
            print("---")
    except google.api_core.exceptions.NotFound:
        print(
            f"Error: Project '{project_id}' not found or contains no transfer configs."
        )
    except google.api_core.exceptions.PermissionDenied:
        print(
            f"Error: Permission denied for project '{project_id}'. Please ensure you have the correct permissions."
        )

עדכון שאילתות מתוזמנות

המסוף

כדי לעדכן שאילתה מתוזמנת:

  1. בתפריט הניווט, לוחצים על Scheduled queries (שאילתות מתוזמנות) או על Scheduling (תזמון).
  2. ברשימת השאילתות המתוזמנות, לוחצים על שם השאילתה שרוצים לשנות.
  3. בדף פרטים של שאילתה מתוזמנת שנפתח, לוחצים על עריכה. עריכת הפרטים של שאילתה מתוזמנת.
  4. אופציונלי: משנים את הטקסט של השאילתה בחלונית העריכה של השאילתה.
  5. לוחצים על תזמון שאילתה ואז על עדכון שאילתה מתוזמנת.
  6. אופציונלי: משנים אפשרויות אחרות לקביעת לוח הזמנים של השאילתה.
  7. לוחצים על עדכון.

BQ

שאילתות מתוזמנות הן סוג של העברה. כדי לעדכן שאילתה מתוזמנת, אפשר להשתמש בכלי שורת הפקודה של BigQuery כדי ליצור הגדרת העברה.

מזינים את הפקודה bq update עם הדגל --transfer_config הנדרש.

דגלים אופציונליים:

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

  • --schedule היא התדירות שבה רוצים שהשאילתה תפעל. אם לא מציינים את --schedule, ברירת המחדל היא 'כל 24 שעות' על סמך זמן היצירה.

  • המדיניות --service_account_name תקפה רק אם המדיניות --update_credentials מוגדרת. מידע נוסף זמין במאמר בנושא עדכון פרטי הכניסה של שאילתות מתוזמנות.

  • --target_dataset (אופציונלי בשאילתות DDL ו-DML) היא דרך חלופית לתת שם למערך היעד של תוצאות השאילתה, כשמשתמשים בה עם שאילתות DDL ו-DML.

  • --display_name הוא השם של השאילתה המתוזמנת.

  • --params הפרמטרים של הגדרת ההעברה שנוצרה בפורמט JSON. לדוגמה: ‎--params='{"param":"param_value"}'‎.

  • --destination_kms_key מציין את מזהה משאב המפתח של מפתח Cloud KMS אם משתמשים במפתח הצפנה בניהול הלקוח (CMEK) להעברה הזו. למידע על האופן שבו מפתחות הצפנה בניהול הלקוח (CMEK) פועלים עם שירות העברת הנתונים ל-BigQuery, אפשר לעיין במאמר ציון מפתח הצפנה בשאילתות מתוזמנות.

bq update \
--target_dataset=dataset \
--display_name=name \
--params='parameters'
--transfer_config \
RESOURCE_NAME

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

  • dataset. מערך נתוני היעד להגדרת ההעברה. הפרמטר הזה הוא אופציונלי בשאילתות DDL ו-DML. הוא נדרש לכל שאר השאילתות.
  • name. השם המוצג של הגדרת ההעברה. השם המוצג יכול להיות כל ערך שתוכלו לזהות בהמשך אם תצטרכו לשנות את השאילתה.
  • parameters. מכיל את הפרמטרים של הגדרת ההעברה שנוצרה בפורמט JSON. לדוגמה: --params='{"param":"param_value"}'.
    • בשביל שאילתה מתוזמנת, צריך לספק את הפרמטר query.
    • הפרמטר destination_table_name_template הוא השם של טבלת היעד. הפרמטר הזה הוא אופציונלי בשאילתות DDL ו-DML. הוא נדרש לכל שאר השאילתות.
    • בפרמטר write_disposition, אפשר לבחור באפשרות WRITE_TRUNCATE כדי לחתוך (לשכתב) את טבלת היעד, או באפשרות WRITE_APPEND כדי לצרף את תוצאות השאילתה לטבלת היעד. הפרמטר הזה הוא אופציונלי בשאילתות DDL ו-DML. הוא נדרש לכל שאר השאילתות.
  • אופציונלי: הערך --destination_kms_key מציין את מזהה משאב המפתח של מפתח Cloud KMS, לדוגמה, projects/project_name/locations/us/keyRings/key_ring_name/cryptoKeys/key_name.
  • RESOURCE_NAME: שם המשאב של ההעברה (נקרא גם הגדרות ההעברה). אם לא ידוע לכם שם המשאב של ההעברה, תוכלו למצוא אותו באמצעות: bq ls --transfer_config --transfer_location=location.

לדוגמה, הפקודה הבאה מעדכנת העברה של שאילתה מתוזמנת בשם My Scheduled Query באמצעות השאילתה SELECT 1 from mydataset.test. טבלת היעד mytable נחתכת בכל כתיבה, ומערך נתוני היעד הוא mydataset:

bq update \
--target_dataset=mydataset \
--display_name='My Scheduled Query' \
--params='{"query":"SELECT 1 from mydataset.test","destination_table_name_template":"mytable","write_disposition":"WRITE_TRUNCATE"}'
--transfer_config \
projects/myproject/locations/us/transferConfigs/1234a123-1234-1a23-1be9-12ab3c456de7

API

משתמשים בשיטה projects.transferConfigs.patch ומספקים את שם המשאב של ההעברה באמצעות הפרמטר transferConfig.name. אם אתם לא יודעים את שם המשאב של ההעברה, אתם יכולים להשתמש בפקודה bq ls --transfer_config --transfer_location=location כדי להציג רשימה של כל ההעברות, או להתקשר לשיטה projects.locations.transferConfigs.list ולספק את מזהה הפרויקט באמצעות הפרמטר parent.

Java

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

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

לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.

import com.google.api.gax.rpc.ApiException;
import com.google.cloud.bigquery.datatransfer.v1.DataTransferServiceClient;
import com.google.cloud.bigquery.datatransfer.v1.TransferConfig;
import com.google.cloud.bigquery.datatransfer.v1.UpdateTransferConfigRequest;
import com.google.protobuf.FieldMask;
import com.google.protobuf.util.FieldMaskUtil;
import java.io.IOException;

// Sample to update transfer config.
public class UpdateTransferConfig {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String configId = "MY_CONFIG_ID";
    TransferConfig transferConfig =
        TransferConfig.newBuilder()
            .setName(configId)
            .setDisplayName("UPDATED_DISPLAY_NAME")
            .build();
    FieldMask updateMask = FieldMaskUtil.fromString("display_name");
    updateTransferConfig(transferConfig, updateMask);
  }

  public static void updateTransferConfig(TransferConfig transferConfig, FieldMask updateMask)
      throws IOException {
    try (DataTransferServiceClient dataTransferServiceClient = DataTransferServiceClient.create()) {
      UpdateTransferConfigRequest request =
          UpdateTransferConfigRequest.newBuilder()
              .setTransferConfig(transferConfig)
              .setUpdateMask(updateMask)
              .build();
      TransferConfig updateConfig = dataTransferServiceClient.updateTransferConfig(request);
      System.out.println("Transfer config updated successfully :" + updateConfig.getDisplayName());
    } catch (ApiException ex) {
      System.out.print("Transfer config was not updated." + ex.toString());
    }
  }
}

Python

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

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

לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.

import google.api_core.exceptions
from google.cloud import bigquery_datatransfer_v1
from google.protobuf import field_mask_pb2


client = bigquery_datatransfer_v1.DataTransferServiceClient()


def update_transfer_config(
    project_id: str,
    location: str,
    transfer_config_id: str,
) -> None:
    """Updates a data transfer configuration.

    This sample shows how to update the display name for a transfer
    configuration.

    Args:
        project_id: The Google Cloud project ID.
        location: The geographic location of the transfer config, for example "us-central1"
        transfer_config_id: The transfer configuration ID
    """
    transfer_config_name = client.transfer_config_path(
        project=f"{project_id}/locations/{location}",
        transfer_config=transfer_config_id,
    )

    transfer_config = bigquery_datatransfer_v1.types.TransferConfig(
        name=transfer_config_name,
        display_name="My New Transfer Config display name",
    )
    update_mask = field_mask_pb2.FieldMask(paths=["display_name"])

    try:
        response = client.update_transfer_config(
            transfer_config=transfer_config,
            update_mask=update_mask,
        )

        print(f"Updated transfer config: {response.name}")
        print(f"New display name: {response.display_name}")
    except google.api_core.exceptions.NotFound:
        print(f"Error: Transfer config '{transfer_config_name}' not found.")

עדכון שאילתות מתוזמנות עם הגבלות בעלות

אם תנסו לעדכן שאילתה מתוזמנת שלא בבעלותכם, יכול להיות שהעדכון ייכשל ותוצג הודעת השגיאה הבאה:

Cannot modify restricted parameters without taking ownership of the transfer configuration.

הבעלים של השאילתה המתוזמנת הוא המשתמש שמשויך לשאילתה המתוזמנת או המשתמש שיש לו גישה לחשבון השירות שמשויך לשאילתה המתוזמנת. אפשר לראות את המשתמש המשויך בפרטי ההגדרה של השאילתה המתוזמנת. במאמר עדכון פרטי הכניסה של שאילתה מתוזמנת מוסבר איך לעדכן את השאילתה המתוזמנת כדי לקבל בעלות. כדי לתת למשתמשים גישה לחשבון שירות, צריך להיות לכם התפקיד Service Account User.

הפרמטרים שהבעלים הגביל בשאילתות מתוזמנות הם:

  • הטקסט של השאילתה
  • מערך נתוני היעד
  • תבנית השם של טבלת היעד

עדכון פרטי הכניסה של שאילתה מתוזמנת

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

אלה כמה מצבים נוספים שבהם יכול להיות שיהיה צורך לעדכן את פרטי הכניסה:

  • אתם רוצים להריץ שאילתות על נתונים ב-Google Drive בשאילתה מתוזמנת.
  • מופיעה השגיאה INVALID_USER כשמנסים לתזמן את השאילתה:

    Error code 5 : Authentication failure: User Id not found. Error code: INVALID_USERID

  • מופיעה הודעת השגיאה הבאה לגבי פרמטרים מוגבלים כשמנסים לעדכן את השאילתה:

    Cannot modify restricted parameters without taking ownership of the transfer configuration.

המסוף

כדי לרענן את פרטי הכניסה הקיימים בשאילתה מתוזמנת:

  1. איתור הסטטוס של שאילתה מתוזמנת

  2. לוחצים על הלחצן עוד ובוחרים באפשרות עדכון פרטי הכניסה.

    עדכון פרטי הכניסה של שאילתה מתוזמנת.

  3. השינוי ייכנס לתוקף תוך 10 עד 20 דקות. יכול להיות שתצטרכו לנקות את המטמון של הדפדפן.

BQ

שאילתות מתוזמנות הן סוג של העברה. כדי לעדכן את פרטי הכניסה של שאילתה מתוזמנת, אפשר להשתמש בכלי שורת הפקודה של BigQuery כדי לעדכן את הגדרות ההעברה.

מזינים את הפקודה bq update ומספקים את דגל ההעברה --transfer_config. נדרשים גם הדגלים הבאים:

  • --update_credentials

סימון אופציונלי:

  • --service_account_name משמש לאימות השאילתה המתוזמנת באמצעות חשבון שירות במקום באמצעות חשבון המשתמש האישי.

לדוגמה, הפקודה הבאה מעדכנת את ההגדרות של העברה מתוזמנת של שאילתה כדי לבצע אימות בתור חשבון שירות:

bq update \
--update_credentials \
--service_account_name=abcdef-test-sa@abcdef-test.s3ns.iam.gserviceaccount.com \
--transfer_config \
projects/myproject/locations/us/transferConfigs/1234a123-1234-1a23-1be9-12ab3c456de7

Java

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

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

לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.

import com.google.api.gax.rpc.ApiException;
import com.google.cloud.bigquery.datatransfer.v1.DataTransferServiceClient;
import com.google.cloud.bigquery.datatransfer.v1.TransferConfig;
import com.google.cloud.bigquery.datatransfer.v1.UpdateTransferConfigRequest;
import com.google.protobuf.FieldMask;
import com.google.protobuf.util.FieldMaskUtil;
import java.io.IOException;

// Sample to update credentials in transfer config.
public class UpdateCredentials {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String configId = "MY_CONFIG_ID";
    String serviceAccount = "MY_SERVICE_ACCOUNT";
    TransferConfig transferConfig = TransferConfig.newBuilder().setName(configId).build();
    FieldMask updateMask = FieldMaskUtil.fromString("service_account_name");
    updateCredentials(transferConfig, serviceAccount, updateMask);
  }

  public static void updateCredentials(
      TransferConfig transferConfig, String serviceAccount, FieldMask updateMask)
      throws IOException {
    try (DataTransferServiceClient dataTransferServiceClient = DataTransferServiceClient.create()) {
      UpdateTransferConfigRequest request =
          UpdateTransferConfigRequest.newBuilder()
              .setTransferConfig(transferConfig)
              .setUpdateMask(updateMask)
              .setServiceAccountName(serviceAccount)
              .build();
      dataTransferServiceClient.updateTransferConfig(request);
      System.out.println("Credentials updated successfully");
    } catch (ApiException ex) {
      System.out.print("Credentials was not updated." + ex.toString());
    }
  }
}

Python

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

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

לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.

from google.cloud import bigquery_datatransfer
from google.protobuf import field_mask_pb2

transfer_client = bigquery_datatransfer.DataTransferServiceClient()

service_account_name = "abcdef-test-sa@abcdef-test.iam.gserviceaccount.com"
transfer_config_name = "projects/1234/locations/us/transferConfigs/abcd"

transfer_config = bigquery_datatransfer.TransferConfig(name=transfer_config_name)

transfer_config = transfer_client.update_transfer_config(
    {
        "transfer_config": transfer_config,
        "update_mask": field_mask_pb2.FieldMask(paths=["service_account_name"]),
        "service_account_name": service_account_name,
    }
)

print("Updated config: '{}'".format(transfer_config.name))

הגדרת הפעלה ידנית בתאריכים היסטוריים

בנוסף לתזמון של שאילתה להפעלה בעתיד, אפשר גם להפעיל אותה באופן ידני באופן מיידי. הפעלת ריצה מיידית נדרשת אם השאילתה משתמשת בפרמטר run_date והיו בעיות במהלך ריצה קודמת.

לדוגמה, כל יום בשעה 09:00 אתם שולחים שאילתה לטבלת מקור כדי לאחזר שורות שתואמות לתאריך הנוכחי. עם זאת, גיליתם שהנתונים לא נוספו לטבלת המקור בשלושת הימים האחרונים. במצב כזה, אפשר להגדיר את השאילתה כך שתפעל על נתונים היסטוריים בטווח תאריכים שתציינו. השאילתה מופעלת באמצעות שילובים של הפרמטרים run_date ו-run_time שתואמים לתאריכים שהגדרתם בשאילתה המתוזמנת.

אחרי הגדרת שאילתה מתוזמנת, כך מריצים את השאילתה באמצעות טווח תאריכים היסטורי:

המסוף

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

כפתור לתזמון מילוי חוסרים.

כל זמני הריצה שנבחרו נמצאים בטווח התאריכים שבחרתם, כולל התאריך הראשון ולא כולל התאריך האחרון.

הגדרת תאריכים היסטוריים

דוגמה 1

השאילתה המתוזמנת מוגדרת להפעלה ב-every day 09:00 Pacific Time. חסרים לך נתונים מ-1 בינואר, מ-2 בינואר ומ-3 בינואר. בוחרים את טווח התאריכים ההיסטורי הבא:

Start Time = 1/1/19
End Time = 1/4/19

השאילתה מורצת באמצעות הפרמטרים run_date ו-run_time שמתאימים לזמנים הבאים:

  • ‫1/1/19 09:00 שעון החוף המערבי
  • ‫1/2/19 09:00 שעון החוף המערבי
  • ‫1/3/19 09:00 שעון החוף המערבי

דוגמה 2

השאילתה המתוזמנת מוגדרת להפעלה ב-every day 23:00 Pacific Time. חסרים לך נתונים מ-1 בינואר, מ-2 בינואר ומ-3 בינואר. בוחרים את טווחי התאריכים ההיסטוריים הבאים (התאריכים המאוחרים יותר נבחרים כי השעה 23:00 לפי שעון החוף הפסיפי היא תאריך אחר לפי שעון UTC):

Start Time = 1/2/19
End Time = 1/5/19

השאילתה מורצת באמצעות הפרמטרים run_date ו-run_time שמתאימים לזמנים הבאים:

  • ‫1/2/19 06:00 UTC או 1/1/2019 23:00 לפי שעון החוף המערבי
  • ‫1/3/19 06:00 UTC או 1/2/2019 23:00 לפי שעון החוף המערבי
  • ‫1/4/19 06:00 UTC או 1/3/2019 23:00 לפי שעון החוף המערבי

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

BQ

כדי להריץ את השאילתה באופן ידני על טווח תאריכים היסטורי:

מזינים את הפקודה bq mk ומספקים את דגל ההרצה של ההעברה --transfer_run. נדרשים גם הדגלים הבאים:

  • --start_time
  • --end_time
bq mk \
--transfer_run \
--start_time='start_time' \
--end_time='end_time' \
resource_name

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

  • start_time וגם end_time חותמות זמן שמסתיימות באות Z או שמכילות היסט תקין מאזור הזמן. דוגמאות:
    • 2017-08-19T12:11:35.00Z
    • 2017-05-25T00:00:00+00:00
  • resource_name. שם המשאב של השאילתה המתוזמנת (או ההעברה). שם המשאב נקרא גם הגדרת ההעברה.

לדוגמה, הפקודה הבאה מתזמנת מילוי חוסרים למשאב של שאילתה מתוזמנת (או להגדרת העברה): projects/myproject/locations/us/transferConfigs/1234a123-1234-1a23-1be9-12ab3c456de7.

  bq mk \
  --transfer_run \
  --start_time 2017-05-25T00:00:00Z \
  --end_time 2017-05-25T00:00:00Z \
  projects/myproject/locations/us/transferConfigs/1234a123-1234-1a23-1be9-12ab3c456de7

מידע נוסף זמין במאמר bq mk --transfer_run.

API

משתמשים בשיטה projects.locations.transferConfigs.scheduleRun ומספקים נתיב של משאב TransferConfig.

Java

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

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

לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.

import com.google.api.gax.rpc.ApiException;
import com.google.cloud.bigquery.datatransfer.v1.DataTransferServiceClient;
import com.google.cloud.bigquery.datatransfer.v1.ScheduleTransferRunsRequest;
import com.google.cloud.bigquery.datatransfer.v1.ScheduleTransferRunsResponse;
import com.google.protobuf.Timestamp;
import java.io.IOException;
import org.threeten.bp.Clock;
import org.threeten.bp.Instant;
import org.threeten.bp.temporal.ChronoUnit;

// Sample to run schedule back fill for transfer config
public class ScheduleBackFill {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String configId = "MY_CONFIG_ID";
    Clock clock = Clock.systemDefaultZone();
    Instant instant = clock.instant();
    Timestamp startTime =
        Timestamp.newBuilder()
            .setSeconds(instant.minus(5, ChronoUnit.DAYS).getEpochSecond())
            .setNanos(instant.minus(5, ChronoUnit.DAYS).getNano())
            .build();
    Timestamp endTime =
        Timestamp.newBuilder()
            .setSeconds(instant.minus(2, ChronoUnit.DAYS).getEpochSecond())
            .setNanos(instant.minus(2, ChronoUnit.DAYS).getNano())
            .build();
    scheduleBackFill(configId, startTime, endTime);
  }

  public static void scheduleBackFill(String configId, Timestamp startTime, Timestamp endTime)
      throws IOException {
    try (DataTransferServiceClient client = DataTransferServiceClient.create()) {
      ScheduleTransferRunsRequest request =
          ScheduleTransferRunsRequest.newBuilder()
              .setParent(configId)
              .setStartTime(startTime)
              .setEndTime(endTime)
              .build();
      ScheduleTransferRunsResponse response = client.scheduleTransferRuns(request);
      System.out.println("Schedule backfill run successfully :" + response.getRunsCount());
    } catch (ApiException ex) {
      System.out.print("Schedule backfill was not run." + ex.toString());
    }
  }
}

Python

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

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

לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.

import datetime

from google.cloud.bigquery_datatransfer_v1 import (
    DataTransferServiceClient,
    StartManualTransferRunsRequest,
)

# Create a client object
client = DataTransferServiceClient()

# Replace with your transfer configuration name
transfer_config_name = "projects/1234/locations/us/transferConfigs/abcd"
now = datetime.datetime.now(datetime.timezone.utc)
start_time = now - datetime.timedelta(days=5)
end_time = now - datetime.timedelta(days=2)

# Some data sources, such as scheduled_query only support daily run.
# Truncate start_time and end_time to midnight time (00:00AM UTC).
start_time = datetime.datetime(
    start_time.year, start_time.month, start_time.day, tzinfo=datetime.timezone.utc
)
end_time = datetime.datetime(
    end_time.year, end_time.month, end_time.day, tzinfo=datetime.timezone.utc
)

requested_time_range = StartManualTransferRunsRequest.TimeRange(
    start_time=start_time,
    end_time=end_time,
)

# Initialize request argument(s)
request = StartManualTransferRunsRequest(
    parent=transfer_config_name,
    requested_time_range=requested_time_range,
)

# Make the request
response = client.start_manual_transfer_runs(request=request)

# Handle the response
print("Started manual transfer runs:")
for run in response.runs:
    print(f"backfill: {run.run_time} run: {run.name}")

הגדרת התראות לגבי שאילתות מתוזמנות

אפשר להגדיר מדיניות התראות עבור שאילתות מתוזמנות על סמך מדדים של מספר השורות. מידע נוסף מפורט במאמר הגדרת התראות באמצעות שאילתות מתוזמנות.

מחיקת שאילתות מתוזמנות

המסוף

כדי למחוק שאילתה מתוזמנת בדף Scheduled queries במסוף Cloud de Confiance :

  1. בתפריט הניווט, לוחצים על Scheduled queries (שאילתות מתוזמנות).
  2. ברשימת השאילתות המתוזמנות, לוחצים על השם של השאילתה המתוזמנת שרוצים למחוק.
  3. בדף פרטים של שאילתה מתוזמנת, לוחצים על מחיקה.

    מחיקת שאילתה מתוזמנת בדף &#39;שאילתות מתוזמנות&#39;.

אפשר גם למחוק שאילתה מתוזמנת בדף תזמון של מסוף Cloud de Confiance :

  1. בתפריט הניווט, לוחצים על Scheduling (תזמון).
  2. ברשימת השאילתות המתוזמנות, לוחצים על התפריט פעולות של השאילתה המתוזמנת שרוצים למחוק.
  3. בוחרים את האפשרות Delete.

    מחיקה של שאילתה מתוזמנת בדף &#39;תזמון&#39;.

Java

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

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

לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.

import com.google.api.gax.rpc.ApiException;
import com.google.cloud.bigquery.datatransfer.v1.DataTransferServiceClient;
import com.google.cloud.bigquery.datatransfer.v1.DeleteTransferConfigRequest;
import java.io.IOException;

// Sample to delete a transfer config
public class DeleteTransferConfig {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    // i.e projects/{project_id}/transferConfigs/{config_id}` or
    // `projects/{project_id}/locations/{location_id}/transferConfigs/{config_id}`
    String configId = "MY_CONFIG_ID";
    deleteTransferConfig(configId);
  }

  public static void deleteTransferConfig(String configId) throws IOException {
    try (DataTransferServiceClient dataTransferServiceClient = DataTransferServiceClient.create()) {
      DeleteTransferConfigRequest request =
          DeleteTransferConfigRequest.newBuilder().setName(configId).build();
      dataTransferServiceClient.deleteTransferConfig(request);
      System.out.println("Transfer config deleted successfully");
    } catch (ApiException ex) {
      System.out.println("Transfer config was not deleted." + ex.toString());
    }
  }
}

Python

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

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

לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.

import google.api_core.exceptions
from google.cloud import bigquery_datatransfer_v1

client = bigquery_datatransfer_v1.DataTransferServiceClient()


def delete_transfer_config(
    project_id: str, location: str, transfer_config_id: str
) -> None:
    """Deletes a data transfer configuration, including any associated transfer runs and logs.

    Args:
        project_id: The Google Cloud project ID.
        location: The geographic location of the transfer configuration, for example, "us-central1".
        transfer_config_id: The transfer configuration ID, for example, "1234a-5678-90b1-2c3d-4e5f67890g12".
    """

    name = client.transfer_config_path(
        project=f"{project_id}/locations/{location}",
        transfer_config=transfer_config_id,
    )
    request = bigquery_datatransfer_v1.DeleteTransferConfigRequest(name=name)

    try:
        client.delete_transfer_config(request=request)
        print(f"Deleted transfer config {name}")
    except google.api_core.exceptions.NotFound:
        print(f"Error: Transfer config '{name}' not found.")

השבתה או הפעלה של שאילתות מתוזמנות

כדי להשהות את ההרצות המתוזמנות של שאילתה נבחרת בלי למחוק את התזמון, אפשר להשבית את התזמון.

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

  1. בתפריט הניווט של מסוף Cloud de Confiance , לוחצים על Scheduling.
  2. ברשימת השאילתות המתוזמנות, לוחצים על התפריט פעולות של השאילתה המתוזמנת שרוצים להשבית.
  3. בוחרים באפשרות השבתה.

    משביתים שאילתה מתוזמנת בדף Scheduling (תזמון).

כדי להפעיל שאילתה מתוזמנת שהושבתה, לוחצים על התפריט פעולות בשורה של השאילתה המתוזמנת שרוצים להפעיל ובוחרים באפשרות הפעלה.

מכסות

שאילתות מתוזמנות תמיד מורצות כמשימות של שאילתות באצווה, והן כפופות לאותן מכסות ומגבלות של BigQuery כמו שאילתות ידניות.

למרות ששאילתות מתוזמנות משתמשות בתכונות של שירות העברת הנתונים ל-BigQuery, הן לא העברות ולא חלות עליהן מכסות של עבודות טעינה.

הזהות שמשמשת להפעלת השאילתה קובעת אילו מכסות יחולו. זה תלוי בהגדרות של השאילתה המתוזמנת:

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

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

תמחור

התמחור של שאילתות מתוזמנות זהה לזה של שאילתות BigQuery ידניות.

אזורים נתמכים

שאילתות מתוזמנות נתמכות במיקומים הבאים.

אזורים

בטבלה הבאה מפורטים האזורים באמריקה שבהם BigQuery זמין.
תיאור האזור שם האזור פרטים
קולומבוס, אוהיו us-east5
דאלאס us-south1 סמל של עלה רמה נמוכה של CO2
אייווה us-central1 סמל של עלה רמה נמוכה של CO2
לוס אנג'לס us-west2
לאס וגאס us-west4
מקסיקו northamerica-south1
מונטריאול northamerica-northeast1 סמל של עלה רמה נמוכה של CO2
צפון וירג'יניה us-east4
אוקלהומה us-central2 סמל של עלה רמה נמוכה של CO2
אורגון us-west1 סמל של עלה רמה נמוכה של CO2
סולט לייק סיטי us-west3
סאו פאולו southamerica-east1 סמל של עלה רמה נמוכה של CO2
סנטיאגו southamerica-west1 סמל של עלה רמה נמוכה של CO2
דרום קרוליינה us-east1
טורונטו northamerica-northeast2 סמל של עלה רמה נמוכה של CO2
בטבלה הבאה מפורטים האזורים באסיה ובאוקיינוס השקט שבהם BigQuery זמין.
תיאור האזור שם האזור פרטים
בנגקוק asia-southeast3
דלהי asia-south2
הונג קונג asia-east2
ג'קארטה asia-southeast2
מלבורן australia-southeast2
מומבאי asia-south1
אוסקה asia-northeast2
סיאול asia-northeast3
סינגפור asia-southeast1
סידני australia-southeast1
טייוואן asia-east1
טוקיו asia-northeast1
בטבלה הבאה מפורטים האזורים באירופה שבהם BigQuery זמין.
תיאור האזור שם האזור פרטים
בלגיה europe-west1 סמל של עלה רמה נמוכה של CO2
ברלין europe-west10
פינלנד europe-north1 סמל של עלה רמה נמוכה של CO2
פרנקפורט europe-west3
לונדון europe-west2 סמל של עלה רמה נמוכה של CO2
מדריד europe-southwest1 סמל של עלה רמה נמוכה של CO2
מילאנו europe-west8
הולנד europe-west4 סמל של עלה רמה נמוכה של CO2
פריז europe-west9 סמל של עלה רמה נמוכה של CO2
שטוקהולם europe-north2 סמל של עלה רמה נמוכה של CO2
טורינו europe-west12
ורשה europe-central2
ציריך europe-west6 סמל של עלה רמה נמוכה של CO2
בטבלה הבאה מפורטים האזורים במזרח התיכון שבהם BigQuery זמין.
תיאור האזור שם האזור פרטים
דמאם me-central2
דוחה me-central1
תל אביב me-west1
בטבלה הבאה מפורטים האזורים באפריקה שבהם BigQuery זמין.
תיאור האזור שם האזור פרטים
יוהנסבורג africa-south1

במספר אזורים

בטבלה הבאה מפורטים האזורים שבהם BigQuery זמין. כשבוחרים אזור מרובה, מאפשרים ל-BigQuery לבחור אזור יחיד בתוך האזור המרובה שבו הנתונים מאוחסנים ומעובדים.
תיאור של המיקום 'במספר אזורים' השם של המיקום 'במספר אזורים'
מרכזי נתונים במדינות החברות באיחוד האירופי1 EU
מרכזי נתונים בארצות הברית2 US

1 נתונים שנמצאים במיקום 'במספר אזורים' של EU מאוחסנים רק באחד מהמיקומים הבאים: europe-west1 (בלגיה) או europe-west4 (הולנד). המיקום המדויק שבו הנתונים מאוחסנים ומעובדים נקבע באופן אוטומטי על ידי BigQuery.

2 נתונים שנמצאים במיקום 'במספר אזורים' של US מאוחסנים רק באחד מהמיקומים הבאים: us-central1 (איווה), us-west1 (אורגון) או us-central2 (אוקלהומה). המיקום המדויק שבו הנתונים מאוחסנים ומעובדים נקבע באופן אוטומטי על ידי BigQuery.

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