שימוש בספריות Python בקוד פתוח
אתם יכולים לבחור מבין שלוש ספריות Python ב-BigQuery, בהתאם לתרחיש השימוש שלכם.
| תרחיש שימוש | גודל נתונים מקסימלי | תיאור | |
|---|---|---|---|
| bigquery-dataframes | עיבוד נתונים ותפעול ML מבוססי Python עם עיבוד בצד השרת | ניתן להרחבה למערכי נתונים של כמה טרה-בייט (העברת נתונים לצד השרת) | ממשקי API של Pandas ו-scikit-learn שהוטמעו באמצעות דחיפה לצד השרת. למידע נוסף, קראו את המאמר מבוא ל-BigQuery DataFrames. |
| pandas-gbq | עיבוד נתונים מבוסס Python באמצעות העתקת נתונים בצד הלקוח | מוגבל על ידי זיכרון הלקוח | מאפשר להעביר נתונים אל ומ-Python DataFrames בצד הלקוח. מידע נוסף זמין במסמכי התיעוד ובקוד המקור. |
| google-cloud-bigquery | פריסה, ניהול ושאילתות מבוססות SQL ב-BigQuery | מוגבל על ידי זיכרון הלקוח | חבילת Python שעוטפת את כל ממשקי BigQuery API. מידע נוסף זמין במסמכי התיעוד ובקוד המקור. |
שימוש ב-BigQuery DataFrames, ב-pandas-gbq וב-google-cloud-bigquery
ספריית BigQuery DataFrames (bigframes) מספקת DataFrame ו-ML API בסגנון Python עם עיבוד שאילתות בצד השרת. ספריית pandas-gbq מספקת ממשק פשוט להרצת שאילתות ולהעלאת מסגרות נתונים של pandas ל-BigQuery. הוא עוטף את ספריית הלקוח של 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
טעינת pandas DataFrame לטבלה ב-BigQuery
כל שלוש הספריות תומכות בהעלאת נתונים מ-pandas DataFrame לטבלה חדשה ב-BigQuery. ההבדלים העיקריים כוללים:
| bigquery-dataframes | pandas-gbq | google-cloud-bigquery | |
|---|---|---|---|
| סוג התמיכה | הפונקציה ממירה את pandas DataFrame המקומי ל-bigframes.pandas.DataFrame באמצעות read_pandas (באמצעות Parquet או CSV מתחת לפני השטח), עם תמיכה בערכים מקוננים ובערכי מערך. אחר כך שומרים אותו בטבלה עם to_gbq. |
הפונקציה ממירה את DataFrame לפורמט CSV לפני השליחה ל-API, שלא תומך בערכים מקוננים או בערכי מערך. | הפונקציה ממירה את DataFrame לפורמט Parquet או CSV לפני השליחה ל-API, שתומך בערכים מקוננים ובערכי מערך. בוחרים ב-Parquet לערכי struct ומערך, וב-CSV לערכי תאריך ושעה כדי לקבל גמישות בסריאליזציה. Parquet היא ברירת המחדל. שימו לב שצריך להתקין את pyarrow, מנוע ה-parquet שמשמש לשליחת נתוני ה-DataFrame אל BigQuery API, כדי לטעון את ה-DataFrame לטבלה. |
| טעינת הגדרות | משתמשים בפרמטר if_exists ('fail', 'replace' או 'append') כששומרים עם to_gbq. |
אפשר גם לציין סכימת טבלה. | משתמשים במחלקה LoadJobConfig, שמכילה מאפיינים לאפשרויות השונות של הגדרת ה-API. |
bigquery-dataframes
pandas-gbq
google-cloud-bigquery
google-cloud-bigquery דורשת את הספרייה pyarrow כדי לבצע סריאליזציה של pandas DataFrame לקובץ Parquet.
מתקינים את חבילת pyarrow:
pip install pyarrow
תכונות שלא נתמכות על ידי pandas-gbq ו-bigquery-dataframes
ספריות pandas-gbq ו-bigquery-dataframes מספקות ממשקים שימושיים לשליחת שאילתות לגבי נתונים ולכתיבת נתונים לטבלאות, אבל הן לא כוללות הרבה מהתכונות של BigQuery API, כולל, בין היתר:
- ניהול מערכי נתונים, כולל יצירת מערכי נתונים חדשים, עדכון מאפיינים של מערכי נתונים ומחיקת מערכי נתונים
- טעינת נתונים לתוך BigQuery מפורמטים אחרים מלבד pandas DataFrames או מ-pandas DataFrames עם עמודות 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)