מבוא לתרחישים

במאמר הזה מוסבר איך לבחור שגרה, שהיא סוג של משאב שמשמש ליצירת פונקציות או פרוצדורות מאוחסנות ב-BigQuery.

שגרות נתמכות

‫BigQuery תומך בשגרות הבאות:

איך בוחרים תרחיש

בקטע הזה מתוארים גורמים שכדאי לקחת בחשבון כשבוחרים שגרה, ומוצגות השוואות בין שגרות לפי משימות.

גורמים שכדאי לקחת בחשבון

כדי לבחור תרחיש, כדאי לקחת בחשבון את הגורמים הבאים, שמתוארים בקטעים של כל סוג תרחיש:

  • סוג המשימה להטמעה.
  • שפת התכנות שבה רוצים להשתמש.
  • סוג ההתמדה שרוצים להטמיע בשגרה: זמנית או קבועה.
  • סוג השימוש החוזר שנדרש לשגרה: בשאילתה אחת או בכמה שאילתות.
  • שיקולי ביצועים.
  • גישה לשירותים חיצוניים.
  • שיתוף השגרה עם משתמשים.

השוואה בין שגרות לפי משימה

בטבלה הבאה מוצגים סוגי המשימות שאפשר לבצע בכל סוג של שגרה:

משימה

סוג משאב שגרתי

יצירת פונקציות שמבצעות משימות למטרות כלליות ב-BigQuery.

פונקציה מוגדרת על ידי המשתמש (UDF) ב-SQL או ב-JavaScript

פונקציית UDAF ב-SQL או ב-JavaScript

ליצור פונקציות שמבצעות משימות למטרות כלליות ב-BigQuery ושמתקשרות עם מערכות חיצוניות של Google Cloud באמצעות חיבור למשאב Cloud.

פונקציית UDF ב-Python

ליצור פונקציות שמצברות נתונים.

UDAFs

ליצור טבלה באמצעות פרמטרים.

פונקציות טבלה

ליצור פונקציות שמשתמשות בשפות, בספריות או בשירותים שלא נתמכים ב-BigQuery. הפונקציות האלה משולבות ישירות עם פונקציות Cloud Run ועם Cloud Run.

פונקציות מרחוק

אפשר להריץ כמה הצהרות בשאילתה אחת בתור שאילתה עם כמה הצהרות באמצעות שפה פרוצדורלית. אפשר להשתמש בשאילתה עם כמה הצהרות כדי:

  • הפעלת כמה הצהרות ברצף, עם מצב משותף.
  • להפוך משימות ניהול לאוטומטיות, כמו יצירה או מחיקה של טבלאות.
  • הטמעת לוגיקה מורכבת באמצעות מבני תכנות כמו IF ו-WHILE.

יצירה והפעלה של תהליכים מאוחסנים ב-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.

פונקציות 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:

מאפיין

UDFs

UDAFs

הגדרה

פונקציות מוגדרות על ידי המשתמש (UDF) מקבלות עמודות קלט, מבצעות פעולות בקלט ומחזירות את התוצאה של הפעולות האלה בתור ערך.

פונקציות צבירה מוגדרות על ידי המשתמש (UDAFs) מקבלות עמודות של קלט, מבצעות חישוב על קבוצה של שורות בכל פעם, ואז מחזירות את התוצאה של החישוב הזה כערך יחיד.

שפות נתמכות

‫SQL,‏ JavaScript ו-Python

‫SQL ו-JavaScript

התמדה

  • יכול להיות זמני או קבוע.
  • אפשר להשתמש בפונקציות UDF מתמידות בכמה שאילתות.
  • אפשר להשתמש בפונקציות UDF זמניות רק בשאילתה אחת.
  • פונקציות UDF ב-Python יכולות להיות רק קבועות, ולא זמניות.
  • יכול להיות זמני או קבוע.
  • אפשר להשתמש בפונקציות UDAF מתמידות בכמה שאילתות.
  • אפשר להשתמש בפונקציות UDAF זמניות רק בשאילתה, בסקריפט, בסשן או בפרוצדורה יחידים.
  • אפשר לקרוא לפונקציות UDAF קבועות בבטחה כשהן משותפות בין בעלים.

ארגומנטים וסוגי נתונים

פונקציות UDF מקבלות ערכי פרמטרים שתואמים ל-GoogleSQL עבור סוגי נתונים ב-BigQuery. חלק מסוגי ה-SQL ממופים ישירות לסוגי JavaScript, אבל אחרים לא. סוגים נתמכים של JavaScript

ב-UDF של SQL, ערכי הפרמטרים יכולים להיות ANY TYPE, שיכולים להתאים ליותר מסוג אחד של ארגומנטים כשהפונקציה מופעלת.

רק לפונקציות מוגדרות על ידי המשתמש (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.

דוגמאות למשימות שאפשר לבצע באמצעות פונקציות מרוחקות:

כדי ליצור פונקציה מרחוק:

  1. יוצרים את נקודת הקצה של ה-HTTP בפונקציות Cloud Run או ב-Cloud Run.
  2. יוצרים פונקציה מרוחקת ב-BigQuery באמצעות סוג החיבור CLOUD_RESOURCE.
  3. משתמשים בפונקציה המרוחקת בשאילתה בדיוק כמו בכל UDF אחר של BigQuery.

מידע נוסף על פונקציות מרחוק זמין במאמרים פונקציות מרחוק, מגבלות ומכסות ומגבלות.

תהליכים מאוחסנים

תהליך מאוחסן של SQL הוא אוסף של הצהרות שאפשר לקרוא להן משאילתות אחרות או מתהליכים מאוחסנים אחרים. נותנים שם לפרוצדורה ומאחסנים אותה במערך נתונים ב-BigQuery.

פרוצדורות מאוחסנות תומכות בהצהרות של שפות פרוצדורליות, שמאפשרות לבצע פעולות כמו הגדרת משתנים והטמעה של זרימת בקרה. מידע נוסף על הצהרות בשפה פרוצדורלית זמין במאמר הפניה לשפה פרוצדורלית.

תהליך מאוחסן יכול לבצע את הפעולות הבאות:

  • לקבל ארגומנטים של קלט ולהחזיר ערכים כפלט.
  • גישה לנתונים או שינוי שלהם בכמה מערכי נתונים על ידי כמה משתמשים.
  • מכילה שאילתה עם כמה הצהרות.

חלק מהתהליכים המאוחסנים מוטמעים ב-BigQuery ואין צורך ליצור אותם. הן נקראות פרוצדורות מערכת, ומידע נוסף עליהן זמין בהפניה לפרוצדורות מערכת.

יש גם תמיכה בתהליכים מאוחסנים ב-Spark ב-BigQuery. יש מכסות ומגבלות שחלות על הפעולות האלה.

מידע נוסף על פרוצדורות מאוחסנות זמין במאמר פרוצדורות מאוחסנות ב-SQL.