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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • 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 שעות.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

המסוף

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

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

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

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

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

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

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

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

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

    כניסה ל-BigQuery

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

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

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

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

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

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

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

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

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

    3. כדי להעתיק את מערך הנתונים, לוחצים על Copy (העתקה).

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

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

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

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

  2. לוחצים על יצירת העברה.

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

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

  5. בקטע Schedule options:

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

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

    2. בשדה Start date and run time, מזינים את התאריך והשעה שבהם רוצים להתחיל את ההעברה. אם בוחרים באפשרות Start now (התחלה מיידית), האפשרות הזו מושבתת.

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

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

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

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

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

    • כדי להפעיל התראות באימייל, לוחצים על המתג. אם מפעילים את האפשרות הזו, הבעלים של הגדרת ההעברה מקבלים התראה באימייל כשהרצת ההעברה נכשלת.
    • כדי להפעיל התראות Pub/Sub, לוחצים על המתג ואז בוחרים שם של נושא מהרשימה או לוחצים על יצירת נושא. באמצעות האפשרות הזו אפשר להגדיר התראות על הפעלת 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, ומסמנים בתו בריחה (escape) את המירכאות הכפולות במחרוזת באמצעות קו נטוי הפוך – לדוגמה:

      '{\"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, קוראים לשיטה datasets.insert עם משאב מוגדר של מערך נתונים.

  4. כדי להעתיק מערך נתונים, משתמשים בשיטה 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. בדף פרטי ההעברה, בוחרים בהרצת העברה.

    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 כפופה למגבלות של עבודות טעינה.

אפשר גם להשתמש ב- Cloud Composer כדי להעביר ולהעתיק מערכי נתונים גדולים באופן פרוגרמטי.

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

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

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

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

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

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

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

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

המסוף

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

    כניסה ל-BigQuery

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

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

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

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

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

SQL

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

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

  1. במסוף Google Cloud , עוברים לדף BigQuery.

    כניסה ל-BigQuery

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

    DROP SCHEMA IF EXISTS mydataset;

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

    DROP SCHEMA IF EXISTS mydataset CASCADE;

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

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

BQ

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

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

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

C#‎

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

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

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

מתקינים את לקוח Python עבור 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

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

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