שאילתות של טבלאות חיצוניות ב-Drive
במאמר הזה מוסבר איך לשלוח שאילתות לנתונים שמאוחסנים בטבלה חיצונית ב-Google Drive.
BigQuery תומך בשאילתות שמופעלות על קבצים ב-Drive לשימוש אישי ועל קבצים משותפים. מידע נוסף על Drive זמין במאמר Google Drive: הדרכה ועזרה.
אפשר ליצור שאילתות לנתוני Drive מתוך טבלה חיצונית קבועה או מתוך טבלה חיצונית זמנית שנוצרת כשמריצים את השאילתה.
מגבלות
מידע על מגבלות שקשורות לטבלאות חיצוניות מופיע במאמר בנושא מגבלות של טבלאות חיצוניות.
התפקידים הנדרשים
כדי לשלוח שאילתות לטבלאות חיצוניות ב-Drive, צריך לוודא שיש לכם את התפקידים הבאים:
- צפייה בנתוני BigQuery (
roles/bigquery.dataViewer) - משתמש BigQuery (
roles/bigquery.user)
בהתאם להרשאות שלכם, אתם יכולים להקצות לעצמכם את התפקידים האלה או לבקש מהאדמין להקצות אותם לכם. מידע נוסף על הקצאת תפקידים זמין במאמר איך בודקים אילו תפקידים אפשר לתת במשאבים.
כדי לראות את ההרשאות הנדרשות ב-BigQuery לשאילתות של טבלאות חיצוניות, מרחיבים את הקטע ההרשאות הנדרשות:
ההרשאות הנדרשות
bigquery.jobs.createbigquery.readsessions.create(נדרש רק אם קוראים נתונים באמצעות BigQuery Storage Read API)bigquery.tables.getbigquery.tables.getData
יכול להיות שתוכלו לקבל את ההרשאות האלה גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש אחרים.
הרשאות ב-Drive
כדי לשלוח שאילתות לנתונים חיצוניים ב-Drive, צריך לקבל לפחות הרשאת View לקובץ Drive שמקושר לטבלה החיצונית.
היקפים למכונות Compute Engine
כשיוצרים מכונה של Compute Engine, אפשר לציין רשימה של היקפי הרשאות למכונה. ההיקפים קובעים את הגישה של המופע למוצרים, כולל Drive. Cloud de Confiance by S3NSאפליקציות שפועלות במכונה הווירטואלית משתמשות בחשבון השירות כדי לשלוח קריאות ל- Cloud de Confiance by S3NS API.
אם מגדירים מכונה של Compute Engine לפעול כחשבון שירות, וחשבון השירות הזה ניגש לטבלה חיצונית שמקושרת למקור נתונים ב-Drive, צריך להוסיף למכונה את היקף ההרשאות של OAuth ל-Drive (https://www.googleapis.com/auth/drive.readonly).
מידע על החלת היקפי הרשאות על מכונה של Compute Engine זמין במאמר שינוי חשבון השירות והיקפי הגישה של מכונה. מידע נוסף על חשבונות שירות ב-Compute Engine זמין במאמר בנושא חשבונות שירות.
שליחת שאילתות לנתוני Drive באמצעות טבלאות חיצוניות קבועות
אחרי שיוצרים טבלה חיצונית ב-Drive, אפשר להריץ עליה שאילתות באמצעות תחביר GoogleSQL, בדיוק כמו בטבלה רגילה ב-BigQuery. לדוגמה, SELECT field1, field2
FROM mydataset.my_drive_table;.
הרצת שאילתות על נתונים ב-Drive באמצעות טבלאות זמניות
שאילתות של מקור נתונים חיצוני באמצעות טבלה זמנית שימושיות לשאילתות חד-פעמיות אד-הוק על נתונים חיצוניים, או לתהליכי חילוץ, טרנספורמציה וטעינה (ETL).
כדי לשלוח שאילתה למקור נתונים חיצוני בלי ליצור טבלה קבועה, צריך לספק הגדרת טבלה לטבלה הזמנית, ואז להשתמש בהגדרת הטבלה הזו בפקודה או בקריאה כדי לשלוח שאילתה לטבלה הזמנית. אפשר לספק את הגדרת הטבלה באחת מהדרכים הבאות:
- קובץ הגדרת טבלה
- הגדרת סכימה מוטבעת
- קובץ סכימת JSON
קובץ הגדרת הטבלה או הסכימה שסופקה משמשים ליצירת הטבלה החיצונית הזמנית, והשאילתה מופעלת מול הטבלה החיצונית הזמנית.
כשמשתמשים בטבלה חיצונית זמנית, לא יוצרים טבלה באחד ממערכי הנתונים של BigQuery. אי אפשר לשתף את הטבלה עם אחרים כי היא לא נשמרת לצמיתות במערך נתונים.
יצירה של טבלאות זמניות והרצת שאילתות עליהן
אפשר ליצור טבלה זמנית שמקושרת למקור נתונים חיצוני ולבצע עליה שאילתות באמצעות כלי שורת הפקודה של BigQuery, ה-API או ספריות הלקוח.
BQ
כדי ליצור שאילתה בטבלה זמנית שמקושרת למקור נתונים חיצוני, משתמשים בפקודה bq query עם הדגל --external_table_definition. כשמשתמשים בכלי שורת הפקודה של BigQuery כדי לשלוח שאילתה על טבלה זמנית שמקושרת למקור נתונים חיצוני, אפשר לזהות את הסכימה של הטבלה באמצעות:
- קובץ הגדרת טבלה (מאוחסן במחשב המקומי)
- הגדרת סכימה מוטבעת
- קובץ סכימת JSON (מאוחסן במחשב המקומי)
כדי להריץ שאילתה בטבלה זמנית שמקושרת למקור נתונים חיצוני באמצעות קובץ הגדרת טבלה, מזינים את הפקודה הבאה.
bq --location=LOCATION query \ --external_table_definition=TABLE::DEFINITION_FILE \ 'QUERY'
כאשר:
- המיקום שלכם הוא
LOCATION. הדגל--locationהוא אופציונלי. -
TABLEהוא השם של הטבלה הזמנית שאתם יוצרים. -
DEFINITION_FILEהוא הנתיב אל קובץ הגדרת הטבלה במחשב המקומי. -
QUERYהיא השאילתה שאתם שולחים לטבלה הזמנית.
לדוגמה, הפקודה הבאה יוצרת שאילתה על טבלה זמנית בשם sales באמצעות קובץ הגדרת טבלה בשם sales_def.
bq query \
--external_table_definition=sales::sales_def \
'SELECT
Region,Total_sales
FROM
sales'
כדי ליצור שאילתה בטבלה זמנית שמקושרת למקור הנתונים החיצוני באמצעות הגדרת סכימה מוטבעת, מזינים את הפקודה הבאה.
bq --location=LOCATION query \ --external_table_definition=TABLE::SCHEMA@SOURCE_FORMAT=DRIVE_URI \ 'QUERY'
כאשר:
- המיקום שלכם הוא
LOCATION. הדגל--locationהוא אופציונלי. -
TABLEהוא השם של הטבלה הזמנית שאתם יוצרים. -
SCHEMAהיא הגדרת הסכימה המוטבעת בפורמטFIELD:DATA_TYPE,FIELD:DATA_TYPE. -
SOURCE_FORMATהואCSV,NEWLINE_DELIMITED_JSON,AVROאוGOOGLE_SHEETS. -
DRIVE_URIהוא ה-URI של Drive. -
QUERYהיא השאילתה שאתם שולחים לטבלה הזמנית.
לדוגמה, הפקודה הבאה יוצרת שאילתה בטבלה זמנית בשם sales שמקושרת לקובץ CSV שמאוחסן ב-Drive עם הגדרת הסכימה הבאה: Region:STRING,Quarter:STRING,Total_sales:INTEGER.
bq --location=US query \
--external_table_definition=sales::Region:STRING,Quarter:STRING,Total_sales:INTEGER@CSV=https://drive.google.com/open?id=1234_AbCD12abCd \
'SELECT
Region,Total_sales
FROM
sales'
כדי להריץ שאילתה בטבלה זמנית שמקושרת למקור נתונים חיצוני באמצעות קובץ סכימה של JSON, מזינים את הפקודה הבאה.
bq --location=LOCATION query \ --external_table_definition=SCHEMA_FILE@SOURCE_FORMT=DRIVE_URI \ 'QUERY'
כאשר:
- המיקום שלכם הוא
LOCATION. הדגל--locationהוא אופציונלי. -
SCHEMA_FILEהוא הנתיב לקובץ סכימת JSON במחשב המקומי. -
SOURCE_FILEהואCSV,NEWLINE_DELIMITED_JSON,AVROאוGOOGLE_SHEETS. -
DRIVE_URIהוא ה-URI של Drive. -
QUERYהיא השאילתה שאתם שולחים לטבלה הזמנית.
לדוגמה, הפקודה הבאה יוצרת טבלה זמנית בשם sales שמקושרת לקובץ CSV שמאוחסן ב-Drive באמצעות קובץ הסכימה /tmp/sales_schema.json, ומבצעת שאילתה בטבלה הזו.
bq query \
--external_table_definition=sales::/tmp/sales_schema.json@CSV=https://drive.google.com/open?id=1234_AbCD12abCd \
'SELECT
Total_sales
FROM
sales'
API
יוצרים הגדרה של עבודת שאילתה. במאמר שאילתות על נתונים יש מידע על שיחות ל
jobs.queryועלjobs.insert.מציינים את מקור הנתונים החיצוני על ידי יצירת
ExternalDataConfiguration.
Python
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי Pythonהוראות ההגדרה שבמדריך למתחילים של BigQuery באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של BigQuery Python 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.
פתרון בעיות
מחרוזת שגיאה: Resources exceeded during query execution: Google Sheets service
overloaded.
יכול להיות שמדובר בשגיאה זמנית שאפשר לפתור אותה על ידי הפעלה מחדש של השאילתה. אם השגיאה נמשכת אחרי הפעלה חוזרת של השאילתה, כדאי לפשט את הגיליון האלקטרוני, למשל לצמצם את השימוש בנוסחאות. מידע נוסף זמין במאמר בנושא מגבלות על טבלאות חיצוניות.
מחרוזת שגיאה: Access Denied: BigQuery BigQuery: Permission denied while getting
Drive credentials
כדי לפתור את השגיאה הזו, מבצעים את השלבים הבאים:
- מוודאים שיש לכם גישת צפייה לקובץ ב-Drive שמקושר לטבלה החיצונית.
- אם הגרסה של כלי שורת הפקודה של BigQuery היא
2.1.12או גרסה ישנה יותר, משתמשים בדגל--enable-gdrive-access. - מוודאים שאתם או חשבון השירות שמריץ את השאילתה קיבלתם את התפקידים הנדרשים להפעלת שאילתות בטבלאות חיצוניות של Google Drive.