מבוא לתרחישים
במאמר הזה מוסבר איך לבחור שגרה, שהיא סוג משאב שמשמש ליצירת פונקציות או פרוצדורות מאוחסנות ב-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 יכולות גם להחזיר את הערך של שאילתת משנה סקלרית.
- פונקציות בהגדרת המשתמש שמבוססות על JavaScript מאפשרות לקרוא לקוד שנכתב ב-JavaScript מתוך שאילתת SQL.
- פונקציות UDF ב-JavaScript צורכות בדרך כלל יותר משאבי יחידות קיבולת (Slot) בהשוואה לשאילתות SQL סטנדרטי, ולכן הן פוגעות בביצועי העבודה.
- אם אפשר לבטא את הפונקציה ב-SQL, לרוב עדיף להריץ את הקוד כמשימת שאילתת SQL סטנדרטי.
- פונקציות UDF מבוססות Python נוצרות ומופעלות במשאבים מנוהלים של BigQuery. הפונקציות האלה מאפשרות לכם להטמיע פונקציה ב-Python ולהשתמש בה בשאילתת SQL.
- אתם יכולים לגשת לשירות Google Cloud או לשירות חיצוני מפונקציית UDF של Python באמצעות חשבון השירות של קישור למשאבים ב-Cloud.
- אפשר גם להתקין ספריות של צד שלישי מאינדקס החבילות של Python (PyPI).
פונקציות UDF שנוצרו על ידי הקהילה
בנוסף ל-UDF שאתם יוצרים, יש UDF שנוצרו על ידי הקהילה וזמינים במערך הנתונים הציבורי bigquery-public-data.persistent_udfs ובמאגר הקוד הפתוח bigquery-utils ב-GitHub.
פונקציות צבירה בהגדרת המשתמש (UDAFs)
פונקציית UDAF מאפשרת ליצור פונקציית צבירה באמצעות ביטוי שמכיל קוד SQL או JavaScript. פונקציית UDAF מקבלת עמודות קלט, מבצעת חישוב על קבוצת שורות בכל פעם, ואז מחזירה את תוצאת החישוב כערך יחיד.
פונקציות UDAFs לא יכולות לשנות נתונים, לתקשר עם מערכות חיצוניות או לשלוח יומנים ל-Google Cloud Observability או לאפליקציות דומות.
מידע נוסף זמין במקורות המידע הבאים:
פונקציות UDAFs של SQL
בדרך כלל, פונקציות UDAFs ב-SQL צוברות פרמטרים של פונקציות בכל השורות בקבוצה.
עם זאת, אפשר לציין פרמטר של פונקציה כפרמטר שאינו מצטבר באמצעות מילת המפתח NOT AGGREGATE. פרמטר של פונקציה לא מצטברת הוא פרמטר של פונקציה סקלרית עם ערך קבוע לכל השורות בקבוצה. פונקציות UDAFs של SQL יכולות להכיל פרמטרים מצטברים ופרמטרים לא מצטברים.
פונקציות מוגדרות על ידי משתמש (UDAFs) ב-JavaScript
פונקציות UDAF של JavaScript יכולות לכלול ספריות JavaScript. גוף הפונקציה של JavaScript יכול לכלול קוד JavaScript מותאם אישית, כמו משתנים גלובליים של JavaScript ופונקציות מותאמות אישית.
פונקציות שמבוססות על JavaScript בדרך כלל צורכות יותר משאבים, ולכן כדאי לעיין בטיפים האלה לשיפור הביצועים.
יש כמה מגבלות על פונקציות UDAF ב-JavaScript. מותרות רק קידודים מסוג מסוים, ויש דרישות לסריאליזציה ולדה-סריאליזציה.
השוואה בין פונקציות UDF ופונקציות UDAF
ההחלטה אם לבחור UDF או UDAF תלויה במשימה הספציפית שאתם מנסים לבצע.
- כדי לבצע חישוב או טרנספורמציה על ערכי נתונים בודדים, צריך להשתמש ב-UDF.
- כדי לעשות את אותו הדבר על קבוצות של ערכי נתונים, משתמשים בפונקציית UDAF.
לדוגמה, אם רוצים לחשב את הממוצע של עמודת מספרים, צריך להשתמש ב-UDAF. אם רוצים להמיר עמודה של מחרוזות לאותיות רישיות, צריך להשתמש ב-UDF.
יש כמה נקודות דמיון בין UDF לבין UDAF:
- פונקציות UDF ו-UDAF לא יכולות לשנות נתונים, לתקשר עם מערכות חיצוניות או לשלוח יומנים אל Google Cloud Observability או אל אפליקציות דומות. החריג הוא פונקציות מוגדרות על ידי המשתמש (UDF) ב-Python, שיכולות לגשת לשירותים חיצוניים באמצעות קישור למשאבים ב-Cloud. עם זאת, פונקציות UDF ב-Python לא תומכות ב-VPC Service Controls או במפתחות הצפנה בניהול הלקוח (CMEK).
- ל-UDAF יש את אותן מגבלות כמו ל-UDF, ועוד כמה מגבלות.
- ל-UDF ול-UDAF יש את אותן מכסות ומגבלות.
יש הבדלים בין UDF ל-UDAF:
מאפיין |
UDFs |
UDAFs |
|---|---|---|
הגדרה |
פונקציות מוגדרות על ידי המשתמש (UDF) מקבלות עמודות קלט, מבצעות פעולות בקלט ומחזירות את התוצאה של הפעולות האלה בתור ערך. |
פונקציות צבירה מוגדרות על ידי המשתמש (UDAFs) מקבלות עמודות קלט, מבצעות חישוב על קבוצת שורות בכל פעם, ואז מחזירות את התוצאה של החישוב הזה כערך יחיד. |
שפות נתמכות |
SQL, Javascript ו-Python |
SQL ו-JavaScript |
התמדה |
|
|
ארגומנטים וסוגי נתונים |
פונקציות UDF מקבלות ערכי פרמטרים שתואמים ל-GoogleSQL עבור סוגי נתונים ב-BigQuery. חלק מסוגי ה-SQL ממופים ישירות לסוגי JavaScript, אבל אחרים לא. סוגים נתמכים של JavaScript ב-UDF של SQL, ערכי הפרמטרים יכולים להיות רק לפונקציות מוגדרות על ידי המשתמש ב-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.