מבוא לתרחישים
במאמר הזה מוסבר איך לבחור שגרה, שהיא סוג של משאב שמשמש ליצירת פונקציות או פרוצדורות מאוחסנות ב-BigQuery.
שגרות נתמכות
BigQuery תומך בשגרות הבאות:
- פונקציות בהגדרת המשתמש (UDF)
- פונקציות צבירה בהגדרת המשתמש (UDAFs)
- פונקציות של טבלה
- פונקציות מרחוק
- תהליכים מאוחסנים
איך בוחרים תרחיש
בקטע הזה מתוארים גורמים שכדאי לקחת בחשבון כשבוחרים שגרה, ומוצגות השוואות בין שגרות לפי משימות.
גורמים שכדאי לקחת בחשבון
כדי לבחור תרחיש, כדאי לקחת בחשבון את הגורמים הבאים, שמתוארים בקטעים של כל סוג תרחיש:
- סוג המשימה להטמעה.
- שפת התכנות שבה רוצים להשתמש.
- סוג ההתמדה שרוצים להטמיע בשגרה: זמנית או קבועה.
- סוג השימוש החוזר שנדרש לשגרה: בשאילתה אחת או בכמה שאילתות.
- שיקולי ביצועים.
- גישה לשירותים חיצוניים.
- שיתוף השגרה עם משתמשים.
השוואה בין שגרות לפי משימה
בטבלה הבאה מוצגים סוגי המשימות שאפשר לבצע בכל סוג של שגרה:
משימה |
סוג משאב שגרתי |
|---|---|
יצירת פונקציות שמבצעות משימות למטרות כלליות ב-BigQuery. |
פונקציה מוגדרת על ידי המשתמש (UDF) ב-SQL או ב-JavaScript פונקציית UDAF ב-SQL או ב-JavaScript |
ליצור פונקציות שמבצעות משימות למטרות כלליות ב-BigQuery ושמתקשרות עם מערכות חיצוניות של Google Cloud באמצעות חיבור למשאב Cloud. |
פונקציית UDF ב-Python |
ליצור פונקציות שמצברות נתונים. |
UDAFs |
ליצור טבלה באמצעות פרמטרים. |
פונקציות טבלה |
ליצור פונקציות שמשתמשות בשפות, בספריות או בשירותים שלא נתמכים ב-BigQuery. הפונקציות האלה משולבות ישירות עם פונקציות Cloud Run ועם Cloud Run. |
פונקציות מרחוק |
אפשר להריץ כמה הצהרות בשאילתה אחת בתור שאילתה עם כמה הצהרות באמצעות שפה פרוצדורלית. אפשר להשתמש בשאילתה עם כמה הצהרות כדי:
יצירה והפעלה של תהליכים מאוחסנים ב-Apache Spark ב-BigQuery. |
תהליכים מאוחסנים |
פונקציות בהגדרת המשתמש (UDF)
פונקציה בהגדרת המשתמש (UDF) מאפשרת ליצור פונקציה באמצעות ביטוי SQL, קוד JavaScript או קוד Python. פונקציות UDF מקבלות עמודות קלט, מבצעות פעולות בקלט ומחזירות את התוצאה של פעולות אלה בתור ערך.
אפשר להגדיר שפונקציות UDF יהיו מתמידות או זמניות. אפשר להשתמש שוב בפונקציות UDF מתמידות בכמה שאילתות, ופונקציית UDF זמנית קיימת רק בהיקף של שאילתה אחת.
אפשר ליצור פונקציות UDF לשימוש בשגרות מיסוך בהתאמה אישית, שמחזירות את הערך של עמודה אחרי החלת פונקציית UDF על העמודה. אחרי שיוצרים את שגרת המסיכה המותאמת אישית, היא זמינה ככלל מיסוך ביצירת מדיניות נתונים.
מידע נוסף על פונקציות UDF זמין במקורות המידע הבאים:
פונקציות UDF שמבוססות על שפה
- פונקציות UDF מבוססות-SQL תומכות בפרמטרים של פונקציות UDF מבוססות-תבנית, שיכולים להתאים ליותר מסוג אחד של ארגומנטים כשמפעילים את הפונקציה. פונקציות UDF ב-SQL יכולות גם להחזיר את הערך של שאילתת משנה סקלרית.
- פונקציות בהגדרת המשתמש (UDF) שמבוססות על JavaScript מאפשרות לקרוא לקוד שנכתב ב-JavaScript מתוך שאילתת SQL.
- פונקציות UDF ב-JavaScript צורכות בדרך כלל יותר משאבי משבצות בהשוואה לשאילתות SQL סטנדרטיות, ולכן הן פוגעות בביצועי העבודה.
- אם אפשר לבטא את הפונקציה ב-SQL, לרוב עדיף להריץ את הקוד כמשימת שאילתת SQL סטנדרטי.
- פונקציות UDF מבוססות Python נוצרות ומופעלות במשאבים מנוהלים של BigQuery. הפונקציות האלה מאפשרות לכם להטמיע פונקציה ב-Python ולהשתמש בה בשאילתת SQL.
- אתם יכולים לגשת לשירות Google Cloud או לשירות חיצוני מפונקציית UDF של Python באמצעות חשבון השירות של Cloud resource connection.
- אפשר גם להתקין ספריות של צד שלישי מאינדקס החבילות של Python (PyPI).
פונקציות UDF שנוספו על ידי הקהילה
בנוסף ל-UDF שאתם יוצרים, יש UDF שנוצרו על ידי הקהילה בbigquery-public-data.persistent_udfs מערך הנתונים הציבורי ובמאגר הקוד הפתוח bigquery-utils ב-GitHub.
פונקציות צבירה בהגדרת המשתמש (UDAFs)
פונקציית UDAF מאפשרת ליצור פונקציית צבירה באמצעות ביטוי שמכיל קוד SQL או JavaScript. פונקציית UDAF מקבלת עמודות קלט, מבצעת חישוב על קבוצת שורות בכל פעם ואז מחזירה את תוצאת החישוב כערך יחיד.
פונקציות UDAFs לא יכולות לשנות נתונים, לתקשר עם מערכות חיצוניות או לשלוח יומנים ל-Google Cloud Observability או לאפליקציות דומות.
מידע נוסף זמין במקורות המידע הבאים:
פונקציות UDAFs של SQL
בדרך כלל, פונקציות מצטברות בהגדרת המשתמש (UDAF) ב-SQL צוברות פרמטרים של פונקציות בכל השורות בקבוצה.
עם זאת, אפשר לציין פרמטר של פונקציה כפרמטר שאינו מצטבר באמצעות מילת המפתח NOT AGGREGATE. פרמטר של פונקציה לא מצטברת הוא פרמטר של פונקציה סקלרית עם ערך קבוע לכל השורות בקבוצה. פונקציות UDAFs של SQL יכולות להכיל פרמטרים מצטברים ופרמטרים לא מצטברים.
פונקציות מוגדרות על ידי משתמש (UDAFs) ב-JavaScript
פונקציות UDAFs של JavaScript יכולות לכלול ספריות JavaScript. גוף הפונקציה של JavaScript יכול לכלול קוד JavaScript מותאם אישית, כמו משתנים גלובליים של JavaScript ופונקציות מותאמות אישית.
פונקציות שמבוססות על Javascript בדרך כלל צורכות יותר משאבים, ולכן מומלץ לעיין בטיפים האלה לשיפור הביצועים.
יש כמה מגבלות על פונקציות UDAF ב-JavaScript. מותרות רק קידודים מסוג מסוים, ויש דרישות לסריאליזציה ולדה-סריאליזציה.
השוואה בין פונקציות UDF לבין פונקציות UDAF
ההחלטה אם לבחור ב-UDF או ב-UDAF תלויה במשימה הספציפית שאתם מנסים לבצע.
- כדי לבצע חישוב או טרנספורמציה על ערכי נתונים בודדים, משתמשים ב-UDF.
- כדי לעשות את אותו הדבר על קבוצות של ערכי נתונים, משתמשים בפונקציית UDAF.
לדוגמה, אם רוצים לחשב את הממוצע של עמודת מספרים, צריך להשתמש ב-UDAF. אם רוצים להמיר עמודה של מחרוזות לאותיות רישיות, צריך להשתמש בפונקציה מוגדרת על ידי המשתמש.
יש כמה נקודות דמיון בין UDF ל-UDAF:
- פונקציות UDF ו-UDAF לא יכולות לשנות נתונים, לתקשר עם מערכות חיצוניות או לשלוח יומנים ל-Google Cloud Observability או לאפליקציות דומות. החריג הוא פונקציות מוגדרות על ידי המשתמש (UDF) ב-Python, שיכולות לגשת לשירותים חיצוניים באמצעות חיבור למשאב בענן. עם זאת, פונקציות UDF ב-Python לא תומכות ב-VPC Service Controls או ב-Customer-managed encryption keys (מפתחות הצפנה בניהול הלקוח, CMEK).
- ל-UDAF יש את אותן מגבלות כמו ל-UDF, ועוד כמה מגבלות.
- ל-UDF ול-UDAF יש את אותן מכסות ומגבלות.
יש הבדלים בין UDF לבין UDAF:
מאפיין |
UDFs |
UDAFs |
|---|---|---|
הגדרה |
פונקציות מוגדרות על ידי המשתמש (UDF) מקבלות עמודות קלט, מבצעות פעולות בקלט ומחזירות את התוצאה של הפעולות האלה בתור ערך. |
פונקציות צבירה מוגדרות על ידי המשתמש (UDAFs) מקבלות עמודות של קלט, מבצעות חישוב על קבוצה של שורות בכל פעם, ואז מחזירות את התוצאה של החישוב הזה כערך יחיד. |
שפות נתמכות |
SQL, JavaScript ו-Python |
SQL ו-JavaScript |
התמדה |
|
|
ארגומנטים וסוגי נתונים |
פונקציות UDF מקבלות ערכי פרמטרים שתואמים ל-GoogleSQL עבור סוגי נתונים ב-BigQuery. חלק מסוגי ה-SQL ממופים ישירות לסוגי JavaScript, אבל אחרים לא. סוגים נתמכים של JavaScript ב-UDF של SQL, ערכי הפרמטרים יכולים להיות רק לפונקציות מוגדרות על ידי המשתמש (UDF) ב-JavaScript יש מפרט דטרמיניזם שמספק ל-BigQuery רמז לגבי האפשרות לשמור את תוצאת השאילתה במטמון. |
פונקציות UDAF ב-SQL וב-JavaScript מקבלות ערכי פרמטרים שתואמים לסוגי הנתונים של GoogleSQL ל-BigQuery. פרמטרים של פונקציה יכולים להיות פרמטרים מצטברים או לא מצטברים. |
Usage |
פונקציות UDF משמשות בדרך כלל לטיוב נתונים, לטרנספורמציה ולאימות. |
פונקציות UDAF משמשות בדרך כלל לחישוב נתונים סטטיסטיים מסכמים, כמו ממוצעים, סכומים ומספרים. |
פונקציות טבלה
פונקציית טבלה, שנקראת גם פונקציה להחזרת טבלה (TVF), היא פונקציית UDF שמחזירה טבלה. אפשר להשתמש בפונקציית טבלה בכל מקום שבו אפשר להשתמש בטבלה. פונקציות של טבלאות מתנהגות באופן דומה לתצוגות, אבל פונקציה של טבלה יכולה לקבל פרמטרים.
אפשר לבצע את הפעולות הבאות באמצעות פונקציות של טבלאות:
- העברה של כמה פרמטרים.
- אפשר לקרוא לפונקציית טבלה בכל הקשר שבו טבלה היא תקפה.
- איחוד הפלט מפונקציית טבלה עם טבלה אחרת.
- שימוש בפונקציית טבלה בשאילתת משנה.
מידע נוסף על פונקציות של טבלאות זמין במאמרים פונקציות של טבלאות, מגבלות ומכסות ומגבלות.
פונקציות מרחוק
פונקציות מרוחקות מאפשרות לכם להטמיע את הפונקציה בשפות אחרות מלבד SQL ו-JavaScript, או להשתמש בספריות או בשירותים שלא נתמכים בפונקציות UDF ב-BigQuery.
פונקציה מרוחקת של BigQuery משלבת את פונקציית Google SQL עם פונקציות Cloud Run ועם Cloud Run באמצעות כל שפה נתמכת, ואז מפעילה את הפונקציות האלה משאילתות Google SQL.
דוגמאות למשימות שאפשר לבצע באמצעות פונקציות מרוחקות:
כדי ליצור פונקציה מרחוק:
- יוצרים את נקודת הקצה של ה-HTTP בפונקציות Cloud Run או ב-Cloud Run.
- יוצרים פונקציה מרוחקת ב-BigQuery באמצעות סוג החיבור
CLOUD_RESOURCE. - משתמשים בפונקציה המרוחקת בשאילתה בדיוק כמו בכל UDF אחר של BigQuery.
מידע נוסף על פונקציות מרחוק זמין במאמרים פונקציות מרחוק, מגבלות ומכסות ומגבלות.
תהליכים מאוחסנים
תהליך מאוחסן של SQL הוא אוסף של הצהרות שאפשר לקרוא להן משאילתות אחרות או מתהליכים מאוחסנים אחרים. נותנים שם לפרוצדורה ומאחסנים אותה במערך נתונים ב-BigQuery.
פרוצדורות מאוחסנות תומכות בהצהרות של שפות פרוצדורליות, שמאפשרות לבצע פעולות כמו הגדרת משתנים והטמעה של זרימת בקרה. מידע נוסף על הצהרות בשפה פרוצדורלית זמין במאמר הפניה לשפה פרוצדורלית.
תהליך מאוחסן יכול לבצע את הפעולות הבאות:
- לקבל ארגומנטים של קלט ולהחזיר ערכים כפלט.
- גישה לנתונים או שינוי שלהם בכמה מערכי נתונים על ידי כמה משתמשים.
- מכילה שאילתה עם כמה הצהרות.
חלק מהתהליכים המאוחסנים מוטמעים ב-BigQuery ואין צורך ליצור אותם. הן נקראות פרוצדורות מערכת, ומידע נוסף עליהן זמין בהפניה לפרוצדורות מערכת.
יש גם תמיכה בתהליכים מאוחסנים ב-Spark ב-BigQuery. יש מכסות ומגבלות שחלות על הפעולות האלה.
מידע נוסף על פרוצדורות מאוחסנות זמין במאמר פרוצדורות מאוחסנות ב-SQL.