יצירת טבלאות חיצוניות ב-Cloud Storage
ב-BigQuery אפשר להריץ שאילתות על נתונים ב-Cloud Storage בפורמטים הבאים:
- ערכים מופרדים בפסיקים (CSV)
- JSON (מופרד בתו שורה חדשה)
- Avro
- ORC
- Parquet
- ייצוא מ-Datastore
- ייצוא מ-Firestore
ב-BigQuery אפשר להריץ שאילתות על נתונים ב-Cloud Storage ממחלקות האחסון הבאות:
- רגילה
- Nearline
- Coldline
- העברה לארכיון
כדי לשלוח שאילתה לטבלה חיצונית ב-Cloud Storage, צריכות להיות לכם הרשאות גם לטבלה החיצונית וגם לקבצים ב-Cloud Storage. אם אפשר, מומלץ להשתמש במקום זאת בטבלת BigLake. טבלאות BigLake מספקות הקצאת הרשאות, כך שאתם צריכים הרשאות רק בטבלת BigLake כדי לשלוח שאילתות לנתוני Cloud Storage.
חשוב להתייחס למיקום של מערך הנתונים ושל קטגוריית Cloud Storage כשמבצעים שאילתה על נתונים שמאוחסנים ב-Cloud Storage.
לפני שמתחילים
מקצים תפקידים של ניהול זהויות והרשאות גישה (IAM) שנותנים למשתמשים את ההרשאות הנדרשות לביצוע כל משימה במסמך הזה. ההרשאות שנדרשות לביצוע משימה (אם יש כאלה) מפורטות בקטע 'הרשאות נדרשות' של המשימה.
התפקידים הנדרשים
כדי ליצור טבלה חיצונית, צריך הרשאה לניהול זהויות והרשאות גישה (IAM) ב-BigQuery bigquery.tables.create.
כל אחד מהתפקידים המוגדרים מראש הבאים של ניהול זהויות והרשאות גישה (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) של ניהול זהויות והרשאות גישה (IAM) ב-Cloud Storage.
אם לא הוקצו לכם התפקידים האלה, אתם צריכים לבקש מהאדמין לתת לכם גישה או ליצור בשבילכם את הטבלה החיצונית.
במאמר תפקידים והרשאות מוגדרים מראש יש מידע נוסף על תפקידים והרשאות ב-IAM ב-BigQuery.
היקפי גישה למכונות Compute Engine
אם אתם צריכים להריץ שאילתה על טבלה חיצונית שמקושרת למקור ב-Cloud Storage מתוך מכונה ב-Compute Engine, למכונה צריכה להיות לפחות הרשאת הגישה לקריאה בלבד ב-Cloud Storage (https://www.googleapis.com/auth/devstorage.read_only).
ההיקפים קובעים את הגישה של מכונת Compute Engine למוצרים, כולל Cloud Storage. Cloud de Confiance by S3NSאפליקציות שפועלות במופע משתמשות בחשבון השירות שמצורף למופע כדי לקרוא לממשקי API של Cloud de Confiance .
אם מגדירים מכונה של Compute Engine להפעלה כחשבון השירות המוגדר כברירת מחדל ב-Compute Engine, למכונה מוקצים כברירת מחדל מספר היקפים שמוגדרים כברירת מחדל, כולל ההיקף https://www.googleapis.com/auth/devstorage.read_only.
אם במקום זאת הגדרתם את המופע עם חשבון שירות בהתאמה אישית, הקפידו להעניק את היקף הגישה https://www.googleapis.com/auth/devstorage.read_only למופע באופן מפורש.
במאמר שינוי חשבון השירות והיקפי הגישה של מכונה מוסבר איך להחיל היקפי הרשאות על מכונה של Compute Engine. מידע נוסף על חשבונות שירות ב-Compute Engine זמין במאמר בנושא חשבונות שירות.
יצירת טבלאות חיצוניות בנתונים שלא חולקו למחיצות
כדי ליצור טבלה קבועה שמקושרת למקור הנתונים החיצוני:
- שימוש במסוף Cloud de Confiance
- שימוש בפקודה
bq mk - יצירת
ExternalDataConfigurationכשמשתמשים ב-method tables.insertשל API - הפעלת ההצהרה של שפת הגדרת הנתונים (DDL)
CREATE EXTERNAL TABLE. - שימוש בספריות הלקוח
בוחרים באחת מהאפשרויות הבאות:
המסוף
עוברים לדף BigQuery.
בחלונית הימנית, לוחצים על כלי הניתוחים:

אם החלונית הימנית לא מוצגת, לוחצים על הרחבת החלונית הימנית כדי לפתוח אותה.
בחלונית Explorer, מרחיבים את הפרויקט, לוחצים על Datasets ואז בוחרים מערך נתונים.
מרחיבים את האפשרות Actions (פעולות) ולוחצים על Create table (יצירת טבלה).
בקטע מקור, מציינים את הפרטים הבאים:
בקטע Create table from (יצירת טבלה מתוך), בוחרים באפשרות Google Cloud Storage.
בקטע Select file from GCS bucket or use a URI pattern (בחירת קובץ ממאגר GCS או שימוש בתבנית URI), מעיינים כדי לבחור מאגר וקובץ לשימוש, או מקלידים את הנתיב בפורמט
gs://bucket_name/[folder_name/]file_name.אי אפשר לציין כמה כתובות URI במסוף Cloud de Confiance , אבל אפשר לבחור כמה קבצים על ידי ציון כוכבית אחת (
*) כתו כללי. לדוגמה,gs://mybucket/file_name*. מידע נוסף זמין במאמר בנושא תמיכה בתווים כלליים בכתובות URI של Cloud Storage.קטגוריה של Cloud Storage צריכה להיות באותו מיקום של מערך הנתונים שמכיל את הטבלה שאתם יוצרים.
בקטע פורמט קובץ, בוחרים את הפורמט שמתאים לקובץ.
בקטע יעד, מציינים את הפרטים הבאים:
בשדה Project, בוחרים את הפרויקט שבו רוצים ליצור את הטבלה.
בקטע Dataset (מערך נתונים), בוחרים את מערך הנתונים שבו רוצים ליצור את הטבלה.
בשדה Table (טבלה), מזינים את שם הטבלה שיוצרים.
בשדה Table type (סוג הטבלה), בוחרים באפשרות External table (טבלה חיצונית).
בקטע סכימה, אתם יכולים להפעיל זיהוי אוטומטי של סכימה או לציין סכימה באופן ידני אם יש לכם קובץ מקור. אם אין לכם קובץ מקור, אתם צריכים לציין סכימה באופן ידני.
כדי להפעיל זיהוי אוטומטי של סכימה, בוחרים באפשרות זיהוי אוטומטי.
כדי לציין סכימה באופן ידני, משאירים את האפשרות זיהוי אוטומטי לא מסומנת. מפעילים את האפשרות Edit as text ומזינים את סכימת הטבלה כמערך JSON.
כדי להתעלם משורות עם ערכי עמודות נוספים שלא תואמים לסכימה, מרחיבים את הקטע אפשרויות מתקדמות ובוחרים באפשרות ערכים לא ידועים.
לוחצים על יצירת טבלה.
אחרי שיוצרים את הטבלה הקבועה, אפשר להריץ שאילתה על הטבלה כאילו היא הייתה טבלה ב-BigQuery. אחרי שהשאילתה מסתיימת, אפשר לייצא את התוצאות כקובצי CSV או JSON, לשמור את התוצאות כטבלה או לשמור את התוצאות ב-Google Sheets.
SQL
כדי ליצור טבלה חיצונית קבועה, מריצים את הצהרת ה-DDL CREATE EXTERNAL TABLE.
אפשר לציין את הסכימה באופן מפורש, או להשתמש בזיהוי אוטומטי של סכימה כדי להסיק את הסכימה מהנתונים החיצוניים.
במסוף Cloud de Confiance , עוברים לדף BigQuery.
מזינים את ההצהרה הבאה בעורך השאילתות:
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 של API tables.insert ויוצרים ExternalDataConfiguration במשאב Table שמעבירים.
מציינים את המאפיין schema או מגדירים את המאפיין autodetect לערך true כדי להפעיל זיהוי אוטומטי של סכימה עבור מקורות נתונים נתמכים.
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.
יצירת טבלאות חיצוניות על נתונים שחולקו למחיצות
אפשר ליצור טבלה חיצונית לנתונים שחולקו למחיצות ב-Hive ונמצאים ב-Cloud Storage. אחרי שיוצרים טבלה מחולקת למחיצות חיצוניות, אי אפשר לשנות את מפתח המחיצה. כדי לשנות את מפתח המחיצה, צריך ליצור מחדש את הטבלה.
כדי ליצור טבלה חיצונית לנתונים שחולקו למחיצות ב-Hive, בוחרים באחת מהאפשרויות הבאות:
המסוף
במסוף Cloud de Confiance , עוברים אל BigQuery.
- בחלונית הימנית, לוחצים על כלי הניתוחים.
- בחלונית Explorer, מרחיבים את הפרויקט, לוחצים על Datasets ובוחרים מערך נתונים.
- לוחצים על פעולות ואז על יצירת טבלה. תיפתח החלונית Create table.
- בקטע מקור, מציינים את הפרטים הבאים:
- בקטע Create table from (יצירת טבלה מתוך), בוחרים באפשרות Google Cloud Storage.
- בקטע Select file from Cloud Storage bucket (בחירת קובץ מקטגוריה של Cloud Storage), מזינים את הנתיב לתיקייה ב-Cloud Storage באמצעות wildcards.
לדוגמה,
my_bucket/my_files*. הקטגוריה של Cloud Storage צריכה להיות באותו מיקום כמו מערך הנתונים שמכיל את הטבלה שרוצים ליצור, להוסיף לה נתונים או להחליף אותה. - מהרשימה פורמט קובץ בוחרים את סוג הקובץ.
- מסמנים את תיבת הסימון חלוקת נתוני המקור למחיצות, ובשדה בחירת קידומת URI של המקור מזינים את קידומת ה-URI של Cloud Storage. לדוגמה,
gs://my_bucket/my_files. - בקטע Partition inference mode (מצב הסקה של מחיצות), בוחרים באחת מהאפשרויות הבאות:
- הסקת סוגים באופן אוטומטי: הגדרת מצב הזיהוי של סכימת החלוקה למחיצות לערך
AUTO. - כל העמודות הן מחרוזות: מגדירים את מצב זיהוי הסכימה של המחיצה ל-
STRINGS. - אני רוצה לספק משלי: מגדירים את מצב הזיהוי של סכימת המחיצה ל-
CUSTOMומזינים באופן ידני את פרטי הסכימה של מפתחות המחיצה. מידע נוסף מופיע במאמר בנושא הגדרת סכימת מפתח מחיצה בהתאמה אישית.
- הסקת סוגים באופן אוטומטי: הגדרת מצב הזיהוי של סכימת החלוקה למחיצות לערך
- אופציונלי: כדי לדרוש מסנן מחיצה בכל השאילתות של הטבלה הזו, מסמנים את תיבת הסימון דרישת מסנן מחיצה. הוספת מסנן מחיצות יכולה להפחית את העלות ולשפר את הביצועים. מידע נוסף מופיע במאמר בנושא הוספת מסנני פרדיקט למפתחות של מחיצות בשאילתות.
- בקטע יעד, מציינים את הפרטים הבאים:
- בקטע Project (פרויקט), בוחרים את הפרויקט שבו רוצים ליצור את הטבלה.
- בקטע Dataset (מערך נתונים), בוחרים את מערך הנתונים שבו רוצים ליצור את הטבלה.
- בשדה Table (טבלה), מזינים את שם הטבלה שרוצים ליצור.
- בשדה Table type (סוג הטבלה), בוחרים באפשרות External table (טבלה חיצונית).
- בקטע Schema (סכימה), מזינים את הגדרת הסכימה.
- כדי להפעיל את הזיהוי האוטומטי של סכימה, בוחרים באפשרות זיהוי אוטומטי.
- כדי להתעלם משורות עם ערכי עמודות נוספים שלא תואמים לסכימה, מרחיבים את הקטע אפשרויות מתקדמות ובוחרים באפשרות ערכים לא ידועים.
- לוחצים על יצירת טבלה.
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, בפורמט של wildcard -
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
בדוגמה הבאה נוצרת טבלה מחולקת למחיצות (Partitions) חיצונית. הוא משתמש בזיהוי אוטומטי של סכימה כדי לזהות את סכימת הקובץ ואת פריסת החלוקה למחיצות של 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, בפורמט של wildcard. -
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,.... כדי להשתמש בזיהוי אוטומטי של סכימה, משמיטים את הארגומנט הזה.
דוגמאות
בדוגמה הבאה נעשה שימוש במצב החלוקה למחיצות של Hive: AUTO
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
בדוגמה הבאה נעשה שימוש במצב החלוקה למחיצות של Hive: STRING
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
בדוגמה הבאה נעשה שימוש במצב החלוקה למחיצות של Hive: CUSTOM
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. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.
שאילתות על טבלאות חיצוניות
מידע נוסף זמין במאמר בנושא שאילתות על נתונים ב-Cloud Storage בטבלאות חיצוניות.
שדרוג טבלאות חיצוניות ל-BigLake
כדי לשדרג טבלאות שמבוססות על Cloud Storage לטבלאות BigLake, צריך לשייך את הטבלה החיצונית לחיבור. אם רוצים להשתמש בשמירת מטא-נתונים במטמון עם טבלת BigLake, אפשר לציין את ההגדרות לכך באותו הזמן. כדי לקבל פרטים על הטבלה, כמו פורמט המקור ו-URI המקור, אפשר לעיין במאמר בנושא קבלת פרטי טבלה.
כדי לעדכן טבלה חיצונית לטבלת BigLake, בוחרים באחת מהאפשרויות הבאות:
SQL
כדי לעדכן טבלה, משתמשים בCREATE OR REPLACE EXTERNAL TABLE הצהרת DDL:
במסוף Cloud de Confiance , עוברים לדף BigQuery.
מזינים את ההצהרה הבאה בעורך השאילתות:
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 ימים. לדוגמה, כדי לציין מרווח של 4 שעות, צריך להזין
INTERVAL 4 HOUR. אם הערך הזה מוגדר, פעולות שמתבצעות בטבלה משתמשות במטא נתונים ששמורים במטמון אם הם רעננו ב-4 השעות האחרונות. אם המטא-נתונים שבמטמון ישנים יותר, הפעולה מאחזרת מטא-נתונים מ-Cloud Storage במקום זאת. -
CACHE_MODE: מציין אם המטמון של המטא-נתונים מתרענן באופן אוטומטי או ידנימידע נוסף על שיקולים בנוגע לשמירה במטמון של מטא-נתונים זמין במאמר שמירה במטמון של מטא-נתונים לשיפור הביצועים.
מגדירים את הערך
AUTOMATICכדי שהמטמון של המטא-נתונים יתעדכן במרווח זמן שמוגדר על ידי המערכת, בדרך כלל בין 30 ל-60 דקות.מגדירים את הערך
MANUALאם רוצים לרענן את מטמון המטא-נתונים לפי לוח זמנים שקובעים. במקרה כזה, אפשר להתקשר אלBQ.REFRESH_EXTERNAL_METADATA_CACHEהליך המערכת כדי לרענן את המטמון.אם מגדירים את
STALENESS_INTERVALלערך גדול מ-0, צריך להגדיר גם אתCACHE_MODE.
-
לוחצים על הפעלה.
מידע נוסף על הרצת שאילתות זמין במאמר הרצת שאילתה אינטראקטיבית.
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גדול מ-0, צריך להגדיר אתSTALENESS_INTERVAL.
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. לדוגמה, כדי להגדיר את מרווח הרענון ל-4 שעות, מציינים0-0 0 4:0:0. אם הערך הזה מוגדר, פעולות שמתבצעות בטבלה משתמשות במטא נתונים שנשמרו במטמון אם הם רעננו ב-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://.
תמיכה בתווים כלליים לחיפוש ב-Cloud Storage URI
אם הנתונים שלכם מפוצלים לכמה קבצים, אתם יכולים להשתמש בתו כללי של כוכבית (*) כדי לבחור כמה קבצים. השימוש בתו הכללי לחיפוש כוכבית צריך לעמוד בכללים הבאים:
- הכוכבית יכולה להופיע בתוך שם האובייקט או בסוף שם האובייקט.
- אי אפשר להשתמש בכמה כוכביות. לדוגמה, הנתיב
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, יכול להיות שיהיה צורך להוסיף תו בריחה לכוכבית בפלטפורמות מסוימות.
אי אפשר להשתמש בתו כללי לחיפוש (כוכבית) כשיוצרים טבלאות חיצוניות שמקושרות לייצוא של Datastore או Firestore.
תמחור
החיובים הבאים על אחזור נתונים והעברת נתונים מ-Cloud Storage חלים על בקשות ל-BigQuery:
- עמלות האחזור עבור סוגי האחסון Nearline, Coldline ו-Archive מחויבות בהתאם למסמכי התמחור הקיימים ולמק"טים של אחזור.
- חיובים על העברת נתונים ברשת בין אזורים נגבים כשמשימת BigQuery במיקום אחד קוראת נתונים שמאוחסנים בקטגוריה של Cloud Storage במיקום אחר. החיובים האלה כלולים במק"טים הבאים:
- Cloud de Confiance by S3NS העברת נתונים מאחסון בין יבשת 1 ליבשת 2. לדוגמה, במאמר Cloud de Confiance by S3NS העברת נתונים מאחסון בין צפון אמריקה לאירופה מוסבר על העברת נתונים מ-
us-central1אלeurope-west1. - העברת נתונים ברשת Cloud de Confiance by S3NS בין אזורים באותה יבשת. לדוגמה, אפשר לראות את העברת נתונים ברשת Cloud de Confiance by S3NS בין אזורים בצפון אמריקה להעברת נתונים מ-
us-east4אלUS.
- Cloud de Confiance by S3NS העברת נתונים מאחסון בין יבשת 1 ליבשת 2. לדוגמה, במאמר Cloud de Confiance by S3NS העברת נתונים מאחסון בין צפון אמריקה לאירופה מוסבר על העברת נתונים מ-
מגבלות
מידע על מגבלות שחלות על טבלאות חיצוניות מופיע במאמר מגבלות של טבלאות חיצוניות.
המאמרים הבאים
- מידע נוסף על טבלאות חיצוניות
- מידע נוסף על טבלאות BigLake