ניהול מערכי נתונים

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

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

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

התפקידים הנדרשים

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

העתקת קבוצת נתונים

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

כדי לקבל את ההרשאות שדרושות להעתקת מערכי נתונים, בקשו מהאדמין להקצות לכם את התפקידים הבאים ב-IAM:

  • אדמין ב-BigQuery‏ (roles/bigquery.admin) – פרויקט היעד
  • צפייה בנתוני BigQuery‏ (roles/bigquery.dataViewer) – מערך הנתונים של המקור

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

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

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

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

  • ‫bigquery.transfers.update בפרויקט היעד
  • ‫bigquery.jobs.create בפרויקט היעד
  • ‫bigquery.datasets.get במערך נתוני המקור ובמערך נתוני היעד
  • ‫bigquery.tables.list בקבוצת הנתונים של המקור ושל היעד
  • ‫bigquery.datasets.update במערך הנתונים של היעד
  • ‫bigquery.tables.create במערך הנתונים של היעד

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

מחיקת קבוצת נתונים

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

כדי לקבל את ההרשאות שנדרשות למחיקת מערכי נתונים, צריך לבקש מהאדמין להקצות לכם את התפקיד BigQuery Data Owner (roles/bigquery.dataOwner) ב-IAM בפרויקט. כדי לקרוא הסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.

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

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

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

  • ‫bigquery.datasets.delete בפרויקט
  • ‫bigquery.tables.delete בפרויקט

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

העתקת מערכי נתונים

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

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

מגבלות

כשמעתיקים מערכי נתונים, חלות המגבלות הבאות:

  • אי אפשר להעתיק את המשאבים הבאים ממערך נתונים של מקור:

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

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

  • אי אפשר להשתמש במשאבים הבאים כמערכי נתונים של יעד למשימות העתקה:

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

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

  • התדירות המינימלית בין עבודות העתקה היא 12 שעות.

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

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

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

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

  • אי אפשר להעתיק מערך נתונים באזורים של BigQuery Omni.

  • כדי להעתיק קבוצת נתונים לפרויקט בגבולות גזרה לשירות אחרים של VPC Service Controls, צריך להגדיר את כללי תעבורת הנתונים היוצאת הבאים:

    • בגבולות הגזרה לשירות של VPC Service Controls בפרויקט היעד, לחשבון המשתמש ב-IAM צריכות להיות ה-methods הבאות:

      • bigquery.datasets.get
      • bigquery.tables.list
      • bigquery.tables.get,
      • bigquery.tables.getData
    • בהגדרות של גבולות הגזרה לשירות של VPC Service Controls בפרויקט המקור, צריך להגדיר את השיטה All Methods לחשבון המשתמש ב-IAM.

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

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

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

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

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

העתקת מערך נתונים

בוחרים באחת מהאפשרויות הבאות:

המסוף

  1. מפעילים את שירות העברת הנתונים ל-BigQuery במערך הנתונים של היעד.

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

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

    אם אתם מתכוונים להגדיר התראות על הפעלת העברות ב-Pub/Sub (אפשרות 2 בהמשך השלבים האלה), אתם צריכים את ההרשאה pubsub.topics.setIamPolicy.

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

  3. יוצרים קבוצת נתונים ב-BigQuery באותו אזור או באזור אחר מקבוצת הנתונים של המקור.

אפשרות 1: שימוש בפונקציית ההעתקה של BigQuery

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

  1. נכנסים לדף BigQuery.

    כניסה ל-BigQuery

  2. בחלונית השמאלית, לוחצים על Explorer:

    כפתור מודגש לחלונית Explorer.

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

  3. בחלונית Explorer, מרחיבים את הפרויקט, לוחצים על Datasets ואז בוחרים מערך נתונים.

  4. בקטע Dataset info, לוחצים על Copy ומבצעים את הפעולות הבאות:

    1. בשדה Dataset, יוצרים מערך נתונים חדש או בוחרים מזהה של מערך נתונים קיים מהרשימה.

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

      בשדה Location מוצג המיקום של מערך הנתונים המקורי.

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

    3. כדי להעתיק את קבוצת הנתונים, לוחצים על העתקה.

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

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

  1. נכנסים לדף העברות נתונים.

    מעבר אל "העברות נתונים"

  2. לוחצים על Create a transfer.

  3. ברשימה מקור, בוחרים באפשרות העתקת מערך נתונים.

  4. בשדה שם מוצג, מזינים שם להרצת ההעברה.

  5. בקטע Schedule options:

    1. בקטע תדירות החזרה, בוחרים אפשרות לתדירות ההפעלה של ההעברה:

      אם בוחרים באפשרות בהתאמה אישית, מזינים תדירות מותאמת אישית, לדוגמה: every day 00:00. מידע נוסף זמין במאמר עיצוב לוח הזמנים.

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

  6. בקטע Destination settings, בוחרים את מערך הנתונים שבו רוצים לשמור את נתוני ההעברה. אפשר גם ללחוץ על CREATE NEW DATASET כדי ליצור מערך נתונים חדש לפני שבוחרים אותו להעברה הזו.

  7. בקטע פרטי מקור הנתונים, מזינים את הפרטים הבאים:

    1. בשדה Source dataset (מערך נתונים של המקור), מזינים את מזהה מערך הנתונים שרוצים להעתיק.
    2. בשדה Source project, מזינים את מזהה הפרויקט של מערך הנתונים במקור.
  8. כדי להחליף גם את הנתונים וגם את הסכימה של טבלאות היעד בטבלאות המקור, מסמנים את התיבה Overwrite destination tables. טבלת המקור וטבלת היעד צריכות להיות עם אותה סכימת חלוקה למחיצות.

  9. בתפריט Service Account, בוחרים חשבון שירות מבין חשבונות השירות שמשויכים לפרויקט ב-Google Cloud . אתם יכולים לשייך חשבון שירות להעברה במקום להשתמש בפרטי הכניסה של המשתמש. מידע נוסף על השימוש בחשבונות שירות להעברת נתונים זמין במאמר שימוש בחשבונות שירות.

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

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

BQ

  1. מפעילים את שירות העברת הנתונים ל-BigQuery במערך הנתונים של היעד.

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

  3. כדי ליצור מערך נתונים ב-BigQuery, משתמשים בפקודה bq mk עם הדגל ליצירת מערך נתונים --dataset והדגל location:

    bq mk \
      --dataset \
      --location=LOCATION \
      PROJECT:DATASET

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

    • ‫LOCATION: המיקום שאליו רוצים להעתיק את מערך הנתונים
    • ‫PROJECT: מזהה הפרויקט של מערך הנתונים המיועד
    • ‫DATASET: השם של מערך הנתונים של היעד
  4. כדי להעתיק מערך נתונים, משתמשים בפקודה bq mk עם דגל יצירת ההעברה --transfer_config והדגל --data_source. צריך להגדיר את הדגל --data_source לערך cross_region_copy. רשימה מלאה של הערכים התקינים לשימוש עם הדגל --data_source מופיעה במאמר דגלים של transfer-config בחומר העזר לכלי שורת הפקודה של BigQuery.

    bq mk \
      --transfer_config \
      --project_id=PROJECT \
      --data_source=cross_region_copy \
      --target_dataset=DATASET \
      --display_name=NAME \
     --service_account_name=SERCICE_ACCOUNT \
      --params='PARAMETERS'

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

    • ‫NAME: השם המוצג של משימת ההעתקה או של הגדרות ההעברה

    • ‫SERVICE_ACCOUNT: השם של חשבון השירות שמשמש לאימות ההעברה. חשבון השירות צריך להיות בבעלות אותו project_id ששימש ליצירת ההעברה, וצריכות להיות לו כל ההרשאות הנדרשות.

    • ‫PARAMETERS: הפרמטרים של הגדרת ההעברה בפורמט JSON

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

      • ‫source_dataset_id: המזהה של מערך נתוני המקור שרוצים להעתיק
      • ‫source_project_id: מזהה הפרויקט שבו נמצא מערך הנתונים של המקור
      • ‫overwrite_destination_table: דגל אופציונלי שמאפשר לחתוך את הטבלאות של עותק קודם ולרענן את כל הנתונים

      סכימת החלוקה למחיצות של טבלת המקור ושל טבלת היעד צריכה להיות זהה.

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

    • ‫Linux: משתמשים במירכאות בודדות כדי לתחום את מחרוזת ה-JSON. לדוגמה:

      '{"source_dataset_id":"mydataset","source_project_id":"mysourceproject","overwrite_destination_table":"true"}'
      
    • שורת הפקודה של Windows: משתמשים במירכאות כפולות כדי להקיף את מחרוזת ה-JSON, ומסמנים בתו בריחה (escape) את המירכאות הכפולות במחרוזת באמצעות קו נטוי הפוך – לדוגמה:

      "{\"source_dataset_id\":\"mydataset\",\"source_project_id\":\"mysourceproject\",\"overwrite_destination_table\":\"true\"}"
      
    • ‫PowerShell: משתמשים במירכאות בודדות כדי לתחום את מחרוזת ה-JSON, ומוסיפים לוכסן הפוך לפני המירכאות הכפולות במחרוזת. לדוגמה:

      '{\"source_dataset_id\":\"mydataset\",\"source_project_id\":\"mysourceproject\",\"overwrite_destination_table\":\"true\"}'
      

    לדוגמה, הפקודה הבאה יוצרת הגדרה להעתקת קבוצת נתונים בשם My Transfer, עם קבוצת נתונים לטירגוט בשם mydataset ופרויקט עם המזהה myproject.

    bq mk \
      --transfer_config \
      --project_id=myproject \
      --data_source=cross_region_copy \
      --target_dataset=mydataset \
      --display_name='My Transfer' \
      --params='{
          "source_dataset_id":"123_demo_eu",
          "source_project_id":"mysourceproject",
          "overwrite_destination_table":"true"
          }'

API

  1. מפעילים את שירות העברת הנתונים ל-BigQuery במערך הנתונים של היעד.

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

  3. כדי ליצור מערך נתונים ב-BigQuery, מפעילים את ה-method‏ datasets.insert עם משאב מוגדר של מערך נתונים.

  4. כדי להעתיק מערך נתונים, משתמשים ב-method‏ projects.locations.transferConfigs.create ומספקים מופע של המשאב TransferConfig.

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 copy dataset from another gcp project
public class CopyDataset {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    final String destinationProjectId = "MY_DESTINATION_PROJECT_ID";
    final String destinationDatasetId = "MY_DESTINATION_DATASET_ID";
    final String sourceProjectId = "MY_SOURCE_PROJECT_ID";
    final String sourceDatasetId = "MY_SOURCE_DATASET_ID";
    Map<String, Value> params = new HashMap<>();
    params.put("source_project_id", Value.newBuilder().setStringValue(sourceProjectId).build());
    params.put("source_dataset_id", Value.newBuilder().setStringValue(sourceDatasetId).build());
    TransferConfig transferConfig =
        TransferConfig.newBuilder()
            .setDestinationDatasetId(destinationDatasetId)
            .setDisplayName("Your Dataset Copy Name")
            .setDataSourceId("cross_region_copy")
            .setParams(Struct.newBuilder().putAllFields(params).build())
            .setSchedule("every 24 hours")
            .build();
    copyDataset(destinationProjectId, transferConfig);
  }

  public static void copyDataset(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("Copy dataset created successfully :" + config.getName());
    } catch (ApiException ex) {
      System.out.print("Copy dataset was not created." + ex.toString());
    }
  }
}

Python

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

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

מתקינים את לקוח Python עבור BigQuery Data Transfer API באמצעות pip install google-cloud-bigquery-datatransfer. אחר כך יוצרים הגדרת העברה כדי להעתיק את מערך הנתונים.
from google.cloud import bigquery_datatransfer

transfer_client = bigquery_datatransfer.DataTransferServiceClient()

destination_project_id = "my-destination-project"
destination_dataset_id = "my_destination_dataset"
source_project_id = "my-source-project"
source_dataset_id = "my_source_dataset"
transfer_config = bigquery_datatransfer.TransferConfig(
    destination_dataset_id=destination_dataset_id,
    display_name="Your Dataset Copy Name",
    data_source_id="cross_region_copy",
    params={
        "source_project_id": source_project_id,
        "source_dataset_id": source_dataset_id,
    },
    schedule="every 24 hours",
)
transfer_config = transfer_client.create_transfer_config(
    parent=transfer_client.common_project_path(destination_project_id),
    transfer_config=transfer_config,
)
print(f"Created transfer config: {transfer_config.name}")

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

הצגת משימות העתקה של מערכי נתונים

כדי לראות את הסטטוס ואת הפרטים של עבודת העתקה של קבוצת נתונים במסוףGoogle Cloud :

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

    מעבר אל 'העברות נתונים'

  2. בוחרים העברה שרוצים לראות את הפרטים שלה, ואז מבצעים את הפעולות הבאות:

    1. בדף Transfer details, בוחרים הפעלת העברה.

    2. כדי לרענן, לוחצים על רענון.

יצירה מחדש של מערכי נתונים במיקום אחר

כדי להעביר קבוצת נתונים באופן ידני ממיקום אחד לאחר:

  1. מייצאים את הנתונים מהטבלאות ב-BigQuery לקטגוריה של Cloud Storage.

    אין חיובים על ייצוא נתונים מ-BigQuery, אבל יש חיובים על אחסון הנתונים שיוצאו ב-Cloud Storage. הייצוא ל-BigQuery כפוף למגבלות על משימות חילוץ.

  2. מעתיקים או מעבירים את הנתונים מקטגוריה של Cloud Storage לייצוא לקטגוריה חדשה שיצרתם במיקום היעד. לדוגמה, אם אתם מעבירים את הנתונים שלכם מאזור מרובה-אזורים של US לאזור טוקיו של asia-northeast1, תעבירו את הנתונים לדלי שיצרתם בטוקיו. מידע על העברת אובייקטים ב-Cloud Storage זמין במאמר העתקה, שינוי שם והעברה של אובייקטים במסמכי Cloud Storage.

    העברת נתונים בין אזורים כרוכה בחיובים על תעבורת נתונים יוצאת (egress) ברשת ב-Cloud Storage.

  3. יוצרים מערך נתונים חדש ב-BigQuery במיקום החדש, ואז טוענים את הנתונים ממאגר Cloud Storage למערך הנתונים החדש.

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

אפשר גם להשתמש ב- Managed Service for Apache Airflow כדי להעביר ולהעתיק מערכי נתונים גדולים באופן פרוגרמטי.

למידע נוסף על שימוש ב-Cloud Storage לאחסון ולהעברה של מערכי נתונים גדולים, אפשר לעיין במאמר בנושא שימוש ב-Cloud Storage עם Big Data.

אבטחת מערכי נתונים

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

מחיקה של מערכי נתונים

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

אם תנסו למחוק מערך נתונים לא ריק בלי הדגלים או הפרמטרים המתאימים, הפעולה תיכשל ותוצג השגיאה הבאה: Dataset project:dataset is still in use.

אם תנסו למחוק מערך נתונים שלא קיים, הפעולה תיכשל עם השגיאה Not found, אלא אם תציינו אפשרות להתעלמות ממערכי נתונים חסרים, כמו IF EXISTS ב-GoogleSQL או הדגל -f (--force) בכלי bq של שורת הפקודה.

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

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

המסוף

  1. עוברים לדף BigQuery.

    כניסה ל-BigQuery

  2. בחלונית השמאלית, לוחצים על Explorer:

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

  3. בחלונית Explorer, מרחיבים את הפרויקט, לוחצים על Datasets ואז לוחצים על מערך הנתונים.

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

  5. בתיבת הדו-שיח מחיקת מערך נתונים, מקלידים delete בשדה ולוחצים על מחיקה.

SQL

כדי למחוק מערך נתונים, משתמשים בהצהרת ה-DDL‏ DROP SCHEMA.

בדוגמה הבאה נמחקת קבוצת נתונים בשם mydataset:

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

    כניסה ל-BigQuery

  2. בעורך השאילתות, מזינים את ההצהרה הבאה:

    DROP SCHEMA IF EXISTS mydataset;

    הסעיף IF EXISTS מונע שגיאה אם מערך הנתונים לא קיים. בלי IF EXISTS, ניסיון למחוק מערך נתונים שלא קיים מחזיר שגיאת Not found.

    כברירת מחדל, הפקודה DROP SCHEMA מוחקת רק קבוצת נתונים ריקה. כדי למחוק מערך נתונים ואת כל התוכן שלו, משתמשים במילת המפתח CASCADE:

    DROP SCHEMA IF EXISTS mydataset CASCADE;

  3. לוחצים על הפעלה.

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

BQ

משתמשים בפקודה bq rm עם הדגל --dataset או -d (אופציונלי). אם מערך הנתונים מכיל טבלאות, צריך להשתמש בדגל -r כדי להסיר את כל הטבלאות במערך הנתונים. אם משתמשים בדגל -r, אפשר להשמיט את הדגל --dataset או -d.

אחרי שמריצים את הפקודה, המערכת מבקשת אישור. אפשר להשתמש בדגל -f (או --force) כדי לדלג על האישור ולהתעלם משגיאות Not found אם מערך הנתונים לא קיים. בלי הדגל -f, ניסיון למחוק מערך נתונים שלא קיים ייכשל עם השגיאה Not found.

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

bq rm -r -f -d PROJECT_ID:DATASET

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

  • ‫PROJECT_ID: מזהה הפרויקט
  • ‫DATASET: השם של מערך הנתונים שרוצים למחוק

לדוגמה:

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

bq rm -r -d mydataset

כשמופיעה בקשה, כותבים y ומקישים על Enter.

מזינים את הפקודה הבאה כדי להסיר את mydataset ואת כל הטבלאות שבו מ-myotherproject. הפקודה לא משתמשת בדגל האופציונלי -d. הדגל -f משמש לדילוג על האישור.

bq rm -r -f myotherproject:mydataset

אפשר להשתמש בפקודה bq ls כדי לוודא שמערך הנתונים נמחק.

API

מפעילים את השיטה datasets.delete כדי למחוק את מערך הנתונים, ומגדירים את הפרמטר deleteContents לערך true כדי למחוק את הטבלאות שבו. אם מערך הנתונים שצוין לא קיים, ה-method מחזירה שגיאת 404 Not Found.

C#‎

דוגמת הקוד הבאה מוחקת קבוצת נתונים ריקה.

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

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

מתקינים את Python client for the BigQuery Data Transfer API באמצעות pip install google-cloud-bigquery-datatransfer. לאחר מכן, יוצרים הגדרת העברה כדי להעתיק את מערך הנתונים.

using Google.Cloud.BigQuery.V2;
using System;

public class BigQueryDeleteDataset
{
    public void DeleteDataset(
        string projectId = "your-project-id",
        string datasetId = "your_empty_dataset"
    )
    {
        BigQueryClient client = BigQueryClient.Create(projectId);
        // Delete a dataset that does not contain any tables
        client.DeleteDataset(datasetId: datasetId);
        Console.WriteLine($"Dataset {datasetId} deleted.");
    }
}

דוגמת הקוד הבאה מוחקת קבוצת נתונים ואת כל התוכן שלה:

// Copyright(c) 2018 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License"); you may not
// use this file except in compliance with the License. You may obtain a copy of
// the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
// License for the specific language governing permissions and limitations under
// the License.
//

using Google.Cloud.BigQuery.V2;
using System;

public class BigQueryDeleteDatasetAndContents
{
    public void DeleteDatasetAndContents(
        string projectId = "your-project-id",
        string datasetId = "your_dataset_with_tables"
    )
    {
        BigQueryClient client = BigQueryClient.Create(projectId);
        // Use the DeleteDatasetOptions to delete a dataset and its contents
        client.DeleteDataset(
            datasetId: datasetId,
            options: new DeleteDatasetOptions() { DeleteContents = true }
        );
        Console.WriteLine($"Dataset {datasetId} and contents deleted.");
    }
}

המשך

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

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

מתקינים את לקוח Python עבור BigQuery Data Transfer API באמצעות pip install google-cloud-bigquery-datatransfer. אחר כך יוצרים הגדרת העברה כדי להעתיק את מערך הנתונים.
import (
	"context"
	"fmt"

	"cloud.google.com/go/bigquery"
)

// deleteDataset demonstrates the deletion of an empty dataset.
func deleteDataset(projectID, datasetID string) error {
	// projectID := "my-project-id"
	// datasetID := "mydataset"
	ctx := context.Background()

	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	// To recursively delete a dataset and contents, use DeleteWithContents.
	if err := client.Dataset(datasetID).Delete(ctx); err != nil {
		return fmt.Errorf("Delete: %v", err)
	}
	return nil
}

Java

בדוגמת הקוד הבאה מוצג איך למחוק מערך נתונים ריק.

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

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

מתקינים את לקוח Python ל-BigQuery Data Transfer API באמצעות pip install google-cloud-bigquery-datatransfer. לאחר מכן, יוצרים הגדרת העברה כדי להעתיק את מערך הנתונים.
import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQuery.DatasetDeleteOption;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.DatasetId;

public class DeleteDataset {

  public static void runDeleteDataset() {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "MY_PROJECT_ID";
    String datasetName = "MY_DATASET_NAME";
    deleteDataset(projectId, datasetName);
  }

  public static void deleteDataset(String projectId, String datasetName) {
    try {
      // Initialize client that will be used to send requests. This client only needs to be created
      // once, and can be reused for multiple requests.
      BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

      DatasetId datasetId = DatasetId.of(projectId, datasetName);
      boolean success = bigquery.delete(datasetId, DatasetDeleteOption.deleteContents());
      if (success) {
        System.out.println("Dataset deleted successfully");
      } else {
        System.out.println("Dataset was not found");
      }
    } catch (BigQueryException e) {
      System.out.println("Dataset was not deleted. \n" + e.toString());
    }
  }
}

דוגמת הקוד הבאה מוחקת קבוצת נתונים ואת כל התוכן שלה:

/*
 * Copyright 2020 Google LLC
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.example.bigquery;

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.DatasetId;

// Sample to delete dataset with contents.
public class DeleteDatasetAndContents {

  public static void main(String[] args) {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "MY_PROJECT_ID";
    String datasetName = "MY_DATASET_NAME";
    deleteDatasetAndContents(projectId, datasetName);
  }

  public static void deleteDatasetAndContents(String projectId, String datasetName) {
    try {
      // Initialize client that will be used to send requests. This client only needs to be created
      // once, and can be reused for multiple requests.
      BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

      DatasetId datasetId = DatasetId.of(projectId, datasetName);
      // Use the force parameter to delete a dataset and its contents
      boolean success = bigquery.delete(datasetId, BigQuery.DatasetDeleteOption.deleteContents());
      if (success) {
        System.out.println("Dataset deleted with contents successfully");
      } else {
        System.out.println("Dataset was not found");
      }
    } catch (BigQueryException e) {
      System.out.println("Dataset was not deleted with contents. \n" + e.toString());
    }
  }
}

Node.js

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

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

מתקינים את Python client for the BigQuery Data Transfer API באמצעות pip install google-cloud-bigquery-datatransfer. אחר כך יוצרים הגדרת העברה כדי להעתיק את מערך הנתונים.
// Import the Google Cloud client library
const {BigQuery} = require('@google-cloud/bigquery');
const bigquery = new BigQuery();

async function deleteDataset() {
  // Deletes a dataset named "my_dataset".

  /**
   * TODO(developer): Uncomment the following lines before running the sample.
   */
  // const datasetId = 'my_dataset';

  // Create a reference to the existing dataset
  const dataset = bigquery.dataset(datasetId);

  // Delete the dataset and its contents
  await dataset.delete({force: true});
  console.log(`Dataset ${dataset.id} deleted.`);
}

PHP

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

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

מתקינים את Python client for the BigQuery Data Transfer API באמצעות pip install google-cloud-bigquery-datatransfer. אחר כך יוצרים הגדרת העברה כדי להעתיק את מערך הנתונים.
use Google\Cloud\BigQuery\BigQueryClient;

/** Uncomment and populate these variables in your code */
// $projectId = 'The Google project ID';
// $datasetId = 'The BigQuery dataset ID';

$bigQuery = new BigQueryClient([
    'projectId' => $projectId,
]);
$dataset = $bigQuery->dataset($datasetId);
$table = $dataset->delete();
printf('Deleted dataset %s' . PHP_EOL, $datasetId);

Python

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

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

מתקינים את Python client for the BigQuery Data Transfer API באמצעות pip install google-cloud-bigquery-datatransfer. אחר כך יוצרים הגדרת העברה כדי להעתיק את מערך הנתונים.

from google.cloud import bigquery

# Construct a BigQuery client object.
client = bigquery.Client()

# TODO(developer): Set model_id to the ID of the model to fetch.
# dataset_id = 'your-project.your_dataset'

# Use the delete_contents parameter to delete a dataset and its contents.
# Use the not_found_ok parameter to not receive an error if the dataset has already been deleted.
client.delete_dataset(
    dataset_id, delete_contents=True, not_found_ok=True
)  # Make an API request.

print("Deleted dataset '{}'.".format(dataset_id))

Ruby

בדוגמת הקוד הבאה מוצג איך למחוק מערך נתונים ריק.

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

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

מתקינים את Python client for the BigQuery Data Transfer API באמצעות pip install google-cloud-bigquery-datatransfer. לאחר מכן, יוצרים הגדרת העברה כדי להעתיק את מערך הנתונים.
require "google/cloud/bigquery"

def delete_dataset dataset_id = "my_empty_dataset"
  bigquery = Google::Cloud::Bigquery.new

  # Delete a dataset that does not contain any tables
  dataset = bigquery.dataset dataset_id
  dataset.delete
  puts "Dataset #{dataset_id} deleted."
end

דוגמת הקוד הבאה מוחקת קבוצת נתונים ואת כל התוכן שלה:

# Copyright 2020 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
require "google/cloud/bigquery"

def delete_dataset_and_contents dataset_id = "my_dataset_with_tables"
  bigquery = Google::Cloud::Bigquery.new

  # Use the force parameter to delete a dataset and its contents
  dataset = bigquery.dataset dataset_id
  dataset.delete force: true
  puts "Dataset #{dataset_id} and contents deleted."
end

שחזור טבלאות ממערכי נתונים שנמחקו

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

  1. יוצרים מערך נתונים עם אותו שם ובאותו מיקום כמו המערך המקורי.
  2. בוחרים חותמת זמן מלפני המחיקה של קבוצת הנתונים המקורי בפורמט של אלפיות השנייה מאז תקופה של זמן מערכת – לדוגמה, 1418864998000.
  3. מעתיקים את הטבלה originaldataset.table1 מהשעה 1418864998000 למערך הנתונים החדש:

    bq cp originaldataset.table1@1418864998000 mydataset.mytable
    

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

שחזור של קבוצות נתונים שנמחקו

במאמר שחזור של קבוצות נתונים שנמחקו מוסבר איך לשחזר (או לבטל מחיקה) של קבוצת נתונים שנמחקה.

מכסות

מידע על מכסות העתקה זמין במאמר משימות העתקה. נתוני השימוש במשימות העתקה זמינים ב-INFORMATION_SCHEMA. במאמר תצוגת JOBS מוסבר איך לשלוח שאילתות לתצוגת INFORMATION_SCHEMA.JOBS.

תמחור

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

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

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