שאילתות לגבי נתונים ב-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. Google Cloudאפליקציות שפועלות במכונה הווירטואלית משתמשות בחשבון השירות כדי לקרוא ל- Google Cloud 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. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
Java
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי Javaהוראות ההגדרה שבמדריך למתחילים של BigQuery באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של BigQuery Java API.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
פתרון בעיות
מחרוזת שגיאה: Resources exceeded during query execution: Google Sheets service
overloaded.
יכול להיות שמדובר בשגיאה זמנית שאפשר לפתור אותה על ידי הפעלה מחדש של השאילתה. אם השגיאה נמשכת אחרי הפעלה חוזרת של השאילתה, כדאי לפשט את הגיליון האלקטרוני, למשל על ידי שימוש מינימלי בנוסחאות. מידע נוסף זמין במאמר בנושא מגבלות על טבלאות חיצוניות.