שימוש בספריות Python בקוד פתוח
אתם יכולים להשתמש בספריות Python בקוד פתוח ב-BigQuery כדי לעבד נתונים, ליצור מודלים של למידת מכונה (ML) ולנהל את המשאבים בענן באמצעות קוד מוכר. בחירת הספרייה המתאימה לעומס העבודה יכולה לעזור לכם להרחיב ביעילות את הפעילות, מסקריפטים בצד הלקוח ועד לעיבוד של טרה-בייטים של נתונים באמצעות המנוע של BigQuery בצד השרת.
| ספרייה | תרחיש לדוגמה | גודל נתונים מקסימלי | תיאור |
|---|---|---|---|
bigquery-dataframes |
עיבוד נתונים ופעולות למידת מכונה (ML) מבוססות-Python עם עיבוד בצד השרת | אפשרות להרחבה למערכי נתונים של כמה טרה-בייטים (דחיפה בצד השרת) | ממשקי API של Pandas ו-scikit-learn שמוטמעים עם דחיפה בצד השרת. מידע נוסף זמין במאמר מבוא ל-BigQuery DataFrames. |
pandas-gbq |
עיבוד נתונים מבוסס-Python באמצעות העתקת נתונים בצד הלקוח | מוגבל על ידי הזיכרון של הלקוח | מאפשר להעביר נתונים אל Pandas DataFrames ב-Python וממנו בצד הלקוח. מידע נוסף זמין במסמכי התיעוד ובקוד המקור. |
google-cloud-bigquery |
פריסה, ניהול ושאילתות מבוססות-SQL ב-BigQuery | מוגבל על ידי הזיכרון של הלקוח | חבילת Python שעוטפת את כל ממשקי ה-API של BigQuery. מידע נוסף זמין במסמכי התיעוד ובקוד המקור. |
שימוש ב-BigQuery DataFrames, ב-pandas-gbq וב-google-cloud-bigquery
ספריית BigQuery DataFrames (bigframes) מספקת DataFrame ו-ML API של Python עם עיבוד שאילתות בצד השרת. הספרייה pandas-gbq מספקת ממשק להרצת שאילתות ולהעלאת DataFrame של pandas ל-BigQuery. זהו wrapper דק סביב ספריית הלקוח של BigQuery, google-cloud-bigquery.
התקנת הספריות
כדי להשתמש בדוגמאות הקוד שבמדריך הזה, צריך להתקין את החבילות bigframes, pandas-gbq ו-google-cloud-bigquery:
pip install --upgrade bigframes pandas-gbq 'google-cloud-bigquery[bqstorage,pandas]'
הרצת שאילתות
כל שלוש הספריות תומכות בשאילתות על נתונים שמאוחסנים ב-BigQuery. ההבדלים העיקריים בין הספריות כוללים:
| bigquery-dataframes | pandas-gbq | google-cloud-bigquery | |
|---|---|---|---|
| תחביר SQL שמשמש כברירת מחדל | GoogleSQL | GoogleSQL (ניתן להגדרה באמצעות pandas_gbq.context.dialect) |
GoogleSQL |
| הגדרות השאילתה | אפשר להגדיר באמצעות הפרמטרים bpd.options.bigquery או read_gbq |
נשלח כמילון בפורמט של בקשת שאילתה. | משתמשים במחלקה QueryJobConfig, שמכילה מאפיינים לאפשרויות השונות של הגדרת ה-API. |
שליחת שאילתות לגבי נתונים באמצעות תחביר GoogleSQL
בדוגמה הבאה מוסבר איך להריץ שאילתת GoogleSQL עם ובלי לציין פרויקט באופן מפורש. אם לא מציינים פרויקט, בכל שלוש הספריות הפרויקט ייקבע לפי פרטי הכניסה שמוגדרים כברירת מחדל.
bigquery-dataframes
pandas-gbq
google-cloud-bigquery
הרצת שאילתות על נתונים באמצעות תחביר SQL מדור קודם
בדוגמה הבאה אפשר לראות איך מריצים שאילתה באמצעות תחביר SQL מדור קודם. במדריך להעברת נתונים (מיגרציה) של GoogleSQL מוסבר איך לעדכן את השאילתות ל-GoogleSQL.
bigquery-dataframes
ב-BigQuery DataFrames אין תמיכה בתחביר SQL מדור קודם. במקום זאת, צריך להשתמש בתחביר GoogleSQL.
pandas-gbq
google-cloud-bigquery
שימוש ב-BigQuery Storage API להורדת תוצאות גדולות
אתם יכולים להשתמש ב-BigQuery Storage API כדי להאיץ את ההורדות של תוצאות גדולות פי 15 עד 31.
bigquery-dataframes
pandas-gbq
google-cloud-bigquery
הרצת שאילתה עם הגדרות אישיות
כדי לבצע פעולות מורכבות מסוימות, כמו הפעלת שאילתה עם פרמטרים או ציון טבלת יעד לאחסון תוצאות השאילתה, צריך לשלוח הגדרה עם בקשת BigQuery API. ב-bigquery-dataframes (read_gbq) וב-pandas-gbq, צריך לשלוח את ההגדרות כמילון בפורמט של בקשת שאילתה.
ב-google-cloud-bigquery, יש מחלקות של הגדרות משימות, כמו QueryJobConfig, שמכילות את המאפיינים שנדרשים כדי להגדיר משימות מורכבות.
בדוגמה הבאה אפשר לראות איך מריצים שאילתה עם פרמטרים בעלי שם.
bigquery-dataframes
pandas-gbq
google-cloud-bigquery
טעינת DataFrame של pandas לטבלה ב-BigQuery
כל שלוש הספריות תומכות בהעלאת נתונים מ-DataFrame של pandas לטבלה חדשה ב-BigQuery. ההבדלים העיקריים כוללים:
| bigquery-dataframes | pandas-gbq | google-cloud-bigquery | |
|---|---|---|---|
| תמיכה בסוגים שונים של נתונים | ממיר את ה-DataFrame באמצעות read_pandas וכותב אותו לטבלה באמצעות to_gbq. |
הפונקציה ממירה את ה-DataFrame לפורמט CSV לפני השליחה ל-API, שלא תומך בערכים בתצוגת עץ או בערכי מערך. | המרת ה-DataFrame לפורמט Parquet או CSV לפני השליחה ל-API, שתומך בערכים בתצוגת עץ ובמערכים. בחרו ב-Parquet לערכי מבנה ומערך, וב-CSV לגמישות בסריאליזציה של תאריך ושעה. Parquet היא אפשרות ברירת המחדל. שימו לב שצריך להתקין את pyarrow, מנוע ה-parquet שמשמש לשליחת נתוני DataFrame ל-BigQuery API, כדי לטעון את DataFrame לטבלה. |
| טעינת ההגדרות האישיות | מגדירים את ההתנהגות באמצעות פרמטרים של to_gbq, כמו if_exists. |
אפשר גם לציין סכימת טבלה. | משתמשים במחלקה LoadJobConfig, שמכילה מאפיינים לאפשרויות השונות של הגדרת ה-API. |
bigquery-dataframes
pandas-gbq
google-cloud-bigquery
google-cloud-bigquery דורשת את הספרייה pyarrow כדי להעביר DataFrame של pandas לקובץ Parquet.
מתקינים את החבילה pyarrow:
pip install pyarrow
תכונות שלא נתמכות על ידי pandas-gbq ו-bigquery-dataframes
הספריות pandas-gbq ו-bigquery-dataframes מספקות ממשקים שימושיים לשליחת שאילתות על נתונים ולכתיבת נתונים בטבלאות, אבל הן לא כוללות הרבה מהתכונות של BigQuery API, כולל, בין היתר:
- ניהול מערכי נתונים, כולל יצירת מערכי נתונים חדשים, עדכון מאפיינים של מערכי נתונים ומחיקת מערכי נתונים
- טעינת נתונים ל-BigQuery מפורמטים שהם לא DataFrame של pandas, או מ-DataFrame של pandas עם עמודות JSON
- ניהול טבלאות, כולל הצגת טבלאות במערך נתונים, העתקת נתוני טבלאות ומחיקת טבלאות
- ייצוא נתונים מ-BigQuery ישירות ל-Cloud Storage
פתרון בעיות שקשורות לשגיאות במאגר החיבורים
מחרוזת השגיאה: Connection pool is full, discarding connection: bigquery.googleapis.com.
Connection pool size: 10
אם אתם משתמשים באובייקט ברירת המחדל של לקוח BigQuery ב-Python, אתם מוגבלים ל-10 שרשורים לכל היותר, כי גודל ברירת המחדל של המאגר ל-Python HTTPAdapter הוא 10. כדי להשתמש ביותר מ-10 חיבורים, צריך ליצור אובייקט requests.adapters.HTTPAdapter בהתאמה אישית. לדוגמה:
client = bigquery.Client() adapter = requests.adapters.HTTPAdapter(pool_connections=128, pool_maxsize=128,max_retries=3) client._http.mount("https://",adapter) client._http._auth_request.session.mount("https://",adapter) query_job = client.query(QUERY)