יצירת טבלאות מחולקות למחיצות
בדף הזה מוסבר איך ליצור טבלאות מחולקות למחיצות ב-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 דומים לאלה של יצירת טבלה רגילה, רק שצריך לציין את אפשרויות החלוקה למחיצות, יחד עם אפשרויות אחרות של הטבלה.
יצירת טבלה עם חלוקה למחיצות לפי עמודה של יחידת זמן
כדי ליצור טבלה ריקה עם חלוקה למחיצות לפי עמודה של יחידת זמן והגדרת סכימה:
המסוף
במסוף Cloud de Confiance , עוברים לדף BigQuery.
- בחלונית הימנית, לוחצים על כלי הניתוחים.
- בחלונית Explorer, מרחיבים את הפרויקט, לוחצים על Datasets ובוחרים מערך נתונים.
- בקטע פרטי מערך הנתונים, לוחצים על יצירת טבלה.
- בחלונית Create table, מציינים את הפרטים הבאים:
- בקטע מקור, בוחרים באפשרות טבלה ריקה ברשימה יצירת טבלה מ.
- בקטע יעד, מציינים את הפרטים הבאים:
- בקטע Dataset (מערך נתונים), בוחרים את מערך הנתונים שבו רוצים ליצור את הטבלה.
- בשדה Table, מזינים את השם של הטבלה שרוצים ליצור.
- מוודאים שהשדה Table type (סוג הטבלה) מוגדר ל-Native table (טבלה מקורית).
- בקטע Schema (סכימה), מזינים את הגדרת הסכימה.
הסכימה צריכה לכלול עמודה של
DATE,TIMESTAMPאוDATETIMEעבור עמודת החלוקה למחיצות. מידע נוסף זמין במאמר בנושא ציון סכימה. אפשר להזין את פרטי הסכימה באופן ידני באחת מהשיטות הבאות:- אפשרות 1: לוחצים על Edit as text (עריכה כטקסט) ומדביקים את הסכימה כ-JSON array. כשמשתמשים במערך JSON, יוצרים את הסכימה באותו תהליך שבו יוצרים קובץ סכימת JSON.
כדי לראות את הסכימה של טבלה קיימת בפורמט JSON, מזינים את הפקודה הבאה:
bq show --format=prettyjson dataset.table
- אפשרות 2: לוחצים על הוספת שדה ומזינים את סכימת הטבלה. מציינים את השם, הסוג, והמצב של כל שדה.
- אפשרות 1: לוחצים על Edit as text (עריכה כטקסט) ומדביקים את הסכימה כ-JSON array. כשמשתמשים במערך 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 Cloud-powered encryption key.
- לוחצים על יצירת טבלה.
SQL
כדי ליצור טבלה עם חלוקה למחיצות לפי יחידת זמן, משתמשים בCREATE TABLE הצהרת DDL עם פסוקית PARTITION BY.
בדוגמה הבאה נוצרת טבלה עם מחיצות יומיות שמבוססות על העמודה transaction_date:
במסוף Cloud de Confiance , עוברים לדף 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
-
במסוף Cloud de Confiance , מפעילים את Cloud Shell.
בחלק התחתון של Cloud de Confiance המסוף יתחיל סשן של 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 בפרויקט ב- Cloud de Confiance , מבצעים את השלבים בקטעים הבאים.
הכנת Cloud Shell
- מפעילים את Cloud Shell.
-
מגדירים את פרויקט ברירת המחדל שבו רוצים להחיל את ההגדרות של Terraform. Cloud de Confiance
תצטרכו להריץ את הפקודה הזו רק פעם אחת לכל פרויקט, ותוכלו לעשות זאת בכל ספרייה.
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!".
- פותחים את Cloud de Confiance הפרויקט כדי לראות את התוצאות. במסוף Cloud de Confiance , נכנסים למשאבים בממשק המשתמש כדי לוודא שהם נוצרו או עודכנו ב-Terraform.
API
קוראים לשיטה tables.insert עם משאב טבלה מוגדר שמציין את המאפיין timePartitioning ואת המאפיין schema.
המשך
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי Goהוראות ההגדרה שבמדריך למתחילים של BigQuery באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של BigQuery Go API.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.
Java
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי Javaהוראות ההגדרה שבמדריך למתחילים של BigQuery באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של BigQuery Java API.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.
Node.js
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי Node.jsהוראות ההגדרה שבמדריך למתחילים של BigQuery באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של BigQuery Node.js API.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.
Python
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי Pythonהוראות ההגדרה שבמדריך למתחילים של BigQuery באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של BigQuery Python API.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.
יצירת טבלה מחולקת למחיצות (Partitions) לפי זמני כתיבת הנתונים
כדי ליצור טבלה ריקה מחולקת למחיצות (Partitions) לפי זמני כתיבת הנתונים עם הגדרת סכימה:
המסוף
פותחים את הדף BigQuery במסוף Cloud de Confiance .
בחלונית Explorer מרחיבים את הפרויקט ובוחרים מערך נתונים.
מרחיבים את האפשרות פעולות ולוחצים על פתיחה.
בחלונית הפרטים, לוחצים על יצירת טבלה .
בדף 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 (דרישת מסנן מחיצה). הוספת דרישה למסנן מחיצות יכולה להקטין את העלות ולשפר את הביצועים. מידע נוסף מופיע במאמר בנושא הגדרת דרישות לסינון מחיצות.
לוחצים על יצירת טבלה.
SQL
כדי ליצור טבלה מחולקת למחיצות (partitioning) לפי זמני כתיבת הנתונים, משתמשים בהצהרת CREATE TABLE עם פסוקית PARTITION BY שמחלקת למחיצות לפי _PARTITIONDATE.
בדוגמה הבאה נוצרת טבלה עם מחיצות יומיות:
במסוף Cloud de Confiance , עוברים לדף 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
-
במסוף Cloud de Confiance , מפעילים את Cloud Shell.
בחלק התחתון של Cloud de Confiance המסוף יתחיל סשן של 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 בפרויקט ב- Cloud de Confiance , מבצעים את השלבים בקטעים הבאים.
הכנת Cloud Shell
- מפעילים את Cloud Shell.
-
מגדירים את פרויקט ברירת המחדל שבו רוצים להחיל את ההגדרות של Terraform. Cloud de Confiance
תצטרכו להריץ את הפקודה הזו רק פעם אחת לכל פרויקט, ותוכלו לעשות זאת בכל ספרייה.
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!".
- פותחים את Cloud de Confiance הפרויקט כדי לראות את התוצאות. במסוף Cloud de Confiance , נכנסים למשאבים בממשק המשתמש כדי לוודא שהם נוצרו או עודכנו ב-Terraform.
API
קוראים לשיטה tables.insert עם משאב טבלה מוגדר שמציין את המאפיין timePartitioning ואת המאפיין schema.
יצירת טבלת מחיצות של טווח מספרים שלמים
כדי ליצור טבלת חלוקה למחיצות ריקה עם טווח של מספרים שלמים והגדרת סכימה:
המסוף
פותחים את הדף BigQuery במסוף Cloud de Confiance .
בחלונית Explorer מרחיבים את הפרויקט ובוחרים מערך נתונים.
מרחיבים את האפשרות פעולות ולוחצים על פתיחה.
בחלונית הפרטים, לוחצים על יצירת טבלה .
בדף Create table, בקטע Source, בוחרים באפשרות Empty table.
בקטע יעד:
- בשדה Dataset name (שם קבוצת הנתונים), בוחרים את קבוצת הנתונים המתאימה.
- בשדה Table name (שם הטבלה), מזינים את שם הטבלה.
- מוודאים שההגדרה של Table type היא Native table.
בקטע סכימה, מזינים את הגדרת הסכימה. מוודאים שהסכימה כוללת עמודה
INTEGERלעמודת החלוקה. מידע נוסף זמין במאמר בנושא ציון סכימה.בקטע Partition and cluster settings, ברשימה הנפתחת Partitioning, בוחרים באפשרות Partition by field ובוחרים את עמודת החלוקה למחיצות. האפשרות הזו זמינה רק אם הסכימה מכילה עמודה
INTEGER.מזינים ערכים עבור התחלה, סיום ומרווח:
- Start הוא תחילת הטווח של המחיצה הראשונה (כולל).
- End הוא סוף הטווח של המחיצה האחרונה (לא כולל).
- מרווח הוא הרוחב של כל טווח מחיצות.
ערכים מחוץ לטווחים האלה נכנסים למחיצה מיוחדת
__UNPARTITIONED__.(אופציונלי) כדי לדרוש מסנן מחיצה בכל השאילתות של הטבלה הזו, מסמנים את תיבת הסימון Require partition filter (דרישת מסנן מחיצה). הוספת דרישה למסנן מחיצות יכולה להקטין את העלות ולשפר את הביצועים. מידע נוסף מופיע במאמר בנושא הגדרת דרישות לסינון מחיצות.
לוחצים על יצירת טבלה.
SQL
כדי ליצור טבלה מחולקת למחיצות (Partitions) עם טווח של מספרים שלמים, משתמשים בהצהרת DDL CREATE TABLE עם סעיף PARTITION BY.
בדוגמה הבאה נוצרת טבלה שמחולקת למחיצות בעמודה customer_id עם התחלה 0, סיום 100 ומרווח 10:
במסוף Cloud de Confiance , עוברים לדף 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
-
במסוף Cloud de Confiance , מפעילים את Cloud Shell.
בחלק התחתון של Cloud de Confiance המסוף יתחיל סשן של 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 בפרויקט ב- Cloud de Confiance , מבצעים את השלבים בקטעים הבאים.
הכנת Cloud Shell
- מפעילים את Cloud Shell.
-
מגדירים את פרויקט ברירת המחדל שבו רוצים להחיל את ההגדרות של Terraform. Cloud de Confiance
תצטרכו להריץ את הפקודה הזו רק פעם אחת לכל פרויקט, ותוכלו לעשות זאת בכל ספרייה.
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!".
- פותחים את Cloud de Confiance הפרויקט כדי לראות את התוצאות. במסוף Cloud de Confiance , נכנסים למשאבים בממשק המשתמש כדי לוודא שהם נוצרו או עודכנו ב-Terraform.
API
קוראים למתודה tables.insert עם משאב טבלה מוגדר שמציין את המאפיין rangePartitioning ואת המאפיין schema.
Java
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי Javaהוראות ההגדרה שבמדריך למתחילים של BigQuery באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של BigQuery Java API.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.
Node.js
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי Node.jsהוראות ההגדרה שבמדריך למתחילים של BigQuery באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של BigQuery Node.js API.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.
Python
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי Pythonהוראות ההגדרה שבמדריך למתחילים של BigQuery באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של BigQuery Python API.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.
יצירת טבלה עם חלוקה למחיצות מתוצאה של שאילתה
אפשר ליצור טבלת מחיצות מתוצאת שאילתה בדרכים הבאות:
- ב-SQL, משתמשים בהצהרה
CREATE TABLE ... AS SELECT. אפשר להשתמש בגישה הזו כדי ליצור טבלה שמחולקת למחיצות לפי עמודה של יחידת זמן או לפי טווח של מספרים שלמים, אבל לא לפי זמן ההטמעה. - משתמשים בכלי שורת הפקודה של BigQuery או ב-BigQuery API כדי להגדיר טבלת יעד לשאילתה. כשהשאילתה מורצת, BigQuery כותב את התוצאות בטבלת היעד. אפשר להשתמש בגישה הזו לכל סוג של חלוקה למחיצות.
מבצעים קריאה לשיטת ה-API
jobs.insertומציינים את החלוקה למחיצות במאפייןtimePartitioningאו במאפייןrangePartitioning.
SQL
משתמשים בהצהרה CREATE TABLE. כוללים סעיף PARTITION BY
כדי להגדיר את החלוקה למחיצות.
בדוגמה הבאה נוצרת טבלה עם חלוקה למחיצות בעמודה transaction_date:
במסוף Cloud de Confiance , עוברים לדף 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
-
במסוף Cloud de Confiance , מפעילים את Cloud Shell.
בחלק התחתון של Cloud de Confiance המסוף יתחיל סשן של 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'
חלוקה למחיצות (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: תחילת חלוקת הטווח, כולל.
- 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) לפי זמני כתיבת הנתונים
אם יצרתם בעבר טבלאות עם חלוקה לפי תאריך, אתם יכולים להמיר את כל קבוצת הטבלאות הקשורות לטבלה אחת עם חלוקה למחיצות (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.
אבטחה של טבלאות מחולקות למחיצות
בקרת הגישה לטבלאות עם חלוקה למחיצות זהה לבקרת הגישה לטבלאות רגילות. מידע נוסף זמין במאמר מבוא לבקרת גישה לטבלאות.
המאמרים הבאים
- מידע נוסף על ניהול ועדכון של טבלאות עם מחיצות זמין במאמר בנושא ניהול טבלאות עם מחיצות.
- מידע על שליחת שאילתות לטבלאות מחולקות למחיצות זמין במאמר בנושא שליחת שאילתות לטבלאות מחולקות למחיצות.