יצירת טבלאות מחולקות למחיצות
בדף הזה מוסבר איך ליצור טבלאות מחולקות למחיצות ב-BigQuery. סקירה כללית של טבלאות מחולקות למחיצות זמינה במאמר מבוא לטבלאות מחולקות למחיצות.
לפני שמתחילים
מקצים תפקידים של ניהול זהויות והרשאות גישה (IAM) שמעניקים למשתמשים את ההרשאות הדרושות לביצוע כל משימה שמופיעה במאמר הזה.
ההרשאות הנדרשות
התפקידים הנדרשים
כדי לקבל את ההרשאות שדרושות ליצירת טבלה, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים:
-
BigQuery Job User (
roles/bigquery.jobUser) בפרויקט אם יוצרים טבלה על ידי טעינת נתונים או על ידי שמירת תוצאות של שאילתה בטבלה. -
BigQuery Data Editor (
roles/bigquery.dataEditor) במערך הנתונים שבו יוצרים את הטבלה.
להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
התפקידים המוגדרים מראש האלה כוללים את ההרשאות שנדרשות ליצירת טבלה. כדי לראות בדיוק אילו הרשאות נדרשות, אפשר להרחיב את הקטע ההרשאות הנדרשות:
ההרשאות הנדרשות
כדי ליצור טבלה, צריך את ההרשאות הבאות:
-
bigquery.tables.createבמערך הנתונים שבו אתם יוצרים את הטבלה. -
bigquery.tables.getDataבכל הטבלאות והתצוגות שהשאילתה מפנה אליהן, אם שומרים את תוצאות השאילתה כטבלה. -
bigquery.jobs.createבפרויקט אם יוצרים את הטבלה על ידי טעינת נתונים או על ידי שמירת תוצאות של שאילתה בטבלה. -
bigquery.tables.updateDataבטבלה אם מוסיפים לטבלה או מחליפים אותה בתוצאות של שאילתה.
יכול להיות שתקבלו את ההרשאות האלה באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש אחרים.
יצירה של טבלה מחולקת ריקה
השלבים ליצירת טבלה מחולקת למחיצות ב-BigQuery דומים לאלה של יצירת טבלה רגילה, רק שצריך לציין את אפשרויות החלוקה למחיצות, יחד עם אפשרויות אחרות של הטבלה.
יצירת טבלה עם חלוקה לעמודות לפי יחידת זמן
כדי ליצור טבלה ריקה עם חלוקה למחיצות לפי עמודה של יחידת זמן והגדרת סכימה:
המסוף
במסוף Google Cloud , עוברים לדף BigQuery.
- בחלונית הימנית, לוחצים על כלי הניתוחים.
- בחלונית Explorer, מרחיבים את הפרויקט, לוחצים על Datasets ובוחרים מערך נתונים.
- בקטע פרטי מערך הנתונים, לוחצים על יצירת טבלה.
- בחלונית Create table, מציינים את הפרטים הבאים:
- בקטע מקור, בוחרים באפשרות טבלה ריקה ברשימה יצירת טבלה מ.
- בקטע יעד, מציינים את הפרטים הבאים:
- בקטע Dataset (מערך נתונים), בוחרים את מערך הנתונים שבו רוצים ליצור את הטבלה.
- בשדה Table (טבלה), מזינים את השם של הטבלה שרוצים ליצור.
- מוודאים שהשדה Table type (סוג הטבלה) מוגדר ל-Native table (טבלה מקורית).
- בקטע Schema (סכימה), מזינים את הגדרת הסכימה.
הסכימה צריכה לכלול עמודה של
DATE,TIMESTAMPאוDATETIMEעבור עמודת החלוקה למחיצות. מידע נוסף זמין במאמר בנושא ציון סכימה. אפשר להזין את פרטי הסכימה באופן ידני באחת מהשיטות הבאות:- אפשרות 1: לוחצים על עריכה כטקסט ומדביקים את הסכימה בצורה של מערך JSON. כשמשתמשים במערך JSON, יוצרים את הסכימה באותו תהליך שבו יוצרים קובץ סכימת JSON.
כדי לראות את הסכימה של טבלה קיימת בפורמט JSON, מזינים את הפקודה הבאה:
bq show --format=prettyjson dataset.table
- אפשרות 2: לוחצים על הוספת שדה ומזינים את סכימת הטבלה. מציינים את השם, הסוג, והמצב של כל שדה.
- אפשרות 1: לוחצים על עריכה כטקסט ומדביקים את הסכימה בצורה של מערך JSON. כשמשתמשים במערך JSON, יוצרים את הסכימה באותו תהליך שבו יוצרים קובץ סכימת JSON.
כדי לראות את הסכימה של טבלה קיימת בפורמט JSON, מזינים את הפקודה הבאה:
- בקטע Partition and cluster settings, ברשימה Partitioning, בוחרים באפשרות Partition by field ואז בוחרים את עמודת החלוקה למחיצות. האפשרות הזו זמינה רק אם הסכימה מכילה עמודה של
DATE,TIMESTAMPאוDATETIME. - אופציונלי: כדי לדרוש מסנן מחיצה בכל השאילתות של הטבלה הזו, מסמנים את תיבת הסימון דרישת מסנן מחיצה. מסנן של מחיצה יכול להקטין את העלות ולשפר את הביצועים. מידע נוסף מופיע במאמר בנושא הגדרת דרישות לסינון מחיצות.
- בוחרים את סוג החלוקה.
- אופציונלי: בקטע Advanced options, אם רוצים להשתמש במפתח הצפנה בניהול הלקוח, בוחרים באפשרות Use a customer-managed encryption key (CMEK). כברירת מחדל, BigQuery מצפין את תוכן הלקוחות שמאוחסן במצב מנוחה באמצעות Google-owned and Google-managed encryption key.
- לוחצים על יצירת טבלה.
SQL
כדי ליצור טבלה עם חלוקה למחיצות לפי יחידת זמן, משתמשים בCREATE TABLE הצהרת DDL עם פסקה PARTITION BY.
בדוגמה הבאה נוצרת טבלה עם מחיצות יומיות שמבוססות על העמודה transaction_date:
במסוף Google Cloud , עוברים לדף BigQuery.
מזינים את ההצהרה הבאה בעורך השאילתות:
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
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
משתמשים בפקודה
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: הגדרת סכימה בפורמט
- מפעילים את Cloud Shell.
-
מגדירים את פרויקט ברירת המחדל שבו רוצים להחיל את ההגדרות של Terraform. Google Cloud
תצטרכו להריץ את הפקודה הזו רק פעם אחת לכל פרויקט, ותוכלו לעשות זאת בכל ספרייה.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
אם תגדירו ערכים ספציפיים בקובץ התצורה של 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.
Terraform
משתמשים במשאב google_bigquery_table.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
בדוגמה הבאה נוצרת טבלה בשם mytable שמחולקת למחיצות לפי יום:
כדי להחיל את ההגדרות של Terraform בפרויקט ב- Google Cloud , מבצעים את השלבים בקטעים הבאים.
הכנת Cloud Shell
הכנת הספרייה
לכל קובץ תצורה של Terraform צריכה להיות ספרייה משלו (שנקראת גם מודול ברמה הבסיסית).
החלה של השינויים
API
קוראים לשיטה tables.insert עם משאב טבלה מוגדר שמציין את המאפיין timePartitioning ואת המאפיין schema.
Go
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי 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) לפי זמני כתיבת הנתונים
כדי ליצור טבלה ריקה מחולקת למחיצות (Partitions) לפי זמני כתיבת הנתונים עם הגדרת סכימה:
המסוף
פותחים את הדף BigQuery במסוף Google Cloud .
בחלונית Explorer מרחיבים את הפרויקט ובוחרים מערך נתונים.
מרחיבים את האפשרות פעולות ולוחצים על פתיחה.
בחלונית הפרטים, לוחצים על יצירת טבלה .
בדף Create table, בקטע Source, בוחרים באפשרות Empty table.
בקטע יעד:
- בשדה Dataset name (שם קבוצת הנתונים), בוחרים את קבוצת הנתונים המתאימה.
- בשדה Table name (שם הטבלה), מזינים את שם הטבלה.
- מוודאים שסוג הטבלה מוגדר לטבלה מקורית.
בקטע Schema (סכימה), מזינים את הגדרת הסכימה.
בקטע Partition and cluster settings (הגדרות של מחיצות ושל אשכולות), לוחצים על Partitioning (חלוקה למחיצות) ואז על Partition by ingestion time (חלוקה למחיצות לפי זמן ההטמעה).
(אופציונלי) כדי לדרוש מסנן מחיצה בכל השאילתות של הטבלה הזו, מסמנים את תיבת הסימון דרישת מסנן מחיצה. שימוש במסנן מחיצות יכול להוזיל את העלויות ולשפר את הביצועים. מידע נוסף מופיע במאמר בנושא הגדרת דרישות לסינון מחיצות.
לוחצים על יצירת טבלה.
SQL
כדי ליצור טבלה מחולקת למחיצות (Partitions) לפי זמני כתיבת הנתונים, משתמשים בהצהרת CREATE TABLE עם סעיף PARTITION BY שמחלק למחיצות לפי _PARTITIONDATE.
בדוגמה הבאה נוצרת טבלה עם מחיצות יומיות:
במסוף Google Cloud , עוברים לדף BigQuery.
מזינים את ההצהרה הבאה בעורך השאילתות:
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
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
משתמשים בפקודה
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: הגדרה בפורמט
- מפעילים את Cloud Shell.
-
מגדירים את פרויקט ברירת המחדל שבו רוצים להחיל את ההגדרות של Terraform. Google Cloud
תצטרכו להריץ את הפקודה הזו רק פעם אחת לכל פרויקט, ותוכלו לעשות זאת בכל ספרייה.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
אם תגדירו ערכים ספציפיים בקובץ התצורה של 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.
Terraform
משתמשים במשאב google_bigquery_table.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
בדוגמה הבאה נוצרת טבלה בשם mytable שמחולקת למחיצות לפי זמני כתיבת הנתונים:
כדי להחיל את ההגדרות של Terraform בפרויקט ב- Google Cloud , מבצעים את השלבים בקטעים הבאים.
הכנת Cloud Shell
הכנת הספרייה
לכל קובץ תצורה של Terraform צריכה להיות ספרייה משלו (שנקראת גם מודול ברמה הבסיסית).
החלה של השינויים
API
קוראים לשיטה tables.insert עם משאב טבלה מוגדר שמציין את המאפיין timePartitioning ואת המאפיין schema.
יצירת טבלת מחיצות של טווח מספרים שלמים
כדי ליצור טבלת חלוקה למחיצות עם הגדרת סכימה:
המסוף
פותחים את הדף BigQuery במסוף Google Cloud .
בחלונית Explorer מרחיבים את הפרויקט ובוחרים מערך נתונים.
מרחיבים את האפשרות פעולות ולוחצים על פתיחה.
בחלונית הפרטים, לוחצים על יצירת טבלה .
בדף Create table, בקטע Source, בוחרים באפשרות Empty table.
בקטע יעד:
- בשדה Dataset name (שם קבוצת הנתונים), בוחרים את קבוצת הנתונים המתאימה.
- בשדה Table name (שם הטבלה), מזינים את שם הטבלה.
- מוודאים שסוג הטבלה מוגדר לטבלה מקורית.
בקטע סכימה, מזינים את הגדרת הסכימה. מוודאים שהסכימה כוללת עמודה
INTEGERלעמודת החלוקה למחיצות. מידע נוסף זמין במאמר בנושא ציון סכימה.בקטע Partition and cluster settings, ברשימה הנפתחת Partitioning, בוחרים באפשרות Partition by field ובוחרים את עמודת החלוקה למחיצות. האפשרות הזו זמינה רק אם הסכימה מכילה עמודה של
INTEGER.מזינים ערכים עבור התחלה, סיום ומרווח:
- Start הוא תחילת הטווח של המחיצה הראשונה (כולל).
- End הוא סוף טווח המחיצה האחרונה (לא כולל).
- מרווח הוא הרוחב של כל טווח מחיצות.
ערכים מחוץ לטווחים האלה נכנסים למחיצה מיוחדת
__UNPARTITIONED__.(אופציונלי) כדי לדרוש מסנן מחיצה בכל השאילתות של הטבלה הזו, מסמנים את תיבת הסימון דרישת מסנן מחיצה. שימוש במסנן מחיצות יכול להוזיל את העלויות ולשפר את הביצועים. מידע נוסף מופיע במאמר בנושא הגדרת דרישות לסינון מחיצות.
לוחצים על יצירת טבלה.
SQL
כדי ליצור טבלת מחיצות עם טווח מספרים שלמים, משתמשים בCREATE TABLE הצהרת DDL עם פסקה PARTITION BY.
בדוגמה הבאה נוצרת טבלה שמחולקת למחיצות בעמודה customer_id עם התחלה 0, סיום 100 ומרווח 10:
במסוף Google Cloud , עוברים לדף BigQuery.
מזינים את ההצהרה הבאה בעורך השאילתות:
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
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
משתמשים בפקודה
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: הגדרה מוטבעת של סכימה בפורמט
- מפעילים את Cloud Shell.
-
מגדירים את פרויקט ברירת המחדל שבו רוצים להחיל את ההגדרות של Terraform. Google Cloud
תצטרכו להריץ את הפקודה הזו רק פעם אחת לכל פרויקט, ותוכלו לעשות זאת בכל ספרייה.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
אם תגדירו ערכים ספציפיים בקובץ התצורה של 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.
Terraform
משתמשים במשאב google_bigquery_table.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
בדוגמה הבאה נוצרת טבלה בשם mytable שמחולקת למחיצות לפי טווח מספרים שלמים:
כדי להחיל את ההגדרות של Terraform בפרויקט ב- Google Cloud , מבצעים את השלבים בקטעים הבאים.
הכנת Cloud Shell
הכנת הספרייה
לכל קובץ תצורה של Terraform צריכה להיות ספרייה משלו (שנקראת גם מודול ברמה הבסיסית).
החלה של השינויים
API
קוראים לשיטה 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. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
יצירת טבלה מחולקת למחיצות מתוצאת שאילתה
אפשר ליצור טבלה מחולקת למחיצות (Partitions) מתוצאת שאילתה בדרכים הבאות:
- ב-SQL, משתמשים בהצהרה
CREATE TABLE ... AS SELECT. אפשר להשתמש בגישה הזו כדי ליצור טבלה שמחולקת למחיצות לפי עמודה של יחידת זמן או טווח מספרים שלמים, אבל לא לפי זמן ההטמעה. - משתמשים בכלי שורת הפקודה של BigQuery או ב-BigQuery API כדי להגדיר טבלת יעד לשאילתה. כשמריצים את השאילתה, BigQuery כותב את התוצאות בטבלת היעד. אפשר להשתמש בגישה הזו לכל סוג של חלוקה למחיצות.
מבצעים קריאה לשיטת ה-API
jobs.insertומציינים את החלוקה למחיצות במאפייןtimePartitioningאו במאפייןrangePartitioning.
SQL
משתמשים בהצהרה CREATE TABLE. כוללים סעיף PARTITION BY
כדי להגדיר את החלוקה למחיצות.
בדוגמה הבאה נוצרת טבלה עם חלוקה למחיצות בעמודה transaction_date:
במסוף Google Cloud , עוברים לדף BigQuery.
מזינים את ההצהרה הבאה בעורך השאילתות:
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
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
כדי ליצור טבלה עם חלוקה למחיצות משאילתה, משתמשים בפקודה
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'
חלוקה למחיצות (Partitioning) לפי זמני כתיבת הנתונים:
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: תחילת חלוקה למחיצות (partitioning) של הטווח, כולל.
- 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
כדי לשמור את תוצאות השאילתה בטבלה מחולקת למחיצות, מפעילים את השיטה jobs.insert.
מגדירים משימת query. מציינים את טבלת היעד בתג destinationTable. מציינים את החלוקה למחיצות במאפיין timePartitioning או במאפיין rangePartitioning.
המרת טבלאות מחולקות למחיצות (Partitions) לפי תאריך לטבלאות מחולקות למחיצות לפי זמני כתיבת הנתונים
אם יצרתם בעבר טבלאות עם חלוקה לפי תאריך, אתם יכולים להמיר את כל קבוצת הטבלאות הקשורות לטבלה אחת מחולקת למחיצות (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_. הטבלה החדשה מחולקת למחיצות (partitioning) מדי יום, עם תפוגה של 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.
אבטחה של טבלאות מחולקות למחיצות
בקרת הגישה לטבלאות עם מחיצות זהה לבקרת הגישה לטבלאות רגילות. מידע נוסף זמין במאמר מבוא לבקרת גישה לטבלאות.
המאמרים הבאים
- מידע נוסף על ניהול ועדכון של טבלאות עם חלוקה למחיצות זמין במאמר בנושא ניהול טבלאות עם חלוקה למחיצות.
- מידע על שליחת שאילתות לטבלאות מחולקות למחיצות זמין במאמר שליחת שאילתות לטבלאות מחולקות למחיצות.