יצירת טבלאות מחולקות למחיצות
חלוקה למחיצות של טבלה ב-BigQuery מאפשרת לשפר את ביצועי השאילתות ולשלוט בעלויות, כי שאילתות שמסננות לפי עמודת החלוקה למחיצות קוראות רק את המחיצות הרלוונטיות. במאמר הזה נסביר איך ליצור טבלה ריקה מחולקת למחיצות, איך ליצור טבלה כזו מתוצאת שאילתה ואיך להמיר טבלאות עם חלוקה לפי תאריכים לטבלאות מחולקות למחיצות לפי זמני הטמעת הנתונים.
לסקירה כללית, קראו את המאמר מבוא לטבלאות מחולקות למחיצות.
לפני שמתחילים
להקצות תפקידים של ניהול זהויות והרשאות גישה (IAM) שנותנים למשתמשים את ההרשאות שנדרשות כדי לבצע כל משימה במסמך הזה.
ההרשאות הנדרשות
התפקידים הנדרשים
כדי לקבל את ההרשאות שדרושות ליצירת טבלה, בקשו מהאדמין להקצות לכם את תפקידי ה-IAM הבאים:
- משתמש במשימות ב-BigQuery (
roles/bigquery.jobUser) בפרויקט, אם יוצרים טבלה על ידי טעינת נתונים או שמירת שאילתות שמורות בטבלה. - BigQuery Data Editor (
roles/bigquery.dataEditor) במערך הנתונים שבו יוצרים את הטבלה.
להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
התפקידים המוגדרים מראש האלה כוללים את ההרשאות שנדרשות ליצירת טבלה. כדי לראות בדיוק אילו הרשאות נדרשות, אפשר להרחיב את הקטע ההרשאות הנדרשות:
ההרשאות הנדרשות
כדי ליצור טבלה, צריך את ההרשאות הבאות:
-
bigquery.tables.createבמערך הנתונים שבו יוצרים את הטבלה. -
bigquery.tables.getDataבכל הטבלאות והתצוגות שהשאילתה מפנה אליהן, אם שומרים את תוצאות השאילתה כטבלה. -
bigquery.jobs.createבפרויקט, אם יוצרים את הטבלה על ידי טעינת נתונים או על ידי שמירת שאילתה שמורה בטבלה. -
bigquery.tables.updateDataבטבלה אם מוסיפים לטבלה או מחליפים אותה בתוצאות של שאילתה.
יכול להיות שתקבלו את ההרשאות האלה באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש אחרים.
יצירת טבלה ריקה מחולקת למחיצות
השלבים ליצירת טבלה מחולקת למחיצות ב-BigQuery דומים לשלבים ליצירת טבלה רגילה, אבל צריך לציין את אפשרויות החלוקה למחיצות, יחד עם אפשרויות אחרות של הטבלה.
יצירת טבלה מחולקת למחיצות לפי עמודת יחידת זמן
כדי ליצור טבלה ריקה שמחולקת לפי יחידות זמן, עם הגדרת סכימה:
המסוף
נכנסים לדף BigQuery במסוף Google Cloud .
- בחלונית הימנית, לוחצים על Explorer.
- בחלונית Explorer, מרחיבים את הפרויקט, לוחצים על Datasets ובוחרים מערך נתונים.
- בקטע Dataset info, לוחצים על Create table.
- בחלונית Create table, מציינים את הפרטים הבאים:
- בקטע Source, בוחרים באפשרות Empty table ברשימה Create table from.
- בקטע Destination, מציינים את הפרטים הבאים:
- בשדה Dataset, בוחרים את מערך הנתונים שבו רוצים ליצור את הטבלה.
- בשדה Table, מזינים את שם הטבלה שרוצים ליצור.
- מוודאים שהשדה Table type מוגדר ל-Native table.
- בקטע Schema, מזינים את הגדרת הסכימה.
הסכימה חייבת לכלול עמודה מסוג
DATE,TIMESTAMPאוDATETIMEבשביל עמודת החלוקה למחיצות. מידע נוסף זמין במאמר הגדרת סכימה. אפשר להזין את פרטי הסכימה באופן ידני באחת מהשיטות הבאות:- אפשרות 1: לוחצים על Edit as text ומדביקים את הסכימה בצורה של מערך JSON. כשמשתמשים במערך JSON, יוצרים את הסכימה באותו תהליך שמשמש ליצירת קובץ סכימה של JSON.
כדי להציג את הסכימה של טבלה קיימת בפורמט JSON, מזינים את הפקודה הבאה:
bq show --format=prettyjson dataset.table
- אפשרות 2: לוחצים על Add field ומזינים את סכימת הטבלה. מציינים את הערכים של השדות Name, Type ו-Mode.
- אפשרות 1: לוחצים על Edit as text ומדביקים את הסכימה בצורה של מערך JSON. כשמשתמשים במערך JSON, יוצרים את הסכימה באותו תהליך שמשמש ליצירת קובץ סכימה של JSON.
כדי להציג את הסכימה של טבלה קיימת בפורמט JSON, מזינים את הפקודה הבאה:
- בקטע Partition and cluster settings, ברשימה Partitioning בוחרים באפשרות Partition by field ואז בוחרים את עמודת החלוקה למחיצות. האפשרות הזו זמינה רק אם הסכימה מכילה עמודה מסוג
DATE,TIMESTAMPאוDATETIME. - אופציונלי: כדי לדרוש מסנן מחיצה בכל השאילתות בטבלה הזו, מסמנים את התיבה Require partition filter. מסנן מחיצות יכול להפחית את העלות ולשפר את הביצועים. מידע נוסף זמין במאמר הגדרת דרישות למסנן מחיצות.
- בוחרים את סוג החלוקה למחיצות.
- אופציונלי: בקטע Advanced options, אם רוצים להשתמש במפתח הצפנה בניהול הלקוח, בוחרים באפשרות Use a customer-managed encryption key (CMEK). כברירת מחדל, BigQuery מצפין תוכן של לקוחות שמאוחסן במצב מנוחה באמצעות Google-owned and Google-managed encryption key.
- לוחצים על Create table.
SQL
כדי ליצור טבלה שמחולקת למחיצות לפי עמודת יחידת זמן, משתמשים בהצהרת DDL של CREATE TABLE עם סעיף PARTITION BY.
בדוגמה הבאה נוצרת טבלה עם מחיצות יומיות על סמך העמודה transaction_date:
נכנסים לדף BigQuery במסוף Google Cloud .
בעורך השאילתות, מזינים את ההצהרה הבאה:
CREATE TABLE mydataset.newtable (transaction_id INT64, transaction_date DATE) PARTITION BY transaction_date OPTIONS ( partition_expiration_days = 3, require_partition_filter = TRUE);
משתמשים בסעיף
OPTIONSכדי להגדיר את אפשרויות הטבלה, כמו תפוגת המחיצה ודרישות מסנן המחיצה.לוחצים על הפעלה.
מידע נוסף על הרצת שאילתות זמין במאמר הרצת שאילתה אינטראקטיבית.
סוג החלוקה למחיצות שמוגדר כברירת מחדל לעמודות DATE הוא חלוקה יומית למחיצות. כדי לציין סוג חלוקה למחיצות אחר, צריך לכלול את הפונקציה DATE_TRUNC במשפט PARTITION BY. לדוגמה, השאילתה הבאה יוצרת טבלה עם מחיצות חודשיות:
CREATE TABLE mydataset.newtable (transaction_id INT64, transaction_date DATE) PARTITION BY DATE_TRUNC(transaction_date, MONTH) OPTIONS ( partition_expiration_days = 3, require_partition_filter = TRUE);
אפשר גם לציין עמודה מסוג TIMESTAMP או DATETIME כעמודת החלוקה למחיצות. במקרה כזה, צריך לכלול את הפונקציה TIMESTAMP_TRUNC או DATETIME_TRUNC בסעיף PARTITION BY כדי לציין את סוג המחיצה. לדוגמה, ההצהרה הבאה יוצרת טבלה עם מחיצות יומיות על סמך עמודת TIMESTAMP:
CREATE TABLE mydataset.newtable (transaction_id INT64, transaction_ts TIMESTAMP) PARTITION BY TIMESTAMP_TRUNC(transaction_ts, DAY) OPTIONS ( partition_expiration_days = 3, require_partition_filter = TRUE);
BQ
-
מפעילים את Cloud Shell במסוף Google Cloud .
בחלק התחתון של מסוף Google Cloud יתחיל סשן של Cloud Shell ותופיע הודעה של שורת הפקודה. Cloud Shell היא סביבת מעטפת שבה ה-CLI של Google Cloud מותקן ומוגדרים ערכים לפרויקט הקיים. הסשן יופעל תוך כמה שניות.
משתמשים בפקודה
bq mkעם הדגל--table(או קיצור הדרך-t):bq mk \ --table \ --schema SCHEMA \ --time_partitioning_field COLUMN \ --time_partitioning_type UNIT_TIME \ --time_partitioning_expiration EXPIRATION_TIME \ --require_partition_filter=BOOLEAN PROJECT_ID:DATASET.TABLE
מחליפים את מה שכתוב בשדות הבאים:
- SCHEMA: הגדרת סכימה בפורמט
column:data_type,column:data_typeאו הנתיב לקובץ סכימה בפורמט JSON במחשב המקומי. מידע נוסף זמין במאמר הגדרת סכימה. - COLUMN: שם עמודת החלוקה למחיצות. בסכימת הטבלה, העמודה הזו חייבת להיות מסוג
TIMESTAMP,DATETIMEאוDATE. - UNIT_TIME: סוג החלוקה למחיצות. הערכים הנתמכים כוללים את
DAY,HOUR,MONTHאוYEAR. - EXPIRATION_TIME: זמן התפוגה של המחיצות בטבלה, בשניות. הדגל
--time_partitioning_expirationהוא אופציונלי. מידע נוסף זמין במאמר הגדרת תפוגה למחיצה. - BOOLEAN: אם הערך הוא
true, השאילתות בטבלה הזו חייבות לכלול מסנן מחיצות. הדגל--require_partition_filterהוא אופציונלי. מידע נוסף זמין במאמר הגדרת דרישות למסנן מחיצות. - PROJECT_ID: מזהה הפרויקט. אם לא מציינים פרויקט, המערכת משתמשת בפרויקט שמוגדר כברירת מחדל.
- DATASET: השם של מערך נתונים בפרויקט.
- TABLE: שם הטבלה שרוצים ליצור.
אפשרויות אחרות של שורת הפקודה מפורטות במאמר
bq mk.בדוגמה הבאה נוצרת טבלה בשם
mytableשמחולקת למחיצות לפי העמודהts, באמצעות חלוקה למחיצות לפי שעה. תפוגת המחיצה היא 259,200 שניות (3 ימים).bq mk \ -t \ --schema 'ts:TIMESTAMP,qtr:STRING,sales:FLOAT' \ --time_partitioning_field ts \ --time_partitioning_type HOUR \ --time_partitioning_expiration 259200 \ mydataset.mytable
- SCHEMA: הגדרת סכימה בפורמט
Terraform
משתמשים במשאב google_bigquery_table.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
בדוגמה הבאה נוצרת טבלה בשם mytable שמחולקת למחיצות לפי יום:
כך מחילים את ההגדרות של Terraform בפרויקט ב- Google Cloud :
הכנת Cloud Shell
- מפעילים את Cloud Shell.
-
מגדירים את פרויקט ברירת המחדל ב- Google Cloud שבו רוצים להחיל את ההגדרות של Terraform.
תצטרכו להריץ את הפקודה הזו רק פעם אחת לכל פרויקט, ותוכלו לעשות זאת בכל ספרייה.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
אם תגדירו ערכים ספציפיים בקובץ התצורה של Terraform, הם יבטלו את ערכי ברירת המחדל של משתני הסביבה.
הכנת הספרייה
לכל קובץ תצורה של Terraform צריכה להיות ספרייה משלו (שנקראת גם מודול ברמה הבסיסית).
-
יוצרים ספרייה חדשה ב-Cloud Shell ובה יוצרים קובץ חדש. שם הקובץ חייב לכלול את הסיומת
.tf, למשלmain.tf. במדריך הזה, הקובץ נקראmain.tf.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
אם אתם עוקבים אחרי המדריך, תוכלו להעתיק את הקוד לדוגמה בכל קטע או שלב.
מעתיקים את הקוד לדוגמה בקובץ
main.tfהחדש שיצרתם.לחלופין, אפשר גם להעתיק את הקוד מ-GitHub. כדאי לעשות את זה כשקטע הקוד של Terraform הוא חלק מפתרון מקצה לקצה.
- בודקים את הפרמטרים לדוגמה ומשנים אותם בהתאם לסביבה שלכם.
- שומרים את השינויים.
-
מפעילים את Terraform. צריך לעשות זאת רק פעם אחת לכל ספרייה.
terraform init
אופציונלי: תוכלו לכלול את האפשרות
-upgrade, כדי להשתמש בגרסה העדכנית ביותר של הספק של Google:terraform init -upgrade
החלה של השינויים
-
בודקים את ההגדרות ומוודאים שהמשאבים שמערכת Terraform תיצור או תעדכן תואמים לציפיות שלכם:
terraform plan
מתקנים את ההגדרות לפי הצורך.
-
מריצים את הפקודה הבאה ומזינים
yesבהודעה שמופיעה, כדי להחיל את הגדרות Terraform:terraform apply
ממתינים עד שב-Terraform תוצג ההודעה "Apply complete!".
- פותחים את הפרויקט ב- Google Cloud כדי להציג את התוצאות. במסוף Google Cloud , נכנסים למשאבים בממשק המשתמש כדי לוודא שהם נוצרו או עודכנו ב-Terraform.
API
קוראים ל-method tables.insert עם משאב טבלה מוגדר שמציין את המאפיין timePartitioning ואת המאפיין schema.
המשך
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Go במדריך למתחילים של BigQuery באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של BigQuery Go API.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
Java
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Java במדריך למתחילים של BigQuery באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של BigQuery Java API.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
Node.js
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Node.js במדריך למתחילים של BigQuery באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של BigQuery Node.js API.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
Python
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Python במדריך למתחילים של BigQuery באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של BigQuery Python API.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
יצירת טבלה מחולקת למחיצות (Partitions) לפי זמני הטמעת הנתונים
כדי ליצור טבלה ריקה שמחולקת למחיצות לפי זמני הטמעת הנתונים עם הגדרת סכימה:
המסוף
פותחים את הדף BigQuery במסוף Google Cloud .
בחלונית Explorer, מרחיבים את הפרויקט ובוחרים מערך נתונים.
מרחיבים את האפשרות Actions ולוחצים על Open.
בחלונית הפרטים, לוחצים על Create table .
בדף Create table, בקטע Source, בוחרים באפשרות Empty table.
בקטע יעד:
- בקטע Dataset name, בוחרים את מערך הנתונים המתאים.
- בשדה Table name, מזינים את שם הטבלה.
- מוודאים שהשדה Table type מוגדר ל-Native table.
בקטע Schema, מזינים את הגדרת הסכימה.
בקטע Partition and cluster settings, לוחצים על Partition by ingestion time בשדה Partitioning.
(אופציונלי) כדי לדרוש מסנן מחיצה בכל השאילתות בטבלה הזו, מסמנים את התיבה Require partition filter. דרישה למסנן מחיצות יכולה להפחית את העלות ולשפר את הביצועים. מידע נוסף זמין במאמר הגדרת דרישות למסנן מחיצות.
לוחצים על Create table.
SQL
כדי ליצור טבלה מחולקת למחיצות לפי זמני הטמעת הנתונים, משתמשים בהצהרה CREATE TABLE עם משפט PARTITION BY שמחלק למחיצות לפי _PARTITIONDATE.
בדוגמה הבאה נוצרת טבלה עם מחיצות יומיות:
נכנסים לדף BigQuery במסוף Google Cloud .
בעורך השאילתות, מזינים את ההצהרה הבאה:
CREATE TABLE mydataset.newtable (transaction_id INT64) PARTITION BY _PARTITIONDATE OPTIONS ( partition_expiration_days = 3, require_partition_filter = TRUE);
משתמשים בסעיף
OPTIONSכדי להגדיר את אפשרויות הטבלה, כמו תפוגת המחיצה ודרישות מסנן המחיצה.לוחצים על הפעלה.
מידע נוסף על הרצת שאילתות זמין במאמר הרצת שאילתה אינטראקטיבית.
סוג החלוקה למחיצות שמוגדר כברירת מחדל לחלוקה למחיצות לפי זמן הטמעה הוא חלוקה יומית למחיצות. כדי לציין סוג חלוקה למחיצות אחר, צריך לכלול את הפונקציה DATE_TRUNC בסעיף PARTITION BY. לדוגמה, השאילתה הבאה יוצרת טבלה עם מחיצות חודשיות:
CREATE TABLE mydataset.newtable (transaction_id INT64) PARTITION BY DATE_TRUNC(_PARTITIONTIME, MONTH) OPTIONS ( partition_expiration_days = 3, require_partition_filter = TRUE);
BQ
-
מפעילים את Cloud Shell במסוף Google Cloud .
בחלק התחתון של מסוף Google Cloud יתחיל סשן של Cloud Shell ותופיע הודעה של שורת הפקודה. Cloud Shell היא סביבת מעטפת שבה ה-CLI של Google Cloud מותקן ומוגדרים ערכים לפרויקט הקיים. הסשן יופעל תוך כמה שניות.
משתמשים בפקודה
bq mkעם הדגל--table(או קיצור הדרך-t):bq mk \ --table \ --schema SCHEMA \ --time_partitioning_type UNIT_TIME \ --time_partitioning_expiration EXPIRATION_TIME \ --require_partition_filter=BOOLEAN \ PROJECT_ID:DATASET.TABLE
מחליפים את מה שכתוב בשדות הבאים:
- SCHEMA: הגדרה בפורמט
column:data_type,column:data_typeאו הנתיב לקובץ סכימת JSON במחשב המקומי. מידע נוסף זמין במאמר הגדרת סכימה. - UNIT_TIME: סוג החלוקה למחיצות. הערכים הנתמכים כוללים את
DAY,HOUR,MONTHאוYEAR. - EXPIRATION_TIME: זמן התפוגה של המחיצות בטבלה, בשניות. הדגל
--time_partitioning_expirationהוא אופציונלי. מידע נוסף זמין במאמר הגדרת תפוגה למחיצה. - BOOLEAN: אם הערך הוא
true, השאילתות בטבלה הזו חייבות לכלול מסנן מחיצות. הדגל--require_partition_filterהוא אופציונלי. מידע נוסף זמין במאמר הגדרת דרישות למסנן מחיצות. - PROJECT_ID: מזהה הפרויקט. אם לא מציינים פרויקט, המערכת משתמשת בפרויקט שמוגדר כברירת מחדל.
- DATASET: השם של מערך נתונים בפרויקט.
- TABLE: שם הטבלה שרוצים ליצור.
אפשרויות אחרות של שורת הפקודה מפורטות במאמר
bq mk.בדוגמה הבאה נוצרת טבלה מחולקת למחיצות (Partitions) לפי זמני כתיבת הנתונים בשם
mytable. הטבלה מחולקת למחיצות יומיות, עם תפוגת מחיצה של 259,200 שניות (3 ימים).bq mk \ -t \ --schema qtr:STRING,sales:FLOAT,year:STRING \ --time_partitioning_type DAY \ --time_partitioning_expiration 259200 \ mydataset.mytable
- SCHEMA: הגדרה בפורמט
Terraform
משתמשים במשאב google_bigquery_table.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
בדוגמה הבאה נוצרת טבלה בשם mytable שמחולקת למחיצות לפי זמן ההטמעה:
כך מחילים את ההגדרות של Terraform בפרויקט ב- Google Cloud :
הכנת Cloud Shell
- מפעילים את Cloud Shell.
-
מגדירים את פרויקט ברירת המחדל ב- Google Cloud שבו רוצים להחיל את ההגדרות של Terraform.
תצטרכו להריץ את הפקודה הזו רק פעם אחת לכל פרויקט, ותוכלו לעשות זאת בכל ספרייה.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
אם תגדירו ערכים ספציפיים בקובץ התצורה של Terraform, הם יבטלו את ערכי ברירת המחדל של משתני הסביבה.
הכנת הספרייה
לכל קובץ תצורה של Terraform צריכה להיות ספרייה משלו (שנקראת גם מודול ברמה הבסיסית).
-
יוצרים ספרייה חדשה ב-Cloud Shell ובה יוצרים קובץ חדש. שם הקובץ חייב לכלול את הסיומת
.tf, למשלmain.tf. במדריך הזה, הקובץ נקראmain.tf.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
אם אתם עוקבים אחרי המדריך, תוכלו להעתיק את הקוד לדוגמה בכל קטע או שלב.
מעתיקים את הקוד לדוגמה בקובץ
main.tfהחדש שיצרתם.לחלופין, אפשר גם להעתיק את הקוד מ-GitHub. כדאי לעשות את זה כשקטע הקוד של Terraform הוא חלק מפתרון מקצה לקצה.
- בודקים את הפרמטרים לדוגמה ומשנים אותם בהתאם לסביבה שלכם.
- שומרים את השינויים.
-
מפעילים את Terraform. צריך לעשות זאת רק פעם אחת לכל ספרייה.
terraform init
אופציונלי: תוכלו לכלול את האפשרות
-upgrade, כדי להשתמש בגרסה העדכנית ביותר של הספק של Google:terraform init -upgrade
החלה של השינויים
-
בודקים את ההגדרות ומוודאים שהמשאבים שמערכת Terraform תיצור או תעדכן תואמים לציפיות שלכם:
terraform plan
מתקנים את ההגדרות לפי הצורך.
-
מריצים את הפקודה הבאה ומזינים
yesבהודעה שמופיעה, כדי להחיל את הגדרות Terraform:terraform apply
ממתינים עד שב-Terraform תוצג ההודעה "Apply complete!".
- פותחים את הפרויקט ב- Google Cloud כדי להציג את התוצאות. במסוף Google Cloud , נכנסים למשאבים בממשק המשתמש כדי לוודא שהם נוצרו או עודכנו ב-Terraform.
API
קוראים ל-method tables.insert עם משאב טבלה מוגדר שמציין את המאפיין timePartitioning ואת המאפיין schema.
יצירת טבלה שמחולקת לפי טווח של מספרים שלמים
כדי ליצור טבלה ריקה שמחולקת למחיצות (Partitions) לפי טווח של מספרים שלמים עם הגדרת סכימה:
המסוף
פותחים את הדף BigQuery במסוף Google Cloud .
בחלונית Explorer, מרחיבים את הפרויקט ובוחרים מערך נתונים.
מרחיבים את האפשרות Actions ולוחצים על Open.
בחלונית הפרטים, לוחצים על Create table .
בדף Create table, בקטע Source, בוחרים באפשרות Empty table.
בקטע יעד:
- בקטע Dataset name, בוחרים את מערך הנתונים המתאים.
- בשדה Table name, מזינים את שם הטבלה.
- מוודאים שהשדה Table type מוגדר ל-Native table.
בקטע Schema, מזינים את הגדרת הסכימה. חשוב לוודא שהסכימה כוללת עמודת
INTEGERלעמודת החלוקה למחיצות. למידע נוסף, קראו את המאמר הגדרת סכימה.בקטע Partition and cluster settings, ברשימה הנפתחת Partitioning בוחרים באפשרות Partition by field ובוחרים את עמודת החלוקה למחיצות. האפשרות הזו זמינה רק אם הסכימה מכילה עמודה מסוג
INTEGER.מזינים ערכים בשדות התחלה, סיום ומרווח:
- התחלה היא ההתחלה של טווח המחיצה הראשון (כולל).
- End הוא הסוף של טווח המחיצה האחרון (לא כולל).
- מרווח הוא הרוחב של כל טווח חלוקה.
ערכים מחוץ לטווחים האלה נכנסים למחיצה מיוחדת של
__UNPARTITIONED__.(אופציונלי) כדי לדרוש מסנן מחיצה בכל השאילתות בטבלה הזו, מסמנים את התיבה Require partition filter. דרישה למסנן מחיצות יכולה להפחית את העלות ולשפר את הביצועים. מידע נוסף זמין במאמר הגדרת דרישות למסנן מחיצות.
לוחצים על Create table.
SQL
כדי ליצור טבלה שמחולקת למחיצות לפי טווח של מספרים שלמים, משתמשים בהצהרת DDL של CREATE TABLE עם סעיף PARTITION BY.
בדוגמה הבאה נוצרת טבלה שמחולקת למחיצות לפי העמודה customer_id, עם ערך התחלה 0, ערך סיום 100 ומרווח 10:
נכנסים לדף BigQuery במסוף Google Cloud .
בעורך השאילתות, מזינים את ההצהרה הבאה:
CREATE TABLE mydataset.newtable (customer_id INT64, date1 DATE) PARTITION BY RANGE_BUCKET(customer_id, GENERATE_ARRAY(0, 100, 10)) OPTIONS ( require_partition_filter = TRUE);
משתמשים בסעיף
OPTIONSכדי להגדיר את אפשרויות הטבלה, כמו דרישות מסנן המחיצה.לוחצים על הפעלה.
מידע נוסף על הרצת שאילתות זמין במאמר הרצת שאילתה אינטראקטיבית.
BQ
-
מפעילים את Cloud Shell במסוף Google Cloud .
בחלק התחתון של מסוף Google Cloud יתחיל סשן של Cloud Shell ותופיע הודעה של שורת הפקודה. Cloud Shell היא סביבת מעטפת שבה ה-CLI של Google Cloud מותקן ומוגדרים ערכים לפרויקט הקיים. הסשן יופעל תוך כמה שניות.
משתמשים בפקודה
bq mkעם הדגל--table(או קיצור הדרך-t):bq mk \ --schema schema \ --range_partitioning=COLUMN_NAME,START,END,INTERVAL \ --require_partition_filter=BOOLEAN \ PROJECT_ID:DATASET.TABLE
מחליפים את מה שכתוב בשדות הבאים:
- SCHEMA: הגדרת סכימה בתוך השורה בפורמט
column:data_type,column:data_typeאו הנתיב לקובץ סכימת JSON במחשב המקומי. מידע נוסף זמין במאמר הגדרת סכימה. - COLUMN_NAME: שם העמודה של החלוקה למחיצות. בסכימת הטבלה, העמודה הזו חייבת להיות מסוג
INTEGER. - START: ההתחלה של טווח המחיצה הראשון (כולל).
- END: הסוף של טווח המחיצות האחרון (לא כולל).
- INTERVAL: הרוחב של כל טווח מחיצות.
- BOOLEAN: אם הערך הוא
true, השאילתות בטבלה הזו חייבות לכלול מסנן מחיצות. הדגל--require_partition_filterהוא אופציונלי. מידע נוסף זמין במאמר הגדרת דרישות למסנן מחיצות. - PROJECT_ID: מזהה הפרויקט. אם לא מציינים פרויקט, המערכת משתמשת בפרויקט שמוגדר כברירת מחדל.
- DATASET: השם של מערך נתונים בפרויקט.
- TABLE: שם הטבלה שרוצים ליצור.
ערכים מחוץ לטווח המחיצה נכנסים למחיצה מיוחדת של
__UNPARTITIONED__.אפשרויות אחרות של שורת הפקודה מפורטות במאמר
bq mk.בדוגמה הבאה נוצרת טבלה בשם
mytableשמחולקת למחיצות לפי העמודהcustomer_id.bq mk \ -t \ --schema 'customer_id:INTEGER,qtr:STRING,sales:FLOAT' \ --range_partitioning=customer_id,0,100,10 \ mydataset.mytable
- SCHEMA: הגדרת סכימה בתוך השורה בפורמט
Terraform
משתמשים במשאב google_bigquery_table.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
בדוגמה הבאה נוצרת טבלה בשם mytable שמחולקת לפי טווח של מספרים שלמים:
כך מחילים את ההגדרות של Terraform בפרויקט ב- Google Cloud :
הכנת Cloud Shell
- מפעילים את Cloud Shell.
-
מגדירים את פרויקט ברירת המחדל ב- Google Cloud שבו רוצים להחיל את ההגדרות של Terraform.
תצטרכו להריץ את הפקודה הזו רק פעם אחת לכל פרויקט, ותוכלו לעשות זאת בכל ספרייה.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
אם תגדירו ערכים ספציפיים בקובץ התצורה של Terraform, הם יבטלו את ערכי ברירת המחדל של משתני הסביבה.
הכנת הספרייה
לכל קובץ תצורה של Terraform צריכה להיות ספרייה משלו (שנקראת גם מודול ברמה הבסיסית).
-
יוצרים ספרייה חדשה ב-Cloud Shell ובה יוצרים קובץ חדש. שם הקובץ חייב לכלול את הסיומת
.tf, למשלmain.tf. במדריך הזה, הקובץ נקראmain.tf.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
אם אתם עוקבים אחרי המדריך, תוכלו להעתיק את הקוד לדוגמה בכל קטע או שלב.
מעתיקים את הקוד לדוגמה בקובץ
main.tfהחדש שיצרתם.לחלופין, אפשר גם להעתיק את הקוד מ-GitHub. כדאי לעשות את זה כשקטע הקוד של Terraform הוא חלק מפתרון מקצה לקצה.
- בודקים את הפרמטרים לדוגמה ומשנים אותם בהתאם לסביבה שלכם.
- שומרים את השינויים.
-
מפעילים את Terraform. צריך לעשות זאת רק פעם אחת לכל ספרייה.
terraform init
אופציונלי: תוכלו לכלול את האפשרות
-upgrade, כדי להשתמש בגרסה העדכנית ביותר של הספק של Google:terraform init -upgrade
החלה של השינויים
-
בודקים את ההגדרות ומוודאים שהמשאבים שמערכת Terraform תיצור או תעדכן תואמים לציפיות שלכם:
terraform plan
מתקנים את ההגדרות לפי הצורך.
-
מריצים את הפקודה הבאה ומזינים
yesבהודעה שמופיעה, כדי להחיל את הגדרות Terraform:terraform apply
ממתינים עד שב-Terraform תוצג ההודעה "Apply complete!".
- פותחים את הפרויקט ב- Google Cloud כדי להציג את התוצאות. במסוף Google Cloud , נכנסים למשאבים בממשק המשתמש כדי לוודא שהם נוצרו או עודכנו ב-Terraform.
API
קוראים ל-method tables.insert עם משאב טבלה מוגדר שמציין את המאפיין rangePartitioning ואת המאפיין schema.
Java
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Java במדריך למתחילים של BigQuery באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של BigQuery Java API.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
Node.js
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Node.js במדריך למתחילים של BigQuery באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של BigQuery Node.js API.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
Python
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Python במדריך למתחילים של BigQuery באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של BigQuery Python API.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
יצירת טבלה מחולקת למחיצות מתוצאת שאילתה
אפשר ליצור טבלה מחולקת למחיצות מתוצאת שאילתה בדרכים הבאות:
- ב-SQL, משתמשים בהצהרה
CREATE TABLE ... AS SELECT. אפשר להשתמש בגישה הזו כדי ליצור טבלה שמחולקת למחיצות לפי עמודה של יחידת זמן או טווח של מספרים שלמים, אבל לא לפי זמן הטמעה. - כדי להגדיר טבלת יעד לשאילתה, משתמשים בכלי שורת הפקודה של BigQuery או ב-BigQuery API. כשהשאילתה פועלת, BigQuery כותב את התוצאות בטבלת היעד. אפשר להשתמש בגישה הזו לכל סוג של חלוקה למחיצות.
מפעילים את ה-method
jobs.insertב-API ומציינים את החלוקה למחיצות במאפייןtimePartitioningאו במאפייןrangePartitioning.
SQL
משתמשים בהצהרה CREATE TABLE. כדי להגדיר את החלוקה למחיצות, צריך לכלול סעיף PARTITION BY.
בדוגמה הבאה נוצרת טבלה שמחולקת למחיצות לפי העמודה transaction_date:
נכנסים לדף BigQuery במסוף Google Cloud .
בעורך השאילתות, מזינים את ההצהרה הבאה:
CREATE TABLE mydataset.newtable (transaction_id INT64, transaction_date DATE) PARTITION BY transaction_date AS ( SELECT transaction_id, transaction_date FROM mydataset.mytable );
משתמשים בסעיף
OPTIONSכדי להגדיר את אפשרויות הטבלה, כמו דרישות מסנן המחיצה.לוחצים על הפעלה.
מידע נוסף על הרצת שאילתות זמין במאמר הרצת שאילתה אינטראקטיבית.
BQ
-
מפעילים את Cloud Shell במסוף Google Cloud .
בחלק התחתון של מסוף Google Cloud יתחיל סשן של Cloud Shell ותופיע הודעה של שורת הפקודה. Cloud Shell היא סביבת מעטפת שבה ה-CLI של Google Cloud מותקן ומוגדרים ערכים לפרויקט הקיים. הסשן יופעל תוך כמה שניות.
כדי ליצור טבלה מחולקת למחיצות משאילתה, משתמשים בפקודה
bq queryעם הדגל--destination_tableוהדגל--time_partitioning_type.חלוקה למחיצות לפי עמודת יחידת זמן:
bq query \ --use_legacy_sql=false \ --destination_table TABLE_NAME \ --time_partitioning_field COLUMN \ --time_partitioning_type UNIT_TIME \ 'QUERY_STATEMENT'
חלוקה למחיצות לפי זמן הטמעה:
bq query \ --use_legacy_sql=false \ --destination_table TABLE_NAME \ --time_partitioning_type UNIT_TIME \ 'QUERY_STATEMENT'
חלוקה למחיצות לפי טווח של מספרים שלמים:
bq query \ --use_legacy_sql=false \ --destination_table PROJECT_ID:DATASET.TABLE \ --range_partitioning COLUMN,START,END,INTERVAL \ 'QUERY_STATEMENT'
מחליפים את מה שכתוב בשדות הבאים:
- PROJECT_ID: מזהה הפרויקט. אם לא מציינים פרויקט, המערכת משתמשת בפרויקט שמוגדר כברירת מחדל.
- DATASET: השם של מערך נתונים בפרויקט.
- TABLE: שם הטבלה שרוצים ליצור.
- COLUMN: שם עמודת החלוקה למחיצות.
- UNIT_TIME: סוג החלוקה למחיצות. הערכים הנתמכים כוללים את
DAY,HOUR,MONTHאוYEAR. - START: תחילת החלוקה למחיצות לפי טווח, כולל.
- END: סוף טווח החלוקה למחיצות, לא כולל.
- INTERVAL: הרוחב של כל טווח בתוך המחיצה.
- QUERY_STATEMENT: השאילתה ששימשה לאכלוס הטבלה.
בדוגמה הבאה נוצרת טבלה שמחולקת למחיצות לפי העמודה
transaction_date, באמצעות חלוקה חודשית למחיצות.bq query \ --use_legacy_sql=false \ --destination_table mydataset.newtable \ --time_partitioning_field transaction_date \ --time_partitioning_type MONTH \ 'SELECT transaction_id, transaction_date FROM mydataset.mytable'
בדוגמה הבאה נוצרת טבלה שמחולקת למחיצות לפי העמודה
customer_id, באמצעות חלוקה למחיצות לפי טווח של מספרים שלמים.bq query \ --use_legacy_sql=false \ --destination_table mydataset.newtable \ --range_partitioning customer_id,0,100,10 \ 'SELECT * FROM mydataset.ponies'
בטבלאות שמחולקות למחיצות לפי זמני הטמעת הנתונים, אפשר גם לטעון נתונים למחיצה ספציפית באמצעות מעצב מחיצות. בדוגמה הבאה יוצרים טבלה חדשה שמחולקת למחיצות לפי זמני הטעינה, וטוענים נתונים למחיצה
20180201(1 בפברואר 2018):bq query \ --use_legacy_sql=false \ --time_partitioning_type=DAY \ --destination_table='newtable$20180201' \ 'SELECT * FROM mydataset.mytable'
API
כדי לשמור את תוצאות השאילתה בטבלה מחולקת למחיצות, צריך להפעיל את ה-method jobs.insert.
מגדירים משימה ב-query. מציינים את טבלת היעד ב-destinationTable. מציינים את החלוקה למחיצות במאפיין timePartitioning או במאפיין rangePartitioning.
המרת טבלאות עם חלוקה לפי תאריכים לטבלאות מחולקות למחיצות (Partitions) לפי זמני הטמעת הנתונים
אם יצרתם בעבר טבלאות עם חלוקה לפי תאריכים, אתם יכולים להמיר את כל קבוצת הטבלאות הקשורות לטבלה אחת שמחולקת למחיצות לפי זמני כתיבת הנתונים, באמצעות הפקודה partition בכלי שורת הפקודה של BigQuery.
bq --location=LOCATION partition \ --time_partitioning_type=PARTITION_TYPE \ --time_partitioning_expiration INTEGER \ PROJECT_ID:SOURCE_DATASET.SOURCE_TABLE \ PROJECT_ID:DESTINATION_DATASET.DESTINATION_TABLE
מחליפים את מה שכתוב בשדות הבאים:
- LOCATION: שם המיקום. הדגל
--locationהוא אופציונלי. - PARTITION_TYPE: סוג המחיצה. הערכים האפשריים כוללים את
DAY,HOUR,MONTHאוYEAR. - INTEGER: זמן התפוגה של המחיצה, בשניות. אין ערך מינימלי. זמן התפוגה מחושב לפי תאריך ה-UTC של המחיצה בתוספת ערך המספר השלם. הדגל
time_partitioning_expirationהוא אופציונלי. - PROJECT_ID: מזהה הפרויקט.
- SOURCE_DATASET: קבוצת הנתונים שמכילה את הטבלאות שמחולקות לפי תאריכים.
- SOURCE_TABLE: הקידומת של הטבלאות שמחולקות לפי תאריכים.
- DESTINATION_DATASET: מערך הנתונים של הטבלה החדשה עם המחיצות.
- DESTINATION_TABLE: השם של הטבלה המפוצלת שרוצים ליצור.
הפקודה partition לא תומכת בדגלים --label, --expiration, --add_tags או --description. אחרי שיוצרים את הטבלה, אפשר להוסיף לה תוויות, תאריך תפוגה, תגים ותיאור.
כשמריצים את הפקודה partition, BigQuery יוצר משימת העתקה שמייצרת מחיצות מהטבלאות המפוצלות.
בדוגמה הבאה יוצרים טבלה מחולקת למחיצות (Partitions) לפי זמני כתיבת הנתונים בשם mytable_partitioned, מקבוצה של טבלאות עם חלוקה לפי תאריכים עם הקידומת sourcetable_. הטבלה החדשה מחולקת למחיצות מדי יום, עם תפוגת מחיצה של 259,200 שניות (3 ימים).
bq partition \
--time_partitioning_type=DAY \
--time_partitioning_expiration 259200 \
mydataset.sourcetable_ \
mydataset.mytable_partitioned
אם הטבלאות עם חלוקה לפי תאריכים היו sourcetable_20180126 ו-sourcetable_20180127, הפקודה הזו הייתה יוצרת את המחיצות הבאות: mydataset.mytable_partitioned$20180126 ו-mydataset.mytable_partitioned$20180127.
אבטחה של טבלאות מחולקות למחיצות (Partitions)
בקרת הגישה לטבלאות מחולקות זהה לבקרת הגישה לטבלאות רגילות. למידע נוסף, קראו את מבוא לבקרות גישה לטבלאות.
המאמרים הבאים
- במאמר ניהול טבלאות מחולקות למחיצות מוסבר איך לנהל ולעדכן טבלאות מחולקות למחיצות.
- למידע נוסף על שליחת שאילתות לטבלאות מחולקות למחיצות, ראו שליחת שאילתות לטבלאות מחולקות למחיצות.