יצירת טבלאות חיצוניות ב-Cloud Storage
טבלאות חיצוניות של Cloud Storage מאפשרות לשלוח שאילתות על נתונים בפורמטים כמו CSV, JSON, Avro, ORC ו-Parquet ישירות מ-BigQuery, בלי לטעון אותם לאחסון של BigQuery. במאמר הזה מוסבר איך ליצור טבלאות חיצוניות בנתונים מחולקים למחיצות ובנתונים שלא מחולקים למחיצות, איך לשלוח אליהן שאילתות ואיך לשדרג אותן לטבלאות BigLake.
כדי לשלוח שאילתה לטבלה חיצונית, אתם צריכים הרשאות גם לטבלה וגם לקובצי Cloud Storage. אם אפשר, השתמשו במקום זאת בטבלת BigLake, כי הקצאת גישה פירושה שהמשתמשים צריכים הרשאות רק בטבלה.
פורמטים וסוגי אחסון נתמכים
ב-BigQuery אפשר לשלוח שאילתות על נתונים ב-Cloud Storage בפורמטים הבאים:
- ערכים מופרדים בפסיקים (CSV)
- JSON (מופרד בשורות חדשות)
- Avro
- ORC
- Parquet
- ייצוא מ-Datastore
- ייצוא מ-Firestore
ב-BigQuery אפשר להריץ שאילתות על נתונים ב-Cloud Storage מסוגי האחסון הבאים:
- רגילה
- Nearline
- Coldline
- העברה לארכיון
כששולחים שאילתה על נתונים שמאוחסנים ב-Cloud Storage, חשוב להביא בחשבון את המיקום של מערך הנתונים ושל הקטגוריה של Cloud Storage.
לפני שמתחילים
להקצות תפקידים של ניהול זהויות והרשאות גישה (IAM) שנותנים למשתמשים את ההרשאות הנדרשות כדי לבצע כל משימה שמופיעה במסמך הזה. ההרשאות שנדרשות לביצוע משימה (אם יש כאלה) מפורטות בקטע "ההרשאות הנדרשות" של המשימה.
התפקידים הנדרשים
כדי ליצור טבלה חיצונית, צריך את הרשאת bigquery.tables.create לניהול זהויות והרשאות גישה (IAM) ב-BigQuery.
כל אחד מהתפקידים הבאים שמוגדרים מראש בניהול הזהויות והרשאות הגישה (IAM) כולל את ההרשאה הזו:
- עריכה של נתוני BigQuery (
roles/bigquery.dataEditor) - בעלי הנתונים ב-BigQuery (
roles/bigquery.dataOwner) - אדמין ב-BigQuery (
roles/bigquery.admin)
כדי לגשת לקטגוריה של Cloud Storage שמכילה את הנתונים, צריך גם את ההרשאות הבאות:
storage.buckets.getstorage.objects.get-
storage.objects.list(חובה אם משתמשים בתו כללי לחיפוש ב-URI)
התפקיד המוגדר מראש Storage Admin (roles/storage.admin) ב-Cloud Storage לניהול זהויות והרשאות גישה כולל את ההרשאות האלה.
אם אין לכם אף אחד מהתפקידים האלה, בקשו מהאדמין לתת לכם גישה או ליצור בשבילכם את הטבלה החיצונית.
למידע נוסף על תפקידים והרשאות של ניהול זהויות והרשאות גישה ב-BigQuery, קראו את המאמר תפקידים והרשאות מוגדרים מראש.
היקפי גישה למכונות Compute Engine
אם אתם צריכים לשלוח שאילתה ממכונה של Compute Engine לטבלה חיצונית שמקושרת למקור ב-Cloud Storage, למכונה צריך להיות לפחות היקף גישה לקריאה בלבד ב-Cloud Storage (https://www.googleapis.com/auth/devstorage.read_only).
היקפי ההרשאות שולטים בגישה של המכונה ב-Compute Engine למוצרי Google Cloud, כולל Cloud Storage. אפליקציות שפועלות במכונה משתמשות בחשבון השירות שמצורף למכונה כדי לשלוח קריאות לממשקי ה-API של Google Cloud .
אם מגדירים מכונה של Compute Engine כך שתפעל כחשבון השירות שמוגדר כברירת מחדל ב-Compute Engine, המכונה מקבלת כברירת מחדל מספר היקפי הרשאות שמוגדרים כברירת מחדל, כולל היקף ההרשאות https://www.googleapis.com/auth/devstorage.read_only.
אם הגדרתם את המכונה עם חשבון שירות בהתאמה אישית, ודאו שאתם נותנים למכונה את ההיקף https://www.googleapis.com/auth/devstorage.read_only באופן מפורש.
במאמר שינוי חשבון השירות והיקפי הגישה של מכונה מוסבר איך להחיל היקפי הרשאות על מכונה של Compute Engine. מידע נוסף על חשבונות שירות של Compute Engine זמין במאמר חשבונות שירות.
יצירת טבלאות חיצוניות בנתונים לא מחולקים למחיצות
כדי ליצור טבלה קבועה שמקושרת למקור הנתונים החיצוני:
- באמצעות מסוף Google Cloud
- באמצעות הפקודה
bq mk - יצירת
ExternalDataConfigurationכשמשתמשים ב-method tables.insertשל ה-API - מריצים את הצהרת שפת הגדרת הנתונים (DDL)
CREATE EXTERNAL TABLE. - שימוש בספריות הלקוח
בוחרים באחת מהאפשרויות הבאות:
המסוף
נכנסים לדף BigQuery.
בחלונית השמאלית, לוחצים על Explorer:

אם החלונית הימנית לא מוצגת, לוחצים על הרחבת החלונית הימנית כדי לפתוח אותה.
בחלונית Explorer, מרחיבים את הפרויקט, לוחצים על Datasets ובוחרים קבוצת נתונים.
מרחיבים את האפשרות Actions ולוחצים על Create table.
בקטע מקור, מציינים את הפרטים הבאים:
בשדה Create table from, בוחרים באפשרות Google Cloud Storage.
בשדה Select file from GCS bucket or use a URI pattern, בוחרים קטגוריה וקובץ לשימוש, או מקלידים את הנתיב בפורמט
gs://bucket_name/[folder_name/]file_name.אי אפשר לציין כמה מזהי URI במסוף Google Cloud , אבל אפשר לבחור כמה קבצים על ידי ציון תו כללי לחיפוש אחד – כוכבית (
*). לדוגמה,gs://mybucket/file_name*. מידע נוסף מופיע במאמר תמיכה בתווים כלליים לחיפוש במזהי URI של Cloud Storage.הקטגוריה של Cloud Storage צריכה להיות באותו מיקום שבו נמצא מערך הנתונים שמכיל את הטבלה שאתם יוצרים.
בקטע פורמט קובץ, בוחרים את הפורמט שמתאים לקובץ.
בקטע Destination, מציינים את הפרטים הבאים:
בשדה Project, בוחרים את הפרויקט שבו רוצים ליצור את הטבלה.
בשדה Dataset, בוחרים את מערך הנתונים שבו רוצים ליצור את הטבלה.
בשדה Table, מזינים את שם הטבלה שיוצרים.
בשדה Table type, בוחרים באפשרות External table.
בקטע Schema, אתם יכולים להפעיל את האפשרות schema auto-detection או לציין סכימה באופן ידני אם יש לכם קובץ מקור. אם אין לכם קובץ מקור, אתם צריכים לציין סכימה באופן ידני.
כדי להפעיל זיהוי אוטומטי של סכימה, בוחרים באפשרות Auto-detect.
כדי לציין סכימה באופן ידני, משאירים את האפשרות Auto-detect לא מסומנת. מפעילים את האפשרות Edit as text ומזינים את סכימת הטבלה כמערך JSON.
כדי להתעלם משורות עם ערכי עמודות נוספים שלא תואמים לסכימה, מרחיבים את הקטע Advanced options ובוחרים באפשרות Unknown values.
לוחצים על Create table.
אחרי שיוצרים את הטבלה הקבועה, אפשר להריץ שאילתה על הטבלה כאילו היא טבלה ב-BigQuery. אחרי שהשאילתה מסתיימת, אפשר לייצא את התוצאות כקובצי CSV או JSON, לשמור את התוצאות כטבלה או לשמור את התוצאות ב-Google Sheets.
SQL
כדי ליצור טבלה חיצונית קבועה, מריצים את הצהרת ה-DDL של CREATE EXTERNAL TABLE.
אתם יכולים לציין את הסכימה באופן מפורש, או להשתמש בזיהוי אוטומטי של סכימה כדי להסיק את הסכימה מהנתונים החיצוניים.
נכנסים לדף BigQuery במסוף Google Cloud .
בעורך השאילתות, מזינים את ההצהרה הבאה:
CREATE EXTERNAL TABLE `PROJECT_ID.DATASET.EXTERNAL_TABLE_NAME` OPTIONS ( format ="TABLE_FORMAT", uris = ['BUCKET_PATH'[,...]] );
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: שם הפרויקט שבו רוצים ליצור את הטבלה, לדוגמהmyproject -
DATASET: השם של מערך הנתונים ב-BigQuery שבו רוצים ליצור את הטבלה, למשלmydataset. -
EXTERNAL_TABLE_NAME: שם הטבלה שרוצים ליצור, לדוגמהmytable -
TABLE_FORMAT: הפורמט של הטבלה שרוצים ליצור, לדוגמהPARQUET -
BUCKET_PATH: הנתיב לקטגוריה של Cloud Storage שמכילה את הנתונים של הטבלה החיצונית, בפורמט['gs://bucket_name/[folder_name/]file_name'].אפשר לבחור כמה קבצים מהקטגוריה על ידי ציון תו כללי אחד של כוכבית (
*) בנתיב. לדוגמה,['gs://mybucket/file_name*']. מידע נוסף זמין במאמר תמיכה בתווים כלליים לחיפוש במזהי URI של Cloud Storage.אפשר לציין כמה קטגוריות באפשרות
urisעל ידי ציון כמה נתיבים.בדוגמאות הבאות מוצגים ערכים תקינים של
uris:['gs://bucket/path1/myfile.csv']['gs://bucket/path1/*.csv']['gs://bucket/path1/*', 'gs://bucket/path2/file00*']
כשמציינים ערכי
urisשמטרגטים כמה קבצים, כל הקבצים האלה חייבים להיות בעלי סכימה תואמת.מידע נוסף על השימוש במזהי URI של Cloud Storage ב-BigQuery זמין במאמר נתיב המשאבים של Cloud Storage.
-
לוחצים על הפעלה.
מידע נוסף על הרצת שאילתות זמין במאמר הרצת שאילתה אינטראקטיבית.
דוגמאות
בדוגמה הבאה נעשה שימוש בזיהוי אוטומטי של סכימה כדי ליצור טבלה חיצונית בשם sales שמקושרת לקובץ CSV שמאוחסן ב-Cloud Storage:
CREATE OR REPLACE EXTERNAL TABLE mydataset.sales OPTIONS ( format = 'CSV', uris = ['gs://mybucket/sales.csv']);
בדוגמה הבאה מצוינת סכימה באופן מפורש, והשורה הראשונה בקובץ ה-CSV נמחקת:
CREATE OR REPLACE EXTERNAL TABLE mydataset.sales ( Region STRING, Quarter STRING, Total_Sales INT64 ) OPTIONS ( format = 'CSV', uris = ['gs://mybucket/sales.csv'], skip_leading_rows = 1);
BQ
כדי ליצור טבלה חיצונית, משתמשים בפקודה bq mk עם הדגל --external_table_definition. הדגל הזה מכיל נתיב לקובץ הגדרת טבלה או הגדרת טבלה מוטבעת.
אפשרות 1: קובץ הגדרת טבלה
משתמשים בפקודה bq mkdef כדי ליצור קובץ הגדרת טבלה, ואז מעבירים את נתיב הקובץ לפקודה bq mk באופן הבא:
bq mkdef --source_format=SOURCE_FORMAT \ BUCKET_PATH > DEFINITION_FILE bq mk --table \ --external_table_definition=DEFINITION_FILE \ DATASET_NAME.TABLE_NAME \ SCHEMA
מחליפים את מה שכתוב בשדות הבאים:
-
SOURCE_FORMAT: הפורמט של מקור הנתונים החיצוני. לדוגמה,CSV.
BUCKET_PATH: הנתיב לקטגוריה של Cloud Storage שמכילה את הנתונים של הטבלה, בפורמטgs://bucket_name/[folder_name/]file_pattern.אפשר לבחור כמה קבצים מהקטגוריה על ידי ציון תו כללי אחד של כוכבית (
*) ב-file_pattern. לדוגמה,gs://mybucket/file00*.parquet. מידע נוסף מופיע במאמר תמיכה בתווים כלליים לחיפוש במזהי URI של Cloud Storage.אפשר לציין כמה קטגוריות לאפשרות
urisעל ידי ציון כמה נתיבים.בדוגמאות הבאות מוצגים ערכים תקינים של
uris:gs://bucket/path1/myfile.csvgs://bucket/path1/*.parquetgs://bucket/path1/file1*,gs://bucket1/path1/*
כשמציינים ערכי
urisשמטרגטים כמה קבצים, לכל הקבצים האלה צריכה להיות סכימה תואמת.מידע נוסף על השימוש במזהי URI של Cloud Storage ב-BigQuery זמין במאמר נתיב המשאבים של Cloud Storage.
DEFINITION_FILE: הנתיב לקובץ הגדרת הטבלה במחשב המקומי.
DATASET_NAME: שם מערך הנתונים שמכיל את הטבלה.
TABLE_NAME: שם הטבלה שיוצרים.
SCHEMA: מציין נתיב לקובץ סכימת JSON, או מציין את הסכימה בפורמטfield:data_type,field:data_type,....
דוגמה:
bq mkdef --source_format=CSV gs://mybucket/sales.csv > mytable_def
bq mk --table --external_table_definition=mytable_def \
mydataset.mytable \
Region:STRING,Quarter:STRING,Total_sales:INTEGER
כדי להשתמש בזיהוי אוטומטי של סכימה, מגדירים את הדגל --autodetect=true בפקודה mkdef ומשמיטים את הסכימה:
bq mkdef --source_format=CSV --autodetect=true \
gs://mybucket/sales.csv > mytable_def
bq mk --table --external_table_definition=mytable_def \
mydataset.mytable
אפשרות 2: הגדרת טבלה מוטבעת
במקום ליצור קובץ הגדרת טבלה, אתם יכולים להעביר את הגדרת הטבלה ישירות לפקודה bq mk:
bq mk --table \ --external_table_definition=@SOURCE_FORMAT=BUCKET_PATH \ DATASET_NAME.TABLE_NAME \ SCHEMA
מחליפים את מה שכתוב בשדות הבאים:
SOURCE_FORMAT: הפורמט של מקור הנתונים החיצונילדוגמה,
CSV.
BUCKET_PATH: הנתיב לקטגוריה של Cloud Storage שמכילה את הנתונים של הטבלה, בפורמטgs://bucket_name/[folder_name/]file_pattern.אפשר לבחור כמה קבצים מהקטגוריה על ידי ציון תו כללי אחד של כוכבית (
*) ב-file_pattern. לדוגמה,gs://mybucket/file00*.parquet. מידע נוסף מופיע במאמר תמיכה בתווים כלליים לחיפוש במזהי URI של Cloud Storage.אפשר לציין כמה קטגוריות לאפשרות
urisעל ידי ציון כמה נתיבים.בדוגמאות הבאות מוצגים ערכים תקינים של
uris:gs://bucket/path1/myfile.csvgs://bucket/path1/*.parquetgs://bucket/path1/file1*,gs://bucket1/path1/*
כשמציינים ערכי
urisשמטרגטים כמה קבצים, לכל הקבצים האלה צריכה להיות סכימה תואמת.מידע נוסף על השימוש במזהי URI של Cloud Storage ב-BigQuery זמין במאמר נתיב המשאבים של Cloud Storage.
DATASET_NAME: שם מערך הנתונים שמכיל את הטבלה.
TABLE_NAME: שם הטבלה שיוצרים.
SCHEMA: מציין נתיב לקובץ סכימת JSON, או מציין את הסכימה בפורמטfield:data_type,field:data_type,.... כדי להשתמש בזיהוי אוטומטי של סכימה, משמיטים את הארגומנט הזה.
דוגמה:
bq mkdef --source_format=CSV gs://mybucket/sales.csv > mytable_def
bq mk --table --external_table_definition=mytable_def \
mydataset.mytable \
Region:STRING,Quarter:STRING,Total_sales:INTEGER
API
מפעילים את ה-method tables.insert ב-API ויוצרים ExternalDataConfiguration במשאב Table שמעבירים.
כדי להפעיל זיהוי אוטומטי של סכימה במקורות נתונים נתמכים, מציינים את המאפיין schema או מגדירים את המאפיין autodetect כ-true.
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. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
יצירת טבלאות חיצוניות בנתונים מחולקים למחיצות
אתם יכולים ליצור טבלה חיצונית לנתונים שחולקו למחיצות ב-Hive ונמצאים ב-Cloud Storage. אחרי שיוצרים טבלה מחולקת למחיצות חיצוניות, אי אפשר לשנות את מפתח המחיצה. כדי לשנות את מפתח המחיצה, צריך ליצור מחדש את הטבלה.
כדי ליצור טבלה חיצונית לנתונים שחולקו למחיצות ב-Hive, בוחרים באחת מהאפשרויות הבאות:
המסוף
במסוף Google Cloud , נכנסים ל-BigQuery.
- בחלונית הימנית, לוחצים על Explorer.
- בחלונית Explorer, מרחיבים את הפרויקט, לוחצים על Datasets ובוחרים מערך נתונים.
- לוחצים על Actions ואז על Create table. החלונית Create table תיפתח.
- בקטע מקור, מציינים את הפרטים הבאים:
- בקטע Create table from, בוחרים באפשרות Google Cloud Storage.
- בשדה Select file from Cloud Storage bucket, מזינים את הנתיב לתיקייה ב-Cloud Storage באמצעות תווים כלליים לחיפוש.
לדוגמה,
my_bucket/my_files*. הקטגוריה של Cloud Storage צריכה להיות באותו מיקום כמו מערך הנתונים שמכיל את הטבלה שרוצים ליצור, להוסיף לה או להחליף אותה. - ברשימה פורמט קובץ, בוחרים את סוג הקובץ.
- מסמנים את התיבה Source data partitioning, ובשדה Select Source URI Prefix מזינים את הקידומת של ה-URI של Cloud Storage. לדוגמה,
gs://my_bucket/my_files. - בקטע מצב היסק של מחיצה, בוחרים אחת מהאפשרויות הבאות:
- Automatically infer types: מגדירים את מצב הזיהוי של סכימת המחיצה ל-
AUTO. - כל העמודות הן מחרוזות: מגדירים את מצב הזיהוי של סכימת המחיצה לערך
STRINGS. - Provide my own: מגדירים את מצב הזיהוי של סכימת המחיצה לערך
CUSTOMומזינים באופן ידני את פרטי הסכימה של מפתחות המחיצה. מידע נוסף מופיע במאמר הגדרת סכימה מותאמת אישית למפתח המחיצה.
- Automatically infer types: מגדירים את מצב הזיהוי של סכימת המחיצה ל-
- אופציונלי: כדי לדרוש מסנן מחיצה בכל השאילתות בטבלה הזו, מסמנים את התיבה Require partition filter. דרישה למסנן מחיצות יכולה להפחית את העלות ולשפר את הביצועים. מידע נוסף זמין במאמר דרישה למסנני פרדיקטים במפתחות מחיצה בשאילתות.
- בקטע Destination, מציינים את הפרטים הבאים:
- בשדה Project, בוחרים את הפרויקט שבו רוצים ליצור את הטבלה.
- בשדה Dataset, בוחרים את מערך הנתונים שבו רוצים ליצור את הטבלה.
- בשדה Table, מזינים את שם הטבלה שרוצים ליצור.
- בשדה Table type, בוחרים באפשרות External table.
- בקטע Schema, מזינים את הגדרת הסכימה.
- כדי להפעיל זיהוי אוטומטי של סכימה, בוחרים באפשרות Auto detect.
- כדי להתעלם משורות עם ערכי עמודות נוספים שלא תואמים לסכימה, מרחיבים את הקטע Advanced options ובוחרים באפשרות Unknown values.
- לוחצים על Create table.
SQL
משתמשים בהצהרת ה-DDL CREATE EXTERNAL TABLE.
בדוגמה הבאה נעשה שימוש בזיהוי אוטומטי של מפתחות חלוקה למחיצות של Hive:
CREATE EXTERNAL TABLE `PROJECT_ID.DATASET.EXTERNAL_TABLE_NAME` WITH PARTITION COLUMNS OPTIONS ( format = 'SOURCE_FORMAT', uris = ['GCS_URIS'], hive_partition_uri_prefix = 'GCS_URI_SHARED_PREFIX', require_hive_partition_filter = BOOLEAN);
מחליפים את מה שכתוב בשדות הבאים:
-
SOURCE_FORMAT: הפורמט של מקור הנתונים החיצוני, למשלPARQUET -
GCS_URIS: הנתיב לתיקייה ב-Cloud Storage, בפורמט של תו כללי לחיפוש -
GCS_URI_SHARED_PREFIX: הקידומת של ה-URI במקור, בלי התו הכללי לחיפוש -
BOOLEAN: האם לדרוש מסנן פרדיקט בזמן השאילתה. הדגל הזה הוא אופציונלי. ערך ברירת המחדל הואfalse.
בדוגמה הבאה נעשה שימוש במפתחות ובסוגים של מחיצות Hive בהתאמה אישית, על ידי רישום שלהם בסעיף WITH PARTITION COLUMNS:
CREATE EXTERNAL TABLE `PROJECT_ID.DATASET.EXTERNAL_TABLE_NAME` WITH PARTITION COLUMNS (PARTITION_COLUMN_LIST) OPTIONS ( format = 'SOURCE_FORMAT', uris = ['GCS_URIS'], hive_partition_uri_prefix = 'GCS_URI_SHARED_PREFIX', require_hive_partition_filter = BOOLEAN);
מחליפים את מה שכתוב בשדות הבאים:
-
PARTITION_COLUMN_LIST: רשימת עמודות לפי אותו סדר בנתיב של התיקייה ב-Cloud Storage, בפורמט הבא:
KEY1 TYPE1, KEY2 TYPE2
בדוגמה הבאה נוצרת טבלה מחולקת למחיצות חיצוניות. הוא משתמש בזיהוי אוטומטי של סכימה כדי לזהות גם את סכימת הקובץ וגם את פריסת החלוקה למחיצות של Hive. אם הנתיב החיצוני הוא gs://bucket/path/field_1=first/field_2=1/data.parquet, עמודות המחיצה מזוהות בתור field_1 (STRING) ו-field_2 (INT64).
CREATE EXTERNAL TABLE dataset.AutoHivePartitionedTable WITH PARTITION COLUMNS OPTIONS ( uris = ['gs://bucket/path/*'], format = 'PARQUET', hive_partition_uri_prefix = 'gs://bucket/path', require_hive_partition_filter = false);
בדוגמה הבאה נוצרת טבלה עם חלוקה למחיצות חיצונית, על ידי ציון מפורש של עמודות המחיצה. בדוגמה הזו, ההנחה היא שנתיב הקובץ החיצוני הוא בתבנית gs://bucket/path/field_1=first/field_2=1/data.parquet.
CREATE EXTERNAL TABLE dataset.CustomHivePartitionedTable WITH PARTITION COLUMNS ( field_1 STRING, -- column order must match the external path field_2 INT64) OPTIONS ( uris = ['gs://bucket/path/*'], format = 'PARQUET', hive_partition_uri_prefix = 'gs://bucket/path', require_hive_partition_filter = false);
BQ
קודם כל, משתמשים בפקודה bq mkdef כדי ליצור קובץ הגדרת טבלה:
bq mkdef \ --source_format=SOURCE_FORMAT \ --hive_partitioning_mode=PARTITIONING_MODE \ --hive_partitioning_source_uri_prefix=GCS_URI_SHARED_PREFIX \ --require_hive_partition_filter=BOOLEAN \ GCS_URIS > DEFINITION_FILE
מחליפים את מה שכתוב בשדות הבאים:
-
SOURCE_FORMAT: הפורמט של מקור הנתונים החיצוני. לדוגמה,CSV. -
PARTITIONING_MODE: מצב החלוקה למחיצות של Hive. משתמשים באחד מהערכים הבאים:-
AUTO: זיהוי אוטומטי של השמות והסוגים של המפתחות. -
STRINGS: המרה אוטומטית של שמות המפתחות למחרוזות. -
CUSTOM: מקודדים את סכימת המפתח בקידומת של ה-URI במקור.
-
-
GCS_URI_SHARED_PREFIX: הקידומת של ה-URI במקור. -
BOOLEAN: מציין אם לדרוש מסנן פרדיקט בזמן השאילתה. הדגל הזה הוא אופציונלי. ערך ברירת המחדל הואfalse. -
GCS_URIS: הנתיב לתיקייה ב-Cloud Storage, בפורמט של תו כללי לחיפוש. -
DEFINITION_FILE: הנתיב לקובץ הגדרת הטבלה במחשב המקומי.
אם הערך של PARTITIONING_MODE הוא CUSTOM, צריך לכלול את סכימת מפתח המחיצה בקידומת של ה-URI של המקור, בפורמט הבא:
--hive_partitioning_source_uri_prefix=GCS_URI_SHARED_PREFIX/{KEY1:TYPE1}/{KEY2:TYPE2}/...
אחרי שיוצרים את קובץ הגדרת הטבלה, משתמשים בפקודה bq mk כדי ליצור את הטבלה החיצונית:
bq mk --external_table_definition=DEFINITION_FILE \ DATASET_NAME.TABLE_NAME \ SCHEMA
מחליפים את מה שכתוב בשדות הבאים:
-
DEFINITION_FILE: הנתיב לקובץ הגדרת הטבלה. -
DATASET_NAME: שם מערך הנתונים שמכיל את הטבלה. -
TABLE_NAME: שם הטבלה שיוצרים. -
SCHEMA: מציין נתיב לקובץ סכימת JSON, או מציין את הסכימה בפורמטfield:data_type,field:data_type,.... כדי להשתמש בזיהוי אוטומטי של סכימה, משמיטים את הארגומנט הזה.
דוגמאות
בדוגמה הבאה נעשה שימוש במצב החלוקה למחיצות AUTO של Hive:
bq mkdef --source_format=CSV \
--hive_partitioning_mode=AUTO \
--hive_partitioning_source_uri_prefix=gs://myBucket/myTable \
gs://myBucket/myTable/* > mytable_def
bq mk --external_table_definition=mytable_def \
mydataset.mytable \
Region:STRING,Quarter:STRING,Total_sales:INTEGER
בדוגמה הבאה נעשה שימוש במצב החלוקה למחיצות STRING של Hive:
bq mkdef --source_format=CSV \
--hive_partitioning_mode=STRING \
--hive_partitioning_source_uri_prefix=gs://myBucket/myTable \
gs://myBucket/myTable/* > mytable_def
bq mk --external_table_definition=mytable_def \
mydataset.mytable \
Region:STRING,Quarter:STRING,Total_sales:INTEGER
בדוגמה הבאה נעשה שימוש במצב החלוקה למחיצות CUSTOM של Hive:
bq mkdef --source_format=CSV \
--hive_partitioning_mode=CUSTOM \
--hive_partitioning_source_uri_prefix=gs://myBucket/myTable/{dt:DATE}/{val:STRING} \
gs://myBucket/myTable/* > mytable_def
bq mk --external_table_definition=mytable_def \
mydataset.mytable \
Region:STRING,Quarter:STRING,Total_sales:INTEGER
API
כדי להגדיר חלוקה למחיצות ב-Hive באמצעות BigQuery API, צריך לכלול אובייקט hivePartitioningOptions באובייקט ExternalDataConfiguration כשיוצרים את קובץ הגדרת הטבלה.
אם מגדירים את השדה hivePartitioningOptions.mode לערך CUSTOM, צריך לקודד את הסכימה של מפתח המחיצה בשדה hivePartitioningOptions.sourceUriPrefix באופן הבא:
gs://BUCKET/PATH_TO_TABLE/{KEY1:TYPE1}/{KEY2:TYPE2}/...
כדי לאכוף את השימוש במסנן פרדיקט בזמן השאילתה, מגדירים את השדה hivePartitioningOptions.requirePartitionFilter לערך true.
Java
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Java במדריך למתחילים של BigQuery באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של BigQuery Java API.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
הרצת שאילתות על טבלאות חיצוניות
מידע נוסף זמין במאמר שליחת שאילתות על נתוני Cloud Storage בטבלאות חיצוניות.
שדרוג טבלאות חיצוניות ל-BigLake
כדי לשדרג טבלאות שמבוססות על Cloud Storage לטבלאות BigLake, צריך לשייך את הטבלה החיצונית לחיבור. אם אתם רוצים להשתמש בשמירת מטא-נתונים במטמון בטבלת BigLake, אתם יכולים לציין את ההגדרות לכך באותו הזמן. במאמר קבלת מידע על טבלאות מוסבר איך לקבל פרטים על טבלאות, כמו פורמט המקור ו-URI של המקור.
כדי לעדכן טבלה חיצונית לטבלת BigLake, בוחרים באחת מהאפשרויות הבאות:
SQL
כדי לעדכן טבלה, משתמשים בהצהרת ה-DDL של CREATE OR REPLACE EXTERNAL TABLE:
נכנסים לדף BigQuery במסוף Google Cloud .
בעורך השאילתות, מזינים את ההצהרה הבאה:
CREATE OR REPLACE EXTERNAL TABLE `PROJECT_ID.DATASET.EXTERNAL_TABLE_NAME` WITH CONNECTION {`REGION.CONNECTION_ID` | DEFAULT} OPTIONS( format ="TABLE_FORMAT", uris = ['BUCKET_PATH'], max_staleness = STALENESS_INTERVAL, metadata_cache_mode = 'CACHE_MODE' );
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: שם הפרויקט שמכיל את הטבלה -
DATASET: שם קבוצת הנתונים שמכילה את הטבלה -
EXTERNAL_TABLE_NAME: שם הטבלה -
REGION: האזור שבו נמצא החיבור -
CONNECTION_ID: שם החיבור שבו רוצים להשתמשכדי להשתמש ב חיבור שמוגדר כברירת מחדל, מציינים את
DEFAULTבמקום את מחרוזת החיבור שמכילה אתREGION.CONNECTION_ID. TABLE_FORMAT: הפורמט של הטבלהאי אפשר לשנות את זה כשמעדכנים את הטבלה.
-
BUCKET_PATH: הנתיב לקטגוריה של Cloud Storage שמכילה את הנתונים של הטבלה החיצונית, בפורמט['gs://bucket_name/[folder_name/]file_name'].כדי לבחור כמה קבצים מהקטגוריה, אפשר לציין תו כללי לחיפוש של כוכבית אחת (
*) בנתיב. לדוגמה,['gs://mybucket/file_name*']. מידע נוסף מופיע במאמר תמיכה בתווים כלליים לחיפוש במזהי URI של Cloud Storage.אפשר לציין כמה קטגוריות באפשרות
urisעל ידי ציון כמה נתיבים.בדוגמאות הבאות מוצגים ערכים תקינים של
uris:['gs://bucket/path1/myfile.csv']['gs://bucket/path1/*.csv']['gs://bucket/path1/*', 'gs://bucket/path2/file00*']
כשמציינים ערכי
urisשמטרגטים כמה קבצים, כל הקבצים האלה חייבים להיות בעלי סכימה תואמת.מידע נוסף על השימוש במזהי URI של Cloud Storage ב-BigQuery זמין במאמר נתיב המשאבים של Cloud Storage.
-
STALENESS_INTERVAL: מציין אם המטא-נתונים שנשמרו במטמון משמשים לפעולות בטבלה, ועד כמה המטא-נתונים שנשמרו במטמון צריכים להיות עדכניים כדי שהפעולה תשתמש בהםלמידע נוסף על שיקולים לשמירת מטא-נתונים במטמון, ראו שמירת מטא-נתונים במטמון לשיפור הביצועים.
כדי להשבית את השמירה של המטא-נתונים במטמון, מציינים את הערך 0. (זוהי ברירת המחדל)
כדי להפעיל שמירת מטא-נתונים במטמון, מציינים ערך של ליטרל מרווח בין 30 דקות ל-7 ימים. לדוגמה, מציינים
INTERVAL 4 HOURלמרווח זמן של 4 שעות. עם הערך הזה, פעולות בטבלה משתמשות במטא-נתונים שנשמרו במטמון אם הם רועננו ב-4 השעות האחרונות. אם המטא-נתונים במטמון ישנים יותר, הפעולה מאחזרת מטא-נתונים מ-Cloud Storage. -
CACHE_MODE: מציין אם המטמון של המטא-נתונים מתרענן באופן אוטומטי או ידנילמידע נוסף על שיקולים לשמירת מטא-נתונים במטמון, ראו שמירת מטא-נתונים במטמון לשיפור הביצועים.
מגדירים את הערך
AUTOMATICכדי לרענן את המטמון של המטא-נתונים במרווח זמן שמוגדר על ידי המערכת, בדרך כלל בין 30 ל-60 דקות.מגדירים את הערך
MANUALאם רוצים לרענן את המטמון של המטא-נתונים לפי לוח זמנים שאתם קובעים. במקרה כזה, אפשר להפעיל את הפרוצדורה של המערכתBQ.REFRESH_EXTERNAL_METADATA_CACHEכדי לרענן את המטמון.צריך להגדיר את
CACHE_MODEאם הערך שלSTALENESS_INTERVALגדול מ-0.
-
לוחצים על הפעלה.
מידע נוסף על הרצת שאילתות זמין במאמר הרצת שאילתה אינטראקטיבית.
BQ
כדי לעדכן טבלה, משתמשים בפקודות bq mkdef ו-bq update:
יוצרים הגדרה של טבלה חיצונית שמתארת את ההיבטים של הטבלה שרוצים לשנות:
bq mkdef --connection_id=PROJECT_ID.REGION.CONNECTION_ID \ --source_format=TABLE_FORMAT \ --metadata_cache_mode=CACHE_MODE \ "BUCKET_PATH" > /tmp/DEFINITION_FILE
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: שם הפרויקט שמכיל את החיבור -
REGION: האזור שבו נמצא החיבור -
CONNECTION_ID: שם החיבור שבו רוצים להשתמש -
TABLE_FORMAT: הפורמט שבו משתמשים בטבלה. אי אפשר לשנות את זה כשמעדכנים את הטבלה.
CACHE_MODE: קובע אם המטמון של המטא-נתונים מתרענן באופן אוטומטי או ידני. למידע נוסף על שיקולים לשמירת מטא-נתונים במטמון, ראו שמירת מטא-נתונים במטמון לשיפור הביצועים.מגדירים את הערך
AUTOMATICכדי לרענן את המטמון של המטא-נתונים במרווח זמן שמוגדר במערכת, בדרך כלל בין 30 ל-60 דקות.מגדירים את הערך
MANUALאם רוצים לרענן את המטמון של המטא-נתונים לפי לוח זמנים שאתם קובעים. במקרה כזה, אתם יכולים להפעיל את הפרוצדורה של המערכתBQ.REFRESH_EXTERNAL_METADATA_CACHEכדי לרענן את המטמון.צריך להגדיר את
CACHE_MODEאם הערך שלSTALENESS_INTERVALגדול מ-0.
BUCKET_PATH: הנתיב לקטגוריה של Cloud Storage שמכילה את הנתונים של הטבלה החיצונית, בפורמטgs://bucket_name/[folder_name/]file_name.כדי להגביל את הקבצים שנבחרו מהקטגוריה, אפשר לציין תו כללי לחיפוש של כוכבית אחת (
*) בנתיב. לדוגמה,gs://mybucket/file_name*. מידע נוסף מופיע במאמר תמיכה בתווים כלליים לחיפוש במזהי URI של Cloud Storage.אפשר לציין כמה קטגוריות לאפשרות
urisעל ידי ציון כמה נתיבים.בדוגמאות הבאות מוצגים ערכים תקינים של
uris:gs://bucket/path1/myfile.csvgs://bucket/path1/*.csvgs://bucket/path1/*,gs://bucket/path2/file00*
כשמציינים ערכי
urisשמטרגטים כמה קבצים, לכל הקבצים האלה צריכה להיות סכימה תואמת.מידע נוסף על השימוש במזהי URI של Cloud Storage ב-BigQuery זמין במאמר נתיב המשאבים של Cloud Storage.
DEFINITION_FILE: השם של קובץ הגדרת הטבלה שאתם יוצרים.
-
מעדכנים את הטבלה באמצעות ההגדרה החדשה של הטבלה החיצונית:
bq update --max_staleness=STALENESS_INTERVAL \ --external_table_definition=/tmp/DEFINITION_FILE \ PROJECT_ID:DATASET.EXTERNAL_TABLE_NAME
מחליפים את מה שכתוב בשדות הבאים:
STALENESS_INTERVAL: מציין אם המטא-נתונים שנשמרו במטמון משמשים לפעולות בטבלה, ועד כמה המטא-נתונים שנשמרו במטמון צריכים להיות עדכניים כדי שהפעולה תשתמש בהם. למידע נוסף על שיקולים לשמירת מטא-נתונים במטמון, ראו שמירת מטא-נתונים במטמון לשיפור הביצועים.כדי להשבית את השמירה של המטא-נתונים במטמון, מציינים את הערך 0. (זוהי ברירת המחדל)
כדי להפעיל את שמירת המטא-נתונים במטמון, מציינים ערך מרווח בין 30 דקות ל-7 ימים, בפורמט
Y-M D H:M:Sשמתואר במסמכי התיעוד של סוג הנתוניםINTERVAL. לדוגמה, מציינים0-0 0 4:0:0למרווח זמן של 4 שעות. עם הערך הזה, פעולות בטבלה משתמשות במטא-נתונים שנשמרו במטמון אם הם רועננו ב-4 השעות האחרונות. אם המטא-נתונים במטמון ישנים יותר, הפעולה מאחזרת את המטא-נתונים מ-Cloud Storage.
DEFINITION_FILE: השם של קובץ הגדרת הטבלה שיצרתם או עדכנתם.
PROJECT_ID: שם הפרויקט שמכיל את הטבלה
DATASET: שם מערך הנתונים שמכיל את הטבלה
EXTERNAL_TABLE_NAME: שם הטבלה
נתיב המשאב ב-Cloud Storage
כשיוצרים טבלה חיצונית שמבוססת על מקור נתונים ב-Cloud Storage, צריך לציין את הנתיב לנתונים.
נתיב המשאב ב-Cloud Storage מכיל את שם הקטגוריה ואת האובייקט (שם הקובץ). לדוגמה, אם הקטגוריה של Cloud Storage נקראת mybucket וקובץ הנתונים נקרא myfile.csv, הנתיב למשאב יהיה gs://mybucket/myfile.csv.
BigQuery לא תומך בנתיבי משאבים של Cloud Storage שכוללים כמה קווים נטויים ברצף אחרי הקו הנטוי הכפול הראשוני.
שמות של אובייקטים ב-Cloud Storage יכולים להכיל כמה תווים של לוכסן ("/") ברצף. עם זאת, BigQuery ממיר כמה לוכסנים עוקבים ללוכסן אחד. לדוגמה, נתיב המשאב הבא תקין ב-Cloud Storage, אבל לא עובד ב-BigQuery:
gs://bucket/my//object//name.
כדי לאחזר את נתיב המשאב ב-Cloud Storage:
פותחים את מסוף Cloud Storage.
עוברים למיקום של האובייקט (הקובץ) שמכיל את נתוני המקור.
לוחצים על שם האובייקט.
הדף Object details נפתח.
מעתיקים את הערך שמופיע בשדה gsutil URI, שמתחיל ב-
gs://.
תמיכה בתווים כלליים לחיפוש במזהי URI של Cloud Storage
אם הנתונים מפוצלים לכמה קבצים, אפשר להשתמש בתו הכללי כוכבית (*) כדי לבחור כמה קבצים. השימוש בתו הכללי לחיפוש כוכבית חייב לעמוד בכללים הבאים:
- הכוכבית יכולה להופיע בתוך שם האובייקט או בסוף שם האובייקט.
- אין תמיכה בשימוש בכמה כוכביות. לדוגמה, הנתיב
gs://mybucket/fed-*/temp/*.csvלא תקין. - אי אפשר להשתמש בכוכבית בשם הקטגוריה.
דוגמאות:
בדוגמה הבאה אפשר לראות איך בוחרים את כל הקבצים בכל התיקיות שמתחילות בקידומת
gs://mybucket/fed-samples/fed-sample:gs://mybucket/fed-samples/fed-sample*בדוגמה הבאה אפשר לראות איך לבחור רק קבצים עם הסיומת
.csvבתיקייה בשםfed-samplesובכל תיקיות המשנה שלfed-samples:gs://mybucket/fed-samples/*.csvבדוגמה הבאה אפשר לראות איך בוחרים קבצים עם תבנית השם
fed-sample*.csvבתיקייה שנקראתfed-samples. בדוגמה הזו לא נבחרים קבצים בתיקיות המשנה שלfed-samples.gs://mybucket/fed-samples/fed-sample*.csv
כשמשתמשים בכלי שורת הפקודה של BigQuery, יכול להיות שתצטרכו להוסיף תו בריחה (escape) לכוכבית בפלטפורמות מסוימות.
אי אפשר להשתמש בתו הכללי לחיפוש כוכבית כשיוצרים טבלאות חיצוניות שמקושרות לייצוא של Datastore או Firestore.
תמחור
העמלות הבאות על אחזור והעברת נתונים ב-Cloud Storage חלות על בקשות ב-BigQuery:
- עמלות האחזור של סוגי האחסון Nearline, Coldline ו-Archive Storage מחויבות בהתאם למסמכי התיעוד הקיימים בנושא תמחור ולמק"טים של אחזור.
- עמלות על העברת נתונים ברשת בין אזורים נגבות כשמשימה של BigQuery במיקום אחד קוראת נתונים שמאוחסנים בקטגוריה של Cloud Storage במיקום אחר. החיובים האלה מכוסים על ידי המק"טים הבאים:
- Google Cloud העברת נתונים של Storage בין יבשת 1 ליבשת 2. לדוגמה, המק"ט Google Cloud Storage Data Transfer between Northern America and Europe מיועד להעברת נתונים מ-
us-central1אלeurope-west1. - העברת נתונים ברשת Google Cloud בין אזורים באותה יבשת. לדוגמה, ראו Network Data Transfer Google Cloud Inter Region within Northern America להעברת נתונים מ-
us-east4אלUS.
- Google Cloud העברת נתונים של Storage בין יבשת 1 ליבשת 2. לדוגמה, המק"ט Google Cloud Storage Data Transfer between Northern America and Europe מיועד להעברת נתונים מ-
מגבלות
מידע על המגבלות שחלות על טבלאות חיצוניות זמין במאמר מגבלות של טבלאות חיצוניות.